http://www.sufeinet.com/plugin.php?id=keke_group

苏飞论坛

 找回密码
 马上注册

QQ登录

只需一步,快速开始

分布式系统框架(V2.0) 轻松承载百亿数据,千万流量!讨论专区 - 源码下载 - 官方教程

HttpHelper爬虫框架(V2.7-含.netcore) HttpHelper官方出品,爬虫框架讨论区 - 源码下载 - 在线测试和代码生成

HttpHelper爬虫类(V2.0) 开源的爬虫类,支持多种模式和属性 源码 - 代码生成器 - 讨论区 - 教程- 例子

查看: 7545|回复: 8

[Sql Server] 如何解密加密的存储过程 来看看吧

[复制链接]
发表于 2012-11-7 15:53:12 | 显示全部楼层 |阅读模式
  1. 把以下代码复制到 SQL 2000 复制到查询分析器中,一定要记得选对数据库,执行成功后,你可以发现,在存储过程列表中就会出现一个名为sp_decrypt 的存储过程,这个就是用来解密的

  2. CREATE PROCEDURE sp_decrypt(@objectname varchar(50))   
  3. AS   
  4. begin   
  5. set nocount on   
  6. begin tran   
  7. declare @objectname1 varchar(100),@orgvarbin varbinary(8000)   
  8. declare @sql1 nvarchar(4000),@sql2 varchar(8000),@sql3 nvarchar(4000),@sql4 nvarchar(4000)   
  9. DECLARE @OrigSpText1 nvarchar(4000), @OrigSpText2 nvarchar(4000) , @OrigSpText3 nvarchar(4000), @resultsp nvarchar(4000)   
  10. declare @i int,@status int,@type varchar(10),@parentid int   
  11. declare @colid int,@n int,@q int,@j int,@k int,@encrypted int,@number int   
  12. select @type=xtype,@parentid=parent_obj from sysobjects where id=object_id(@objectname)   
  13.   
  14. create table #temp(number int,colid int,ctext varbinary(8000),encrypted int,status int)   
  15. insert #temp SELECT number,colid,ctext,encrypted,status FROM syscomments WHERE id = object_id(@objectname)   
  16. select @number=max(number) from #temp   
  17. set @k=0   
  18.   
  19. while @k<=@number   
  20. begin   
  21. if exists(select 1 from syscomments where id=object_id(@objectname) and number=@k)   
  22. begin   
  23. if @type='P'   
  24. set @sql1=(case when @number>1 then 'ALTER PROCEDURE '+ @objectname +';'+rtrim(@k)+' WITH ENCRYPTION AS '   
  25. else 'ALTER PROCEDURE '+ @objectname+' WITH ENCRYPTION AS '   
  26. end)   
  27.   
  28. if @type='TR'   
  29. begin   
  30. declare @parent_obj varchar(255),@tr_parent_xtype varchar(10)   
  31. select @parent_obj=parent_obj from sysobjects where id=object_id(@objectname)   
  32. select @tr_parent_xtype=xtype from sysobjects where id=@parent_obj   
  33. if @tr_parent_xtype='V'   
  34. begin   
  35. set @sql1='ALTER TRIGGER '+@objectname+' ON '+OBJECT_NAME(@parentid)+' WITH ENCRYPTION INSTERD OF INSERT AS PRINT 1 '   
  36. end   
  37. else   
  38. begin   
  39. set @sql1='ALTER TRIGGER '+@objectname+' ON '+OBJECT_NAME(@parentid)+' WITH ENCRYPTION FOR INSERT AS PRINT 1 '   
  40. end   
  41.   
  42. end   
  43. if @type='FN' or @type='TF' or @type='IF'   
  44. set @sql1=(case @type when 'TF' then   
  45. 'ALTER FUNCTION '+ @objectname+'(@a char(1)) returns @b table(a varchar(10)) with encryption as begin insert @b select @a return end '   
  46. when 'FN' then   
  47. 'ALTER FUNCTION '+ @objectname+'(@a char(1)) returns char(1) with encryption as begin return @a end'   
  48. when 'IF' then   
  49. 'ALTER FUNCTION '+ @objectname+'(@a char(1)) returns table with encryption as return select @a as a'   
  50. end)   
  51.   
  52. if @type='V'   
  53. set @sql1='ALTER VIEW '+@objectname+' WITH ENCRYPTION AS SELECT 1 as f'   
  54.   
  55. set @q=len(@sql1)   
  56. set @sql1=@sql1+REPLICATE('-',4000-@q)   
  57. select @sql2=REPLICATE('-',8000)   
  58. set @sql3='exec(@sql1'   
  59. select @colid=max(colid) from #temp where number=@k   
  60. set @n=1   
  61. while @n<=CEILING(1.0*(@colid-1)/2) and len(@sql3)<=3996   
  62. begin   
  63. set @sql3=@sql3+'+@'   
  64. set @n=@n+1   
  65. end   
  66. set @sql3=@sql3+')'   
  67. exec sp_executesql @sql3,N'@sql1 nvarchar(4000),@ varchar(8000)',@sql1=@sql1,@=@sql2   
  68.   
  69. end   
  70. set @k=@k+1   
  71. end   
  72.   
  73. set @k=0   
  74. while @k<=@number   
  75. begin   
  76.   
  77. if exists(select 1 from syscomments where id=object_id(@objectname) and number=@k)   
  78. begin   
  79. select @colid=max(colid) from #temp where number=@k   
  80. set @n=1   
  81.   
  82. while @n<=@colid   
  83. begin   
  84. select @OrigSpText1=ctext,@encrypted=encrypted,@status=status FROM #temp WHERE colid=@n and number=@k   
  85.   
  86. SET @OrigSpText3=(SELECT ctext FROM syscomments WHERE id=object_id(@objectname) and colid=@n and number=@k)   
  87. if @n=1   
  88. begin   
  89. if @type='P'   
  90. SET @OrigSpText2=(case when @number>1 then 'CREATE PROCEDURE '+ @objectname +';'+rtrim(@k)+' WITH ENCRYPTION AS '   
  91. else 'CREATE PROCEDURE '+ @objectname +' WITH ENCRYPTION AS '   
  92. end)   
  93.   
  94.   
  95. if @type='FN' or @type='TF' or @type='IF'   
  96. SET @OrigSpText2=(case @type when 'TF' then   
  97. 'CREATE FUNCTION '+ @objectname+'(@a char(1)) returns @b table(a varchar(10)) with encryption as begin insert @b select @a return end '   
  98. when 'FN' then   
  99. 'CREATE FUNCTION '+ @objectname+'(@a char(1)) returns char(1) with encryption as begin return @a end'   
  100. when 'IF' then   
  101. 'CREATE FUNCTION '+ @objectname+'(@a char(1)) returns table with encryption as return select @a as a'   
  102. end)   
  103.   
  104. if @type='TR'   
  105. begin   
  106.   
  107. if @tr_parent_xtype='V'   
  108. begin   
  109. set @OrigSpText2='CREATE TRIGGER '+@objectname+' ON '+OBJECT_NAME(@parentid)+' WITH ENCRYPTION INSTEAD OF INSERT AS PRINT 1 '   
  110. end   
  111. else   
  112. begin   
  113. set @OrigSpText2='CREATE TRIGGER '+@objectname+' ON '+OBJECT_NAME(@parentid)+' WITH ENCRYPTION FOR INSERT AS PRINT 1 '   
  114. end   
  115.   
  116. end   
  117.   
  118. if @type='V'   
  119. set @OrigSpText2='CREATE VIEW '+@objectname+' WITH ENCRYPTION AS SELECT 1 as f'   
  120.   
  121. set @q=4000-len(@OrigSpText2)   
  122. set @OrigSpText2=@OrigSpText2+REPLICATE('-',@q)   
  123. end   
  124. else   
  125. begin   
  126. SET @OrigSpText2=REPLICATE('-', 4000)   
  127. end   
  128. SET @i=1   
  129.   
  130. SET @resultsp = replicate(N'A', (datalength(@OrigSpText1) / 2))   
  131.   
  132. WHILE @i<=datalength(@OrigSpText1)/2   
  133. BEGIN   
  134.   
  135. SET @resultsp = stuff(@resultsp, @i, 1, NCHAR(UNICODE(substring(@OrigSpText1, @i, 1)) ^   
  136. (UNICODE(substring(@OrigSpText2, @i, 1)) ^   
  137. UNICODE(substring(@OrigSpText3, @i, 1)))))   
  138. SET @i=@i+1   
  139. END   
  140. set @orgvarbin=cast(@OrigSpText1 as varbinary(8000))   
  141. set @resultsp=(case when @encrypted=1   
  142. then @resultsp   
  143. else convert(nvarchar(4000),case when @status&2=2 then uncompress(@orgvarbin) else @orgvarbin end)   
  144. end)   
  145. print @resultsp   
  146.   
  147. set @n=@n+1   
  148.   
  149. end   
  150.   
  151. end   
  152. set @k=@k+1   
  153. end   
  154.   
  155. drop table #temp   
  156. rollback tran   
  157. end   




  158. ===========================代码========
  159. 接着新建一个查询,输入

  160. exec sp_decrypt '需要解密的存储过程名字'

  161. 执行一下,就会把这个存储过程内容,显示在下边
