如何反转sp_hidetext命令?

时间:2010-01-27 01:28:49

标签: sql-server sybase

看来它无法完成,但我真的不知道为什么。当Sql Server执行存储过程时,需要它的代码来运行它,所以我确定存储过程的代码必须存在于某个地方,但我不知道在哪里。

也许这段代码是加密的,但可以使用某种工具解密,因为DBMS在执行时需要这样做。

所以,我想知道软件是否存在一个众所周知的地方(以某种方式或其他方式存储),以及是否有工具来提取和获取命令sp_hidetext隐藏的源代码。 / p>

5 个答案:

答案 0 :(得分:1)

没有。这是一个安全问题。它以秘密方式存储在内部,您无法访问。只有DBMS知道如何获取它,就像Credential有一个加密但能够解密的密码,以便在适当的时候使用密码。

答案 1 :(得分:1)

来自online sybase manual

  

警告!

     

在执行sp_hidetext之前,make   确定你有源的备份   文本。执行结果   sp_hidetext不可逆。

答案 2 :(得分:0)

你必须查看sp_hidetext的实际来源(我的意思是创建sp_hidetext的绝对低级代码),以便了解隐藏文本的算法。这里最好的选择是始终保留原始存储过程的副本作为备份。我确信这是作为SDLC的一部分完成的吗?

答案 3 :(得分:0)

罗布是对的。即使sybase说他们也不能反转代码(但我猜他们可以;)。

检查

$SYBASE/$SYBASE_ASE/scripts/installmaster

您可以找到sybsystemprocs

中安装的所有过程的源代码

如果您关注链条,最终会得到:

    /* Do hidetext stuff */
    /* ISSUE, get return value of dbcc */
    dbcc hidetext("#proc_objid_t_tab", 16)

..这基本上是内部功能,没有可用的源(至少对你来说......和我:)

答案 4 :(得分:0)

这是可能的,而且非常困难。

选项1:诊断服务器

(改编自this forum thread。我没有对此进行过测试。我确信它对SQL Anywhere不起作用,因为它没有诊断模式,但据称它适用于ASE。)

使用diagsrvr.exe程序以诊断模式启动服务器。然后使用一些SQL工具连接到它,并运行这些命令(其中SECRETPROC是您感兴趣的隐藏过程的名称):

create table #x (id int)
insert into #x values (object_id ('SECRETPROC'))
dbcc _unhide_text ('#x')
go

sp_helptext将照常正常工作。

选项2:内存检查

(最初发表on my blog。我在SQL Anywhere 11上测试了这个。我想它也适用于类似的产品。)

  

要使服务器将其加载到内存中,您需要调用它。 SQL Anywhere的某些安装附带了一个标记为dbisql.exe的工具,您可以将其用作交互式SQL环境。调用程序 - 它不必运行;我建议用一些虚假的参数来调用它,这样你就不会意外地运行一些不好的东西。然后快速打开任务管理器,找到服务器进程(因为我使用的是SQL Anywhere 11,因此我称之为dbsrv11.exe),右键单击它,然后选择创建转储文件

     

完成后,在十六进制编辑器中打开生成的文件(虽然记事本也可能有效)。我喜欢XVI32这样的事情。搜索程序的名称 - 例如SECRETPROC - 正确的大写字母。会有一些提及它(以及它的混淆版本),继续前进,直到你看到一个以create function开头并且后面有一堆SQL代码。从该关键短语到下一个空字节的所有内容都是存储过程的代码。

     

如果您正在使用XVI32,请单击右侧窗格中感兴趣部分的开头并按住Shift键,同时使用箭头键转到所需部分的末尾。文字会变成红色。然后,您可以使用Ctrl + C复制数据,按Ctrl + N创建新文件,按Ctrl + V粘贴数据,然后使用文件→保存将其写入新文件。