看来它无法完成,但我真的不知道为什么。当Sql Server执行存储过程时,需要它的代码来运行它,所以我确定存储过程的代码必须存在于某个地方,但我不知道在哪里。
也许这段代码是加密的,但可以使用某种工具解密,因为DBMS在执行时需要这样做。
所以,我想知道软件是否存在一个众所周知的地方(以某种方式或其他方式存储),以及是否有工具来提取和获取命令sp_hidetext隐藏的源代码。 / p>
答案 0 :(得分:1)
没有。这是一个安全问题。它以秘密方式存储在内部,您无法访问。只有DBMS知道如何获取它,就像Credential有一个加密但能够解密的密码,以便在适当的时候使用密码。
答案 1 :(得分:1)
警告!
在执行sp_hidetext之前,make 确定你有源的备份 文本。执行结果 sp_hidetext不可逆。
答案 2 :(得分:0)
你必须查看sp_hidetext的实际来源(我的意思是创建sp_hidetext的绝对低级代码),以便了解隐藏文本的算法。这里最好的选择是始终保留原始存储过程的副本作为备份。我确信这是作为SDLC的一部分完成的吗?
答案 3 :(得分:0)
检查
$SYBASE/$SYBASE_ASE/scripts/installmaster
您可以找到sybsystemprocs
中安装的所有过程的源代码如果您关注链条,最终会得到:
/* Do hidetext stuff */
/* ISSUE, get return value of dbcc */
dbcc hidetext("#proc_objid_t_tab", 16)
..这基本上是内部功能,没有可用的源(至少对你来说......和我:)
答案 4 :(得分:0)
这是可能的,而且非常困难。
(改编自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
将照常正常工作。
(最初发表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粘贴数据,然后使用文件→保存将其写入新文件。