复制代码


1. 开通SVIP会员,免费下载本站所有源码,不限次数据,不限时间
2. 加官方QQ群,加官方微信群获取更多资源和帮助
3. 找站长苏飞做网站、商城、CRM、小程序、App、爬虫相关、项目外包等点这里
 楼主| 发表于 2012-11-9 16:39:04 | 显示全部楼层
自己顶下                        
发表于 2012-12-25 13:34:23 | 显示全部楼层
迷情 发表于 2012-11-9 16:39
自己顶下

还不错,欢迎常来交流意见
发表于 2013-1-2 23:44:07 | 显示全部楼层
{:soso_e179:}能做个有界面的破解工具就最好了
发表于 2013-1-19 00:44:51 | 显示全部楼层
这个存储过程的解密。我有写一个工具,自动解密2000和2005,2008的,将解密的代码显示在文本框中
 楼主| 发表于 2013-2-27 16:17:31 | 显示全部楼层
qiang8484 发表于 2013-1-19 00:44
这个存储过程的解密。我有写一个工具,自动解密2000和2005,2008的,将解密的代码显示在文本框中

不错 希望楼主能贴出来 大家一起交流
发表于 2013-4-1 12:41:16 | 显示全部楼层

2005

2005

发表于 2013-4-1 12:42:37 | 显示全部楼层
由于这个工具暂时不是独立的程序的。暂无法完全公布该程序了。
等有时间单独处理后,共享大家。
 楼主| 发表于 2013-4-16 11:23:38 | 显示全部楼层
qiang8484 发表于 2013-4-1 12:42
由于这个工具暂时不是独立的程序的。暂无法完全公布该程序了。
等有时间单独处理后,共享大家。

嗯 好 谢谢啦
您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

QQ|手机版|小黑屋|手机版|联系我们|关于我们|广告合作|苏飞论坛 ( 豫ICP备18043678号-2)

GMT+8, 2024-11-23 11:19

© 2014-2021

快速回复 返回顶部 返回列表