設(shè)為首頁收藏本站Access中國

Office中國論壇/Access中國論壇

 找回密碼
 注冊

QQ登錄

只需一步,快速開始

返回列表 發(fā)新帖
查看: 2605|回復(fù): 0
打印 上一主題 下一主題

[與其它組件] [轉(zhuǎn)帖]SQL Server 2000 之存儲過程解密

[復(fù)制鏈接]

點擊這里給我發(fā)消息

跳轉(zhuǎn)到指定樓層
1#
發(fā)表于 2004-7-6 10:03:00 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
轉(zhuǎn)自:微軟亞洲技術(shù)社區(qū)

作者: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
復(fù)制代碼

本帖被以下淘專輯推薦:

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 分享淘帖1 訂閱訂閱
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則

QQ|站長郵箱|小黑屋|手機(jī)版|Office中國/Access中國 ( 粵ICP備10043721號-1 )  

GMT+8, 2024-10-23 08:34 , Processed in 0.117059 second(s), 26 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回復(fù) 返回頂部 返回列表