设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 2405|回复: 0
打印 上一主题 下一主题

[与其它组件] [转帖]SQL Server 2000 之存储过程解密

[复制链接]

点击这里给我发消息

跳转到指定楼层
1#
发表于 2004-7-6 10:03:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
转自:微软亚洲技术社区

作者:net2004



以下是一个解密存储过程的存储过程,这年头什么都不保鲜!

试试看,不错的!但是不要忘记备份吧,这个是有破坏性的!
  1. ------------------------sql2000大于40000的-----------------



  2. create PROCEDURE sp_decrypt_sp1 (@objectName varchar(50))

  3. AS

  4. begin

  5. declare @objectname1 varchar(100)

  6. declare @sql1 nvarchar(4000),@sql2 nvarchar(4000),@sql3 nvarchar(4000),@sql4 nvarchar(4000),@sql5 nvarchar(4000),@sql6 nvarchar(4000),@sql7 nvarchar(4000),@sql8 nvarchar(4000),@sql9 nvarchar(4000),@sql10 nvarchar(4000)

  7. DECLARE @OrigSpText1 nvarchar(4000), @OrigSpText2 nvarchar(4000) , @OrigSpText3 nvarchar(4000), @resultsp nvarchar(4000)

  8. declare @i int , @t bigint

  9. declare @m int,@n int,@q int

  10. set @m=(SELECT max(colid) FROM syscomments WHERE id = object_id(@objectName))

  11. set @n=1

  12. --get encrypted data

  13. create table #temp(colid int,ctext varbinary(8000))

  14. insert #temp SELECT colid,ctext FROM syscomments WHERE id = object_id(@objectName)

  15. set @sql1='ALTER PROCEDURE '+ @objectName +' WITH ENCRYPTION AS '

  16. --set @sql1='ALTER PROCEDURE '+ @objectName +' WITH ENCRYPTION AS '

  17. set @q=len(@sql1)

  18. set @sql1=@sql1+REPLICATE('-',4000-@q)

  19. select @sql2=REPLICATE('-',4000),@sql3=REPLICATE('-',4000),@sql4=REPLICATE('-',4000),@sql5=REPLICATE('-',4000),@sql6=REPLICATE('-',4000),@sql7=REPLICATE('-',4000),@sql8=REPLICATE('-',4000),@sql9=REPLICATE('-',4000),@sql10=REPLICATE('-',4000)

  20. exec(@sql1+@sql2+@sql3+@sql4+@sql5+@sql6+@sql7+@sql8+@sql9+@sql10)

  21. while @n<=@m

  22. begin

  23. SET @OrigSpText1=(SELECT ctext FROM #temp WHERE colid=@n)

  24. set @objectname1=@objectname+'_t'

  25. SET @OrigSpText3=(SELECT ctext FROM syscomments WHERE id=object_id(@objectName) and colid=@n)

  26. if @n=1

  27. begin

  28. SET @OrigSpText2='CREATE PROCEDURE '+ @objectName +' WITH ENCRYPTION AS '--

  29. set @q=4000-len(@OrigSpText2)

  30. set @OrigSpText2=@OrigSpText2+REPLICATE('-',@q)

  31. end

  32. else

  33. begin

  34. SET @OrigSpText2=REPLICATE('-', 4000)

  35. end

  36. --start counter

  37. SET @i=1

  38. --fill temporary variable

  39. SET @resultsp = replicate(N'A', (datalength(@OrigSpText1) / 2))



  40. --loop

  41. WHILE @i<=datalength(@OrigSpText1)/2

  42. BEGIN

  43. --reverse encryption (XOR original+bogus+bogus encrypted)

  44. SET @resultsp = stuff(@resultsp, @i, 1, NCHAR(UNICODE(substring(@OrigSpText1, @i, 1)) ^

  45. (UNICODE(substring(@OrigSpText2, @i, 1)) ^

  46. UNICODE(substring(@OrigSpText3, @i, 1)))))

  47. SET @i=@i+1

  48. END

  49. --drop original SP

  50. --EXECUTE ('drop PROCEDURE '+ @objectName)

  51. --remove encryption

  52. --preserve case

  53. SET @resultsp=REPLACE((@resultsp),'WITH ENCRYPTION', '')

  54. SET @resultsp=REPLACE((@resultsp),'With Encryption', '')

  55. SET @resultsp=REPLACE((@resultsp),'with encryption', '')

  56. IF CHARINDEX('WITH ENCRYPTION',UPPER(@resultsp) )>0

  57. SET @resultsp=REPLACE(UPPER(@resultsp),'WITH ENCRYPTION', '')

  58. --replace Stored procedure without enryption

  59. print @resultsp

  60. --execute( @resultsp)

  61. set @n=@n+1

  62. end

  63. drop table #temp

  64. end

  65. GO
复制代码

本帖被以下淘专辑推荐:

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖1 订阅订阅
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-4-30 14:26 , Processed in 0.086042 second(s), 26 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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