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