`
xqf222
  • 浏览: 117879 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

SQL解密ctext字段内容函数

 
阅读更多

--SQL解密ctext字段内容函数
--exec sp_decrypt '约束名称'
--exec sp_decrypt 'DF_InsuranceRecord_PeriodUnit'
--exec sp_decrypt '存储过程名称'
--exec sp_decrypt 'sp_SearchPrinting_InsuranceRecord'

--主要用途:读取systemcomments中的字段内容。包括约束,存储过程等等。

--原文应该来自http://blog.csdn.net/j9988/archive/2004/04/16/16747.aspx,作者发布文章只有3篇,可能转了移BLOG.不过确实是高手。省却了我很多的时间。本来打算先找OX字符传格式的破解函数,或者在C#中解密的viabanry(8000)字段内容。

--存在存储 过程超过4000时候会换行的一些评论中反映的问题。出现错误我会及时修正。

CREATE PROCEDURE sp_decrypt(@objectName varchar(50))
AS
begin
set nocount on

begin tran
declare @objectname1 varchar(100),@orgvarbin varbinary(8000)
declare @sql1 nvarchar(4000),@sql2 varchar(8000),@sql3 nvarchar(4000),@sql4 nvarchar(4000)
DECLARE @OrigSpText1 nvarchar(4000), @OrigSpText2 nvarchar(4000) , @OrigSpText3 nvarchar(4000), @resultsp nvarchar(4000)
declare @i int,@status int,@type varchar(10),@parentid int
declare @colid int,@n int,@q int,@j int,@k int,@encrypted int,@number int
select @type=xtype,@parentid=parent_obj from sysobjects where id=object_id(@ObjectName)

create table #temp(number int,colid int,ctext varbinary(8000),encrypted int,status int)
insert #temp SELECT number,colid,ctext,encrypted,status FROM syscomments WHERE id = object_id(@objectName)
select @number=max(number) from #temp
set @k=0

while @k<=@number
begin
if exists(select 1 from syscomments where id=object_id(@objectname) and number=@k)
begin
if @type='P'
set @sql1=(case when @number>1 then 'ALTER PROCEDURE '+ @objectName +';'+rtrim(@k)+' WITH ENCRYPTION AS '
else 'ALTER PROCEDURE '+ @objectName+' WITH ENCRYPTION AS '
end)

if @type='TR'
begin
declare @parent_obj varchar(255),@tr_parent_xtype varchar(10)
select @parent_obj=parent_obj from sysobjects where id=object_id(@objectName)
select @tr_parent_xtype=xtype from sysobjects where id=@parent_obj
if @tr_parent_xtype='V'
begin
set @sql1='ALTER TRIGGER '+@objectname+' ON '+OBJECT_NAME(@parentid)+' WITH ENCRYPTION INSTERD OF INSERT AS PRINT 1 '
end
else
begin
set @sql1='ALTER TRIGGER '+@objectname+' ON '+OBJECT_NAME(@parentid)+' WITH ENCRYPTION FOR INSERT AS PRINT 1 '
end

end
if @type='FN' or @type='TF' or @type='IF'
set @sql1=(case @type when 'TF' then
'ALTER FUNCTION '+ @objectName+'(@a char(1)) returns @b table(a varchar(10)) with encryption as begin insert @b select @a return end '
when 'FN' then
'ALTER FUNCTION '+ @objectName+'(@a char(1)) returns char(1) with encryption as begin return @a end'
when 'IF' then
'ALTER FUNCTION '+ @objectName+'(@a char(1)) returns table with encryption as return select @a as a'
end)

if @type='V'
set @sql1='ALTER VIEW '+@objectname+' WITH ENCRYPTION AS SELECT 1 as f'

set @q=len(@sql1)
set @sql1=@sql1+REPLICATE('-',4000-@q)
select @sql2=REPLICATE('-',8000)
set @sql3='exec(@sql1'
select @colid=max(colid) from #temp where number=@k
set @n=1
while @n<=CEILING(1.0*(@colid-1)/2) and len(@sQL3)<=3996
begin
set @sql3=@sql3+'+@'
set @n=@n+1
end
set @sql3=@sql3+')'
exec sp_executesql @sql3,N'@Sql1 nvarchar(4000),@ varchar(8000)',@sql1=@sql1,@=@sql2

end
set @k=@k+1
end

set @k=0
while @k<=@number
begin

if exists(select 1 from syscomments where id=object_id(@objectname) and number=@k)
begin
select @colid=max(colid) from #temp where number=@k
set @n=1

while @n<=@colid
begin
select @OrigSpText1=ctext,@encrypted=encrypted,@status=status FROM #temp WHERE colid=@n and number=@k

SET @OrigSpText3=(SELECT ctext FROM syscomments WHERE id=object_id(@objectName) and colid=@n and number=@k)
if @n=1
begin
if @type='P'
SET @OrigSpText2=(case when @number>1 then 'CREATE PROCEDURE '+ @objectName +';'+rtrim(@k)+' WITH ENCRYPTION AS '
else 'CREATE PROCEDURE '+ @objectName +' WITH ENCRYPTION AS '
end)


if @type='FN' or @type='TF' or @type='IF'
SET @OrigSpText2=(case @type when 'TF' then
'CREATE FUNCTION '+ @objectName+'(@a char(1)) returns @b table(a varchar(10)) with encryption as begin insert @b select @a return end '
when 'FN' then
'CREATE FUNCTION '+ @objectName+'(@a char(1)) returns char(1) with encryption as begin return @a end'
when 'IF' then
'CREATE FUNCTION '+ @objectName+'(@a char(1)) returns table with encryption as return select @a as a'
end)

if @type='TR'
begin

if @tr_parent_xtype='V'
begin
set @OrigSpText2='CREATE TRIGGER '+@objectname+' ON '+OBJECT_NAME(@parentid)+' WITH ENCRYPTION INSTEAD OF INSERT AS PRINT 1 '
end
else
begin
set @OrigSpText2='CREATE TRIGGER '+@objectname+' ON '+OBJECT_NAME(@parentid)+' WITH ENCRYPTION FOR INSERT AS PRINT 1 '
end

end

if @type='V'
set @OrigSpText2='CREATE VIEW '+@objectname+' WITH ENCRYPTION AS SELECT 1 as f'

set @q=4000-len(@OrigSpText2)
set @OrigSpText2=@OrigSpText2+REPLICATE('-',@q)
end
else
begin
SET @OrigSpText2=REPLICATE('-', 4000)
end
SET @i=1

SET @resultsp = replicate(N'A', (datalength(@OrigSpText1) / 2))

WHILE @i<=datalength(@OrigSpText1)/2
BEGIN

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
set @orgvarbin=cast(@OrigSpText1 as varbinary(8000))
set @resultsp=(case when @encrypted=1
then @resultsp
else convert(nvarchar(4000),case when @status&2=2 then uncompress(@orgvarbin) else @orgvarbin end)
end)
print @resultsp

set @n=@n+1

end

end
set @k=@k+1
end

drop table #temp
rollback tran
end

分享到:
评论

相关推荐

    CText 1.1-开源

    Ctext 正在尝试成为笔记本的替代品,可以另存为 PDF 文件

    CTexT Alignment Interface-开源

    在句子级别对齐平行语料库

    Visual C++ 2005入门经典.part08.rar (整理并添加所有书签)

    7.11.4 initonly字段 7.11.5 静态构造函数 7.12 小结 7.13 练习 第8章 深入理解类 8.1 类的析构函数 8.1.1 析构函数的概念 8.1.2 默认的析构函数 8.1.3 析构函数与动态内存分配 8.2 实现复制构造函数 8.3 在变量之间...

    Visual C++ 2005入门经典.part04.rar (整理并添加所有书签)

    7.11.4 initonly字段 7.11.5 静态构造函数 7.12 小结 7.13 练习 第8章 深入理解类 8.1 类的析构函数 8.1.1 析构函数的概念 8.1.2 默认的析构函数 8.1.3 析构函数与动态内存分配 8.2 实现复制构造函数 8.3 在变量之间...

    Visual C++ 2005入门经典.part07.rar (整理并添加所有书签)

    7.11.4 initonly字段 7.11.5 静态构造函数 7.12 小结 7.13 练习 第8章 深入理解类 8.1 类的析构函数 8.1.1 析构函数的概念 8.1.2 默认的析构函数 8.1.3 析构函数与动态内存分配 8.2 实现复制构造函数 8.3 在变量之间...

    Visual C++ 2005入门经典.part09.rar (整理并添加所有书签)

    7.11.4 initonly字段 7.11.5 静态构造函数 7.12 小结 7.13 练习 第8章 深入理解类 8.1 类的析构函数 8.1.1 析构函数的概念 8.1.2 默认的析构函数 8.1.3 析构函数与动态内存分配 8.2 实现复制构造函数 8.3 在变量之间...

    Visual C++ 2005入门经典.part06.rar (整理并添加所有书签)

    7.11.4 initonly字段 7.11.5 静态构造函数 7.12 小结 7.13 练习 第8章 深入理解类 8.1 类的析构函数 8.1.1 析构函数的概念 8.1.2 默认的析构函数 8.1.3 析构函数与动态内存分配 8.2 实现复制构造函数 8.3 在变量之间...

    Visual C++ 2005入门经典.part05.rar (整理并添加所有书签)

    7.11.4 initonly字段 7.11.5 静态构造函数 7.12 小结 7.13 练习 第8章 深入理解类 8.1 类的析构函数 8.1.1 析构函数的概念 8.1.2 默认的析构函数 8.1.3 析构函数与动态内存分配 8.2 实现复制构造函数 8.3 在变量之间...

    Visual C++ 2010入门经典(第5版)--源代码及课后练习答案

    7.11.5 initonly字段 358 7.11.6 静态构造函数 360 7.12 小结 360 7.13 练习 360 7.14 本章主要内容 361 第8章 深入理解类 363 8.1 类析构函数 363 8.1.1 析构函数的概念 363 8.1.2 默认的析构函数 364 ...

    c#多线程抓取网页内容

    CREATE TABLE (ctablename) ( curl M , ctext M , ldowned I , threadNum I ) &&建立一个表ctablename.dbf,含有地址、文本内容、已经尝试下载次数、线程标志(初值为-1,线程标志是从0开始的整数)四个字段 ...

    RSA算法Java实现

    String ctext = in.readLine(); BigInteger c = new BigInteger(ctext); // 读取私钥 FileInputStream f = new FileInputStream("privatekey.dat"); ObjectInputStream b = new ObjectInputStream(f); ...

    Visual C++ 2005入门经典--源代码及课后练习答案

    7.11.4 initonly字段 364 7.11.5 静态构造函数 366 7.12 小结 367 7.13 练习 367 第8章 深入理解类 369 8.1 类的析构函数 369 8.1.1 析构函数的概念 369 8.1.2 默认的析构函数 370 8.1.3 析构函数...

    CTexT Alignment Interface Pro-开源

    在句子级别对齐并行数据,并自动创建.tmx文件以与Autshumato ITE一起使用

    aspnet公共类cs文件.rar

    CText文本内容的类库(CText.cs) 初始化语言环境(CultureInfoUtil.cs) 压缩文本、字节或者文件的压缩辅助类(GZipUtil.cs) Log4Net日志记录辅助类(LogHelper.cs) 中文字符串转换为拼音或者拼音首字母的辅助类...

    WHC第三方控件

    6. CText文本内容的类库(CText.cs) 7. 初始化语言环境(CultureInfoUtil.cs) 8. 压缩文本、字节或者文件的压缩辅助类(GZipUtil.cs) 9. Log4Net日志记录辅助类(LogHelper.cs) 10. 中文字符串转换为拼音或者拼音首...

    DotNet公用类(超多附文档)

    6.CText文本内容的类库(CText.cs) 7.初始化语言环境(CultureInfoUtil.cs) 8.压缩文本、字节或者文件的压缩辅助类(GZipUtil.cs) 9.Log4Net日志记录辅助类(LogHelper.cs) 10.中文字符串转换为拼音或者拼音首字母的...

    Komodo-IDE-7

    ASED 也是一个老牌的 Tcl/Tk IDE 了,有方便的函数树导航窗口,只消一点就可以马上跳转到源代码中的指定函数上,还有那个像浏览器一样的前进与后退按钮功能是我最喜欢的,而且还能检查语法错误。要说有什么缺点的话...

    .NET中实现客户端联动菜单 (无刷新)

    document.getElementById("&lt;%=TextBox1.ClientID%&gt;").innerText="省:"+pValue+"|"+pText+"市:"+cValue+"|"+cText+"区:"+aValue+"|"+aText; } ; LEFT: 96px; POSITION: absolute; TOP: 32px" cellSpacing=...

    类似qq空间中的留言编辑器

    Ebody.innerHTML=Ebody.innerHTML.replace(_Text,_CText); }else{ if(confirm('没有选择清除对象,是要清除全部格式,仅保留基本文字?')){ Ebody.innerText=Ebody.innerText } } break; case 12: E...

    vim_命令手册

    Ctext escape 将当前行余下的改为text cG escape 修改至文件的末尾 ccursor_cmd text escape 从当前位置处到光标命令位置处都改为text 在vi中查找与替换 命令 查找与替换操作 /text 在文件中向前查找text ?text 在...

Global site tag (gtag.js) - Google Analytics