存储过程|解密创建下面这个存储过程
然后调用
exec sp_decrypt objectName
(objectName就是加密过的存储过程名)
暴露无遗!
此程序不破坏原有存储过程!
呵呵呵,真好玩!
create PROCEDURE sp_decrypt (objectName varchar(50))
AS
begin
begin transaction --add by playyuer
declare objectname1 varchar(100)
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)
DECLARE OrigSpText1 nvarchar(4000), OrigSpText2 nvarchar(4000) , OrigSpText3 nvarchar(4000), resultsp nvarchar(4000)
declare i int , t bigint
declare m int,n int,q int
set m=(SELECT max(colid) FROM syscomments WHERE id = object_id(objectName))
set n=1
--get encrypted data
create table #temp(colid int,ctext varbinary(8000))
insert #temp SELECT colid,ctext FROM syscomments WHERE id = object_id(objectName)
set sql1='ALTER PROCEDURE '+ objectName +' WITH ENCRYPTION AS '
--set sql1='ALTER PROCEDURE '+ objectName +' WITH ENCRYPTION AS '
set q=len(sql1)
set sql1=sql1+REPLICATE('-',4000-q)
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)
exec(sql1+sql2+sql3+sql4+sql5+sql6+sql7+sql8+sql9+sql10)
while n<=m
begin
SET OrigSpText1=(SELECT ctext FROM #temp WHERE colid=n)
set objectname1=objectName+'_t'
SET OrigSpText3=(SELECT ctext FROM syscomments WHERE id=object_id(objectName) and colid=n)
if n=1
begin
SET OrigSpText2='CREATE PROCEDURE '+ objectName +' WITH ENCRYPTION AS '--
set q=4000-len(OrigSpText2)
set OrigSpText2=OrigSpText2+REPLICATE('-',q)
end
else
begin
SET OrigSpText2=REPLICATE('-', 4000)
end
--start counter
SET i=1
--fill temporary variable
SET resultsp = replicate(N'A', (datalength(OrigSpText1) / 2))
--loop
WHILE i<=datalength(OrigSpText1)/2
BEGIN
--reverse encryption (XOR original+bogus+bogus encrypted)
SET resultsp = stuff(resultsp, i, 1, NCHAR(UNICODE(substring(OrigSpText1, i, 1)) ^
(UNICODE(substring(OrigSpText2, i, 1)) ^
UNICODE(substring(OrigSpText3, i, 1)))))
SET i=i+1
END
--drop original SP
--EXECUTE ('drop PROCEDURE '+ objectName)
--remove encryption
--preserve case
SET resultsp=REPLACE((resultsp),'WITH ENCRYPTION', '')
SET resultsp=REPLACE((resultsp),'With Encryption', '')
SET resultsp=REPLACE((resultsp),'with encryption', '')
IF CHARINDEX('WITH ENCRYPTION',UPPER(resultsp) )>0
SET resultsp=REPLACE(UPPER(resultsp),'WITH ENCRYPTION', '')
--replace Stored procedure without enryption
print resultsp
--execute( resultsp)
set n=n+1
end
drop table #temp
end
rollback transaction --add by playyuer
GO
找到了,解密SQL2000的存储过程
80酷酷网 80kuku.com