.NEt专家博客!

【草原和大树】解密MsSql存储过程

上一篇 / 下一篇  2008-07-23 13:51:17 / 个人分类:数据库技术

create     PROCEDURE   sp_decrypt(@objectname   varchar(50))  
zN/PO s s0  AS  
2}"n/\Zts;S[0  begin  ITPUB个人空间sG}/T7{i qt5j
  set   nocount   on  ITPUB个人空间 Z.M+d4oJ8K2}
  --CSDN:j9988   copyright:2004.07.15    
+tm4Y6@1M,w(J-^0C0  --V3.2    ITPUB个人空间 d r/n1{JC LS%AM
  --破解字节不受限制,适用于SQLSERVER2000存储过程,函数,视图,触发器  
v$a6m"U3D m0  --修正上一版"视图触发器"不能正确解密错误  
o\D'V;r Y3?4fH0  --发现有错,请E_MAIL:CSDNj9988@tom.com  ITPUB个人空间2?ksrP/ZBd;N
  begin   tran  ITPUB个人空间B(J!dT;@.H
  declare   @objectname1   varchar(100),@orgvarbin   varbinary(8000)  ITPUB个人空间 W:lAw#uaS"J7L n
  declare   @sql1   nvarchar(4000),@sql2   varchar(8000),@sql3   nvarchar(4000),@sql4   nvarchar(4000)  ITPUB个人空间6U+`1v4hK;pR
  DECLARE     @OrigSpText1   nvarchar(4000),     @OrigSpText2   nvarchar(4000)   ,   @OrigSpText3   nvarchar(4000),   @resultsp   nvarchar(4000)  ITPUB个人空间f!`#q\d5y2{8H2T'G0W/v
  declare     @i   int,@status   int,@type   varchar(10),@parentid   int  
*\kCSXY0  declare   @colid   int,@n   int,@q   int,@j   int,@k   int,@encrypted   int,@number   int  
DS?8dq0  select   @type=xtype,@parentid=parent_obj   from   sysobjects   where   id=object_id(@objectname)  ITPUB个人空间#Xa\_u}.XRCg HJ0R
   
p?x/S/N3lT'J0  create   table     #temp(number   int,colid   int,ctext   varbinary(8000),encrypted   int,status   int)  
MdQm m2Z R0  insert   #temp   SELECT   number,colid,ctext,encrypted,status   FROM   syscomments     WHERE   id   =   object_id(@objectname)  ITPUB个人空间9x#D Z6s.i u5h
  select   @number=max(number)   from   #temp  ITPUB个人空间Ns'U3Y7j k-m
  set   @k=0  ITPUB个人空间F3iN Q.K(j)Wl;g.k
   
?A+N;Q.c!O0  while   @k<=@number    ITPUB个人空间~ L`zW
  begin  ITPUB个人空间H@k2kF z o5d0]h
  if   exists(select   1   from   syscomments   where   id=object_id(@objectname)   and   number=@k)  ITPUB个人空间^&}(| B/c W0X
  begin  
J.]#}^Eb0  if   @type='P'  
"} n/}7e @0  set   @sql1=(case   when   @number>1   then   'ALTER   PROCEDURE   '+   @objectname   +';'+rtrim(@k)+'   WITH   ENCRYPTION   AS   '  ITPUB个人空间uD Q'}1ed/tj$hC
                                                      else   'ALTER   PROCEDURE   '+   @objectname+'   WITH   ENCRYPTION   AS   '  
(\%t9@)Y W6pf/G]3E0                                                      end)  
4fW K.c(uA,RI0   ITPUB个人空间'OhD`O]1T2AL
  if   @type='TR'  
3r'Y }8g%P&U6V,|Fx7E0  begin  ITPUB个人空间v%d%Ec/^N!K/R9P8q
  declare   @parent_obj   varchar(255),@tr_parent_xtype   varchar(10)  
2u8}b$G+A"V8oY!pp0  select   @parent_obj=parent_obj   from   sysobjects   where   id=object_id(@objectname)  ITPUB个人空间bn A4S0x!N~
  select   @tr_parent_xtype=xtype   from   sysobjects   where   id=@parent_obj  
(b}Fk1IL0  if   @tr_parent_xtype='V'  ITPUB个人空间e4_0^4Q Z T `j
  begin  ITPUB个人空间 z@ Am$_$N Z1E&O'y
  set   @sql1='ALTER   TRIGGER   '+@objectname+'   ON   '+OBJECT_NAME(@parentid)+'   WITH   ENCRYPTION   INSTERD   OF   INSERT   AS   PRINT   1   '  
UdRnE0  end  ITPUB个人空间!R*v9{EN
  else  ITPUB个人空间j,ew#?%G0mgyS
  begin  
9M)Xv)M!X[5z}0  set   @sql1='ALTER   TRIGGER   '+@objectname+'   ON   '+OBJECT_NAME(@parentid)+'   WITH   ENCRYPTION   FOR   INSERT   AS   PRINT   1   '  
o\`#td/x&a9JM'qs0  end  
sslf;zrK4[tq0   
9rv0`,^8IjU0  end  ITPUB个人空间 G^|o9t']'R
  if   @type='FN'   or   @type='TF'   or   @type='IF'  ITPUB个人空间'Syq }%[1A ~4l
  set   @sql1=(case   @type   when   'TF'   then    
2CL3r!]:na&Sd0  'ALTER   FUNCTION   '+   @objectname+'(@a   char(1))   returns   @b   table(a   varchar(10))   with   encryption   as   begin   insert   @b   select   @a   return   end   '  ITPUB个人空间qd+e"E/cnu!i
  when   'FN'   then  ITPUB个人空间&kr0p*~8NJK
  'ALTER   FUNCTION   '+   @objectname+'(@a   char(1))   returns   char(1)   with   encryption   as   begin   return   @a   end'  
YC^0c%@L:T`Q(w0  when   'IF'   then  
+nxD [LeT|%S5p0  'ALTER   FUNCTION   '+   @objectname+'(@a   char(1))   returns   table   with   encryption   as   return   select   @a   as   a'  ITPUB个人空间A+_xUkcf
  end)  ITPUB个人空间(N:^.U%_f9N"I~0F ]
   
E*l*io*A&bk0  if   @type='V'  ITPUB个人空间v8qI3d/M,vp)Lzd
  set   @sql1='ALTER   VIEW   '+@objectname+'   WITH   ENCRYPTION   AS   SELECT   1   as   f'  ITPUB个人空间?7kZCi2^C
   
)HK.T,iFY0  set   @q=len(@sql1)  
lu ?\ `0u)n5OkC0  set   @sql1=@sql1+REPLICATE('-',4000-@q)  ITPUB个人空间WvN aq&c9{&K i5t
  select   @sql2=REPLICATE('-',8000)  ITPUB个人空间.pJ"x+j6OV M
  set   @sql3='exec(@sql1'  
b7JD*L/W}ss X(N0  select   @colid=max(colid)   from   #temp   where   number=@k    ITPUB个人空间?uU#FD7l7W;E8J4p*V
  set   @n=1  
&~s U"TY Z(Hl0  while   @n<=CEILING(1.0*(@colid-1)/2)   and   len(@sql3)<=3996  ITPUB个人空间7wfpK3F4W&?
  begin    ITPUB个人空间0n`Z Z*jj'J
  set   @sql3=@sql3+'+@'  ITPUB个人空间9HrG wa
  set   @n=@n+1  
%]){_)@s7r-|0  end  ITPUB个人空间 Y!W%G+T$L
  set   @sql3=@sql3+')'  
\sH1I7M*z0  exec   sp_executesql   @sql3,N'@sql1   nvarchar(4000),@   varchar(8000)',@sql1=@sql1,@=@sql2  ITPUB个人空间0^x u^P$r0F E.dE
   ITPUB个人空间k.b/K$U2]]
  end  ITPUB个人空间6GL$^J u1y*W"^
  set   @k=@k+1  
SR)Q5]C"o1}0  end  ITPUB个人空间w~7g#[u
   
Jb:y+A0n*F os1u0  set   @k=0  
h5v:|b.WL6xQ0  while   @k<=@number    ITPUB个人空间\Y[Y0V3R r
  begin  
)}H MM5S.]#N-V0   
bev/I%cQ,yho:nI&t0  if   exists(select   1   from   syscomments   where   id=object_id(@objectname)   and   number=@k)  ITPUB个人空间 ~TI$z!GY#}sC
  begin  
1r7r7g,V _&uF&y0  select   @colid=max(colid)   from   #temp   where   number=@k    ITPUB个人空间*[?,h;JZ6J
  set   @n=1  
S,W5Gu b N0   
"Tk~\qL(J0  while   @n<=@colid  ITPUB个人空间,vi qYa
  begin  
3JCT1W'Q!aA0  select   @OrigSpText1=ctext,@encrypted=encrypted,@status=status   FROM   #temp     WHERE   colid=@n   and   number=@k  ITPUB个人空间o3C"XJ`t f;?
   
ZK1V&JT/_+A0  SET   @OrigSpText3=(SELECT   ctext   FROM   syscomments   WHERE   id=object_id(@objectname)   and   colid=@n   and   number=@k)  ITPUB个人空间1MU }%h}-lU*CW
  if   @n=1  ITPUB个人空间`lH_jw2b(sf
  begin  
#xJ%F3A?1F$A1N5@ x|0  if   @type='P'  ITPUB个人空间9k K+B_.r}b4MZ
  SET   @OrigSpText2=(case   when   @number>1   then   'CREATE   PROCEDURE   '+   @objectname   +';'+rtrim(@k)+'   WITH   ENCRYPTION   AS   '  ITPUB个人空间.nY%|C WacWsb
                                                else   'CREATE   PROCEDURE   '+   @objectname   +'   WITH   ENCRYPTION   AS   '  
q? TmZ es0                                                end)  ITPUB个人空间UVxJA3NW O2j
   
r3M"zb'~ r0   
*I \~U JS&B N:n0  if   @type='FN'   or   @type='TF'   or   @type='IF'  ITPUB个人空间a:}R'N5x8Ly
  SET   @OrigSpText2=(case   @type   when   'TF'   then    ITPUB个人空间M'U \_e/wn
  'CREATE   FUNCTION   '+   @objectname+'(@a   char(1))   returns   @b   table(a   varchar(10))   with   encryption   as   begin   insert   @b   select   @a   return   end   '  
Y [lEiK0  when   'FN'   then  
]oAB&q~0  'CREATE   FUNCTION   '+   @objectname+'(@a   char(1))   returns   char(1)   with   encryption   as   begin   return   @a   end'  
3W CC[*PQ N s t0  when   'IF'   then  
Nw TM,A0  'CREATE   FUNCTION   '+   @objectname+'(@a   char(1))   returns   table   with   encryption   as   return   select   @a   as   a'  ITPUB个人空间_1}1o0B,anv
  end)  
d MTjtQ d e0PC A0   
;jm7N*UCF-\0  if   @type='TR'    ITPUB个人空间B `m0V#wdA p
  begin  
