`
songhongchen
  • 浏览: 122717 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

在SQL2000中创建存储过程和视图使用with encryption后的破解

阅读更多
create      PROCEDURE    sp_decrypt(@objectname    varchar(50))   
   AS   
   begin   
   set    nocount    on   
   --CSDN:j9988    copyright:2004.07.15     
   --V3.2     
   --破解字节不受限制,适用于SQLSERVER2000存储过程,函数,视图,触发器   
   --修正上一版"视图触发器"不能正确解密错误   
   --发现有错,请E_MAIL:CSDNj9988@tom.com   
   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   

打开查询分析器,选择好数据库,执行上面的代码后,再执行sp_decrypt '存储过程或视图名'
分享到:
评论

相关推荐

    sqlserver 存储过程With Encryption加密的解密

    ### SQL Server 存储过程 With ...通过以上步骤,我们可以成功地解密SQL Server中使用`WITH ENCRYPTION`加密的存储过程。虽然解密过程中存在一定的风险,但在必要时能够极大地帮助开发者进行代码维护和问题排查。

    SQLServer2005里怎样对使用with_encryption选项创建的存储过程解密

    SQL Server 2005 中使用 WITH ENCRYPTION 选项创建的存储过程仍然使用 XOR 进行加密,与 SQL Server 2000 中的加密方式相同。然而,在 SQL Server 2005 中,系统表 syscomments 里已经查不到加密过的密文了。要查...

    SQLserver 中使用SQL语句创建视图:

    在SQL Server中,视图是一种虚拟表,它是由SQL SELECT语句创建的,可以用来封装复杂的查询逻辑,简化数据访问,并提供一定程度的数据安全性。视图并不实际存储数据,而是当查询视图时,根据其定义的SELECT语句动态...

    解密SQL存储过程,适用于SQLSERVER2000存储过程

    在SQL Server 2000中,可以通过`WITH ENCRYPTION`选项来创建或修改存储过程、函数、视图和触发器,从而实现加密的效果。加密后的对象源代码是不可见的,这有助于保护敏感的业务逻辑。 #### 三、解密原理 本示例提供...

    2024SQLServer解密存储过程、函数、视图、触发器工具

    使用WITH ENCRYPTION选项创建存储过程时,其定义不会被存储在系统表中,增加了安全性。但这也意味着,如果丢失了源代码,就无法直接查看或修改存储过程的内容。 函数分为内联表值函数、标量函数和多语句表值函数等...

    sql server2000 sql存储过程

    SQL Server 2000中的存储过程是一种强大的数据库管理工具,它允许开发人员预先编写一组Transact-SQL语句,然后作为一个单元进行存储和执行。存储过程有助于提高数据库的性能、安全性和模块化编程能力。 **存储过程...

    SQL存储过程解密

    在SQL Server中,可以通过WITH ENCRYPTION选项来加密存储过程,这在保护敏感数据和逻辑免受窥探和篡改方面非常有效。然而,这也带来了一个问题:一旦忘记了创建存储过程时使用的代码或逻辑,解密就变得必要,尤其是...

    SQL Server 2000存储过程在VB中的应用.pdf

    在SQL Server 2000中,存储过程分为系统提供的和用户自定义的两种类型。系统提供的存储过程以sp_开头,用户自定义存储过程主要分为查询和操作类型,包括插入(Insert)、更新(Update)和删除(Delete)操作。 2. ...

    SQL_Server视图和索引

    - **使用企业管理器创建视图**:在企业管理器中,可以通过图形界面来创建视图。选择相应的数据库,右键单击“视图”目录,选择“新建视图”,然后按照向导提示进行操作。 - **使用T-SQL语句创建视图**:通过`CREATE ...

    SQL Server 数据库技术 存储过程和触发器的创建与维护PPT课件.pptx

    1. 使用创建存储过程向导,这在SQL Server企业管理器中提供了一个直观的界面,方便用户选择操作的表和动作,自动生成存储过程。 2. 直接通过企业管理器的"新建"菜单创建存储过程,用户可以在文本框内输入T-SQL语句,...

    SQL 存储过程加密与解密 不传没用的东西

    在SQL Server数据库管理系统中,存储过程是预编译的SQL语句集合,它们可以封装复杂的业务逻辑,提高代码复用性和执行效率。然而,为了保护数据安全和商业机密,有时我们需要对存储过程进行加密。本文将深入探讨SQL ...

    Sqlserver2000存储过程解密方法

    在SQL Server 2000中,存储过程、函数、视图和触发器等数据库对象可以被加密,以保护其源代码不被查看或修改。然而,有时出于调试、审计或恢复的目的,可能需要解密这些加密的对象。本文将详细介绍一种解密SQL ...

    sqlserver2008存储过程与触发器.pdf

    在SQL Server中创建存储过程使用的是Transact-SQL(T-SQL),它是SQL Server支持的SQL扩展集。例如,使用CREATE PROCEDURE语句可以创建一个存储过程。在创建存储过程中可以指定参数(如数据类型、是否可变等)、是否...

    存储过程学习资料

    在存储过程中使用`WITH ENCRYPTION`关键字可以加密存储过程的内容,防止用户查看或复制存储过程的源代码。使用`RECOMPILE`选项可以指示数据库管理系统在每次执行存储过程时重新编译它,这适用于经常变化的数据和参数...

    SQL Server 2000视图问题

    在SQL Server 2000中,视图上的插入操作受到以下条件的约束: 1. **不完整的列覆盖**:如果视图不包含基本表的所有列,尤其是那些NOT NULL的列,尝试在视图上执行INSERT或UPDATE时可能会失败。这是因为SQL Server...

    sqlserver存储过程解密算法

    通过对“SQL Server存储过程解密算法”的深入探讨,我们可以看到,该算法提供了一种有效的方式来解密SQL Server中的存储过程、函数、视图和触发器。这对于数据库开发和维护人员来说,是非常有价值的工具。同时,通过...

    SQL视图与索引总结

    - 如果在视图定义中使用了`GROUP BY`、`UNION`、`DISTINCT`或`TOP`子句,则视图不允许更新。 - 如果在视图定义中有嵌套查询,并且内层查询的`FROM`子句中涉及的表也是导出该视图的基本表,则视图不允许更新。 ...

    MS SQL 存储过程解密

    根据提供的信息,我们可以深入探讨如何在MS SQL Server中解密加密的存储过程、触发器、函数和视图等内容。此过程涉及使用自定义脚本,通过解析加密对象并逐步重建其原始定义,来实现解密的目标。 ### MS SQL 存储...

    存储过程解密(破解函数,过程,触发器,视图.仅限于SQLSERVER2000)

    在SQL Server 2000中,存储过程、函数、触发器和视图是数据库对象,它们用于组织和执行复杂的数据库操作。这些对象有时会被加密,以保护敏感的查询逻辑和商业逻辑不被未授权的用户查看。"存储过程解密"是指尝试获取...

Global site tag (gtag.js) - Google Analytics