SQL2005解密已经被加密的存储过程(三)

2014-11-24 14:09:42 · 作者: · 浏览: 3
ine = NULL
204 END
205 ELSE
206 --如果回车没找到
207 BEGIN
208 IF @BasePos <= @TextLength
209 BEGIN
210 --如果@Lines长度的新值大于定义的长度
211 WHILE ( ISNULL(LEN(@Line), 0) + @BlankSpaceAdded + @TextLength - @BasePos + 1 ) > @DefinedLength
212 BEGIN
213 SELECT @AddOnLen = @DefinedLength - ( ISNULL(LEN(@Line),
214 0) + @BlankSpaceAdded )
215 INSERT #CommentText
216 VALUES ( @LineId,
217 ISNULL(@Line, N'') + ISNULL(SUBSTRING(@SyscomText,
218 @BasePos,
219 @AddOnLen), N'') )
220 SELECT @Line = NULL,
221 @LineId = @LineId + 1,
222 @BasePos = @BasePos + @AddOnLen,
223 @BlankSpaceAdded = 0
224 END
225 SELECT @Line = ISNULL(@Line, N'') + ISNULL(SUBSTRING(@SyscomText,
226 @BasePos,
227 @TextLength - @BasePos + 1),
228 N'')
229 IF LEN(@Line) < @DefinedLength AND CHARINDEX(' ',
230 @SyscomText,
231 @TextLength + 1) > 0
232 BEGIN
233 SELECT @Line = @Line + ' ',
234 @BlankSpaceAdded = 1
235 END
236 END
237 END
238 END
239 FETCH NEXT FROM ms_crs_syscom INTO @SyscomText
240 END
241
242
243 IF @Line IS NOT NULL
244 INSERT #CommentText
245 VALUES ( @LineId, @Line )
246 SELECT Text
247 FROM #CommentText
248 ORDER BY LineId
249 CLOSE ms_crs_syscom
250 DEALLOCATE ms_crs_syscom
251 DROP TABLE #CommentText
252 -- -------------------------------------
253 --结束从sp_helptext提取
254 -- -------------------------------------
255 --删除用短横线创建的存储过程并重建原始的存储过程
256 ROLLBACK TRAN
257 DROP TABLE #output
258 GO
第三步:在新建查询的时候选择DAC连接
第四步:执行之前点击一下“以文本格式显示结果”按钮
我这里被加密的存储过程存放在pratice数据库
1 USE PRATICE
2 GO
3 EXEC master.dbo.sp__windbi$decrypt 'dbo.creat_test_Encryption', 0
第五步:执行刚才创建的存储过程,代入被加密的存储过程的名字然后执行查询
可以看到creat_test_Encryption这个存储过程里面的内容还是比较少的
只有一句select top 100 * from dbo.test13

为什麽需要使用DAC连接???
因为如果不用DAC连接是访问不了 系统表的,执行的时候会报错
1 消息 208,级别 16,状态 1,过程 sp__windbi$decrypt,第 26 行
2 对象名 'sys.sysobjvalues' 无效。
网上说就算存储过程里的内容非常长也能解密出来,不会出现空白或者横线的情况