%vl[#Ur9b0   ITPUB个人空间Dg#rK-H"xt8q
  if   @tr_parent_xtype='V'  
(HC&p1a/j2ce[0  begin  
e`(V.w UtY2OH Bz0  set   @OrigSpText2='CREATE   TRIGGER   '+@objectname+'   ON   '+OBJECT_NAME(@parentid)+'   WITH   ENCRYPTION   INSTEAD   OF   INSERT   AS   PRINT   1   '  
Q_xIO U`iO0  end  ITPUB个人空间#K v'e*\N S)ne
  else  ITPUB个人空间8`4j3L&xak2Hp
  begin  ITPUB个人空间Sc+x9d6qwR:K?
  set   @OrigSpText2='CREATE   TRIGGER   '+@objectname+'   ON   '+OBJECT_NAME(@parentid)+'   WITH   ENCRYPTION   FOR   INSERT   AS   PRINT   1   '  
^X0`K.t*va1K0  end  ITPUB个人空间:Un s-R&`
   
`|;hIq P1M Nu0  end  
\i5G!DN[)cn0   ITPUB个人空间 dR(I|8F|
  if   @type='V'  
\`+]z _0  set   @OrigSpText2='CREATE   VIEW   '+@objectname+'   WITH   ENCRYPTION   AS   SELECT   1   as   f'  
k*}Sm.y/R0   ITPUB个人空间eQU${6G
  set   @q=4000-len(@OrigSpText2)  ITPUB个人空间{ jFR-B4@9H2C
  set   @OrigSpText2=@OrigSpText2+REPLICATE('-',@q)  
sxo }'ZO6v0  end  ITPUB个人空间&bK5guc
  else  ITPUB个人空间%OQ$r3V|C
  begin  
4VU9R'v+b,^$iu0  SET   @OrigSpText2=REPLICATE('-',   4000)  
!T D'j-P5d^0  end  
W4o a!O9E0  SET   @i=1  ITPUB个人空间9U\] OF
   ITPUB个人空间fA-T#h9f
  SET   @resultsp   =   replicate(N'A',   (datalength(@OrigSpText1)   /   2))  
Z+o4^j `q*~&t0   ITPUB个人空间0f&d3lM\
  WHILE   @i<=datalength(@OrigSpText1)/2  
p4ZJT caaN r0  BEGIN  
!s?%?"yJ7Yb+Q0   ITPUB个人空间#c] `e'b)_v
  SET   @resultsp   =   stuff(@resultsp,   @i,   1,   NCHAR(UNICODE(substring(@OrigSpText1,   @i,   1))   ^  
'H0s,p'G)]jp8Y!i0                                                                  (UNICODE(substring(@OrigSpText2,   @i,   1))   ^  ITPUB个人空间 rdv2I9a
                                                                  UNICODE(substring(@OrigSpText3,   @i,   1)))))  
\%Kuzm[0    SET   @i=@i+1  ITPUB个人空间N5O&]*N4S&z]o+F
  END  
jL b r)L%F,P1J0  set   @orgvarbin=cast(@OrigSpText1   as   varbinary(8000))  
ZwbDR%@/~O|J0  set   @resultsp=(case   when   @encrypted=1    
5B t"rys'G HM0                                          then   @resultsp    ITPUB个人空间,Q:gFD5s2H
                                          else   convert(nvarchar(4000),case   when   @status&2=2   then   uncompress(@orgvarbin)   else   @orgvarbin   end)  ITPUB个人空间 j8z Zyf6F)ge'B0N
                                end)  
"Z8A4s{{H e;s+L0  print   @resultsp  
K V U7o m)gA5t0   ITPUB个人空间 \3c.t@+YI4}:h
  set   @n=@n+1  
}tJM"Z.W5Ap0   ITPUB个人空间Q _FHN1^1n}P
  end  ITPUB个人空间d6O\ \6Ye3Y6G
   ITPUB个人空间!Ft j f(G%L
  end  ITPUB个人空间s}kY$`4bt;V
  set   @k=@k+1  ITPUB个人空间/J4j u-JA
  end  
Kuo vu!d&D0   ITPUB个人空间!H+tUM"RR^E#T
  drop   table   #temp  ITPUB个人空间)R"T~r!`.j0cwwHFM
  rollback   tran  
'GHsg kzB(r3z"e4Hp0  end


TAG: Server server SQL sql 微软

 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

Open Toolbar