在SQL SERVER 2005中必须用专用管理连接才可以查看过程过程中用到的表
EG:sqlcmd -A
1>use test
2>go
1>sp_decrypt 'p_testa'
2>go
Text
----------------------
Create procedure P_testa
with encryption
as
select * from test
createPROCEDURE[dbo].[sp_decrypt]
(@proceduresysname=NULL)
AS
SETNOCOUNTON
BEGIN
DECLARE@intProcSpacebigint,@tbigint,@maxColIDsmallint,@intEncrypted
tinyint,@procNameLengthint
select@maxColID=max(subobjid),@intEncrypted=imagevalFROM
sys.sysobjvaluesWHEREobjid=object_id(@procedure)
GROUPBYimageval
select@procNameLength=datalength(@procedure)+29
DECLARE@real_01nvarchar(max)
DECLARE@fake_01nvarchar(max)
DECLARE@fake_encrypt_01nvarchar(max)
DECLARE@real_decrypt_01nvarchar(max),@real_decrypt_01anvarchar(max)
declare@objtypevarchar(2),@ParentNamenvarchar(max)
select@real_decrypt_01a=''
--提取对象的类型如是存储过程还是函数,如果是触发器,还要得到其父对象的名称
select@objtype=type,@parentname=object_name(parent_object_id)
fromsys.objectswhere[object_id]=object_id(@procedure)
--从sys.sysobjvalues里提出加密的imageval记录
SET@real_01=(SELECTtop1imagevalFROMsys.sysobjvaluesWHEREobjid=
object_id(@procedure)andvalclass=1orderbysubobjid)
--创建一个临时表
createtable#output([ident][int]IDENTITY(1,1)NOTNULL,
[real_decrypt]NVARCHAR(MAX))
--开始一个事务,稍后回滚
BEGINTRAN
--更改原始的存储过程,用短横线替换
if@objtype='P'
SET@fake_01='ALTERPROCEDURE'+@procedure+'WITHENCRYPTIONAS
'+REPLICATE('-',40003-@procNameLength)
elseif@objtype='FN'
SET@fake_01='ALTERFUNCTION'+@procedure+'()RETURNSINTWITHENCRYPTIONASBEGINRETURN1
/*'+REPLICATE('*',datalength(@real_01)/2-@procNameLength)+'*/END'
elseif@objtype='V'
SET@fake_01='ALTERview'+@procedure+'WITHENCRYPTIONASselect1ascol
/*'+REPLICATE('*',datalength(@real_01)/2-@procNameLength)+'*/'
elseif@objtype='TR'
SET@fake_01='ALTERtrigger'+@procedure+'ON'+@parentname+'WITHENCRYPTIONAFTERINSERTASRAISERROR(''N'',16,10)
/*'+REPLICATE('*',datalength(@real_01)/2-@procNameLength)+'*/'
EXECUTE(@fake_01)
--从sys.sysobjvalues里提出加密的假的
SET@fake_encrypt_01=(SELECTtop1imagevalFROMsys.sysobjvaluesWHEREobjid=
object_id(@procedure)andvalclass=1orderbysubobjid)
if@objtype='P'
SET@fake_01='CreatePROCEDURE'+@procedure+'WITHENCRYPTIONAS
'+REPLICATE('-',40003-@procNameLength)
elseif@objtype='FN'
SET@fake_01='CREATEFUNCTION'+@procedure+'()RETURNSINTWITHENCRYPTIONASBEGINRETURN1
/*'+REPLICATE('*',datalength(@real_01)/2-@procNameLength)+'*/END'
elseif@objtype='V'
SET@fake_01='Createview'+@procedure+'WITHENCRYPTIONASselect1ascol
/*'+REPLICATE('*',datalength(@real_01)/2-@procNameLength)+'*/'
elseif@objtype='TR'
SET@fake_01='Createtrigger'+@procedure+'ON'+@parentname+'WITHENCRYPTIONAFTERINSERTASRAISERROR(''N'',16,10)
/*'+REPLICATE('*',datalength(@real_01)/2-@procNameLength)+'*/'
--开始计数
SET@intProcSpace=1
--使用字符填充临时变量
SET@real_decrypt_01=replicate(N'A',(datalength(@real_01)/2))
--循环设置每一个变量,创建真正的变量
--每次一个字节
SET@intProcSpace=1
--如有必要,遍历每个@real_xx变量并解密
WHILE@intProcSpace<=(datalength(@real_01)/2)
BEGIN
--真的和假的和加密的假的进行异或处理
SET@real_decrypt_01=stuff(@real_decrypt_01,@intProcSpace,1,
NCHAR(UNICODE(substring(@real_01,@intProcSpace,1))^
(UNICODE(substring(@fake_01,@intProcSpace,1))^
UNICODE(substring(@fake_encrypt_01,@intProcSpace,1)))))
SET@intProcSpace=@intProcSpace+1
END
--通过sp_helptext逻辑向表#output里插入变量
insert#output(real_decrypt)select@real_decrypt_01
--selectreal_decryptAS'#outputchek'from#output--测试
---------------------------------------
--开始从sp_helptext提取
---------------------------------------
declare@dbnamesysname
,@BlankSpaceAddedint
,@BasePosint
,@CurrentPosint
,@TextLengthint
,@LineIdint
,@AddOnLenint
,@LFCRint--回车换行的长度
,@DefinedLengthint
,@SyscomTextnvarchar(4000)
,@Linenvarchar(255)
Select@DefinedLength=255
SELECT@BlankSpaceAdded=0--跟踪行结束的空格。注意Len函数忽略了多余的空格
CREATETABLE#CommentText
(LineIdint
,Textnvarchar(255)collatedatabase_default)
--使用#output代替sys.sysobjvalues
DECLAREms_crs_syscomCURSORLOCAL
FORSELECTreal_decryptfrom#output
ORDERBYident
FORREADONLY
--获取文本
SELECT@LFCR=2
SELECT@LineId=1
OPENms_crs_syscom
FETCHNEXTFROMms_crs_syscominto@SyscomText
WHILE@@fetch_status>=0
BEGIN
SELECT@BasePos=1
SELECT@CurrentPos=1
SELECT@TextLength=LEN(@SyscomText)
WHILE@CurrentPos!=0
BEGIN
--通过回车查找行的结束
SELECT@CurrentPos=CHARINDEX(char(13)+char(10),@SyscomText,
@BasePos)
--如果找到回车
IF@CurrentPos!=0
BEGIN
--如果@Lines的长度的新值比设置的大就插入@Lines目前的内容并继续
While(isnull(LEN(@Line),0)+@BlankSpaceAdded+
@CurrentPos-@BasePos+@LFCR)>@DefinedLength
BEGIN
SELECT@AddOnLen=@DefinedLength-(isnull(LEN(@Line),0)+
@BlankSpaceAdded)
INSERT#CommentTextVALUES
(@LineId,
isnull(@Line,N'')+isnull(SUBSTRING(@SyscomText,
@BasePos,@AddOnLen),N''))
SELECT@Line=NULL,@LineId=@LineId+1,
@BasePos=@BasePos+@AddOnLen,@BlankSpaceAdded=0
END
SELECT@Line=isnull(@Line,N'')+
isnull(SUBSTRING(@SyscomText,@BasePos,@CurrentPos-@BasePos+@LFCR),N'')
SELECT@BasePos=@CurrentPos+2
INSERT#CommentTextVALUES(@LineId,@Line)
SELECT
分享到:
相关推荐
解密SQL SERVER 2005加密存储过程,视图、函数.sql
NULL 博文链接:https://nannan408.iteye.com/blog/1995714
破解加密过的存储过程 前提是要知道 加密的存储过程是用哪个版本的SQL 本人以SQL2005的版本为例
笔者找到的功能最强大、操作最简单、使用最可靠的数据库解密工具,用于解密的SQL Server2000、2005等版本的存储过程、函数、触发器和视图。 执行连接到数据库后,左边直接列出数据库清单以及每个数据库内的存储过程...
破解字节不受限制,适用于SQLSERVER2000存储过程,函数,视图,触发器
该函数可以实现在sql server上md5加密,测试通过,已程序加密出来的一致
2024SQLServer解密存储过程、函数、视图、触发器,mssql解密,WITH ENCRYPTION解密,亲测可用,支持2000、2005、2008、2012、2019...
代码如下:–SQLSERVER中的加密函数 2013-7-11ENCRYPTBYASYMKEY() –非对称密钥ENCRYPTBYCERT() –证书加密ENCRYPTBYKEY() –对称密钥ENCRYPTBYPASSPHRASE() –通行短语(PassPhrase)加密 ——————————...
此存储过程可以破解sql 2000、2005、2008加密的函数、存储过程、视图、触发器,本人平时工作中经常使用,非常方便!
笔者找到的功能最强大、操作最简单、使用最可靠的数据库解密工具,用于解密的SQL Server2000、2005等版本的存储过程、函数、触发器和视图。 执行连接到数据库后,左边直接列出数据库清单以及每个数据库内的存储过程...
SQL SERVER存储过程解密工具,sqldecryptor可以将被加密的存储过程和函数等直接解密
ASP.NET 2.0+SQL Server 2005全程指南 目录 基础篇 第1章 ASP.NET概述及环境配置 1.1 认识ASRNET 1.1.1 .NET Framework框架 1.1.2 ASP.NET功能与特性 1.1.3 ASP.NET与ASP的区别 1.2 搭建ASP.NET开发环境 1.2.1...
SQL加密函数、过程的解密方式,是一个存储过程
笔者找到的功能最强大、操作最简单、使用最可靠的数据库解密工具,用于解密的SQL Server2000、2005等版本的存储过程、函数、触发器和视图。 执行连接到数据库后,左边直接列出数据库清单以及每个数据库内的存储过程...
因工作时常在SQLSERVER进行http接口操作,涉及编码的转换问题和中文MD5的加密问题,在数据库中根本无法实现,经研究可以借助CLR功能实现一下函数。 附件中提供了源码、开启CLR脚本及直接注册一下函数的脚本,无c#...
SQL Server 2005引入内建数据加密的能力,使用证书、密钥和系统函数的组合来完成。 与数字证书类似。SQL Server 证书包括公钥和私钥这一对密钥,它们都用来加密和解密数据。SQL Server也拥有创建非对称密钥和对称...
MD5加密算法在sqlserver中的实现
4.加密函数 支持加密、解密、数字签名和数字签名验证。 5.游标函数 返回有关游标状态的信息。 6.日期和时间函数 可以更改日期和时间的值。 7.数学函数 执行三角、几何和其他数字运算。 元数据函数 返回数据库和...
用delphi编写,能查看SQL SERVER中加密的存储过程或函数。