ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 4228|回复: 6

[推荐]SQL2000的加密与解密

[复制链接]

TA的精华主题

TA的得分主题

发表于 2007-8-24 17:35 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

---------破解SQL   Server   用户密码  

if   exists   (select   *   from   dbo.sysobjects   where   id   =   object_id(N'[dbo].[p_GetPassword]')   and   OBJECTPROPERTY(id,   N'IsProcedure')   =   1)  
  drop   procedure   [dbo].[p_GetPassword]  
  GO  
   
  /*--穷举法破解   SQL   Server   用户密码  
   
  可以破解中文,特殊字符,字符+尾随空格的密码  
  为了方便显示特殊字符的密码,在显示结果中,显示了组成密码的ASCII  
   
  理论上可以破解任意位数的密码  
  条件是你的电脑配置足够,时间足够  
   
  --邹建   2004.08--*/  
   
  /*--调用示例  
   
  exec   p_GetPassword  
  --*/  
  create   proc   p_GetPassword  
  @username   sysname=null, --用户名,如果不指定,则列出所有用户  
  @pwdlen   int=2   --要破解的密码的位数,默认是2位及以下的  
  as  
  set   @pwdlen=case   when   isnull(@pwdlen,0)<1   then   1   else   @pwdlen-1   end  
  select   top   255   id=identity(int,0,1)   into   #t   from   syscolumns  
  alter   table   #t   add   constraint   PK_#t   primary   key(id)  
   
  select   name,password  
  ,type=case   when   xstatus&2048=2048   then   1   else   0   end  
  ,jm=case   when   password   is   null   then   1   else   0   end  
  ,pwdstr=cast(''   as   sysname)  
  ,pwd=cast(''   as   varchar(8000))  
  into   #pwd  
  from   master.dbo.sysxlogins   a  
  where   srvid   is   null    
  and   name=isnull(@username,name)  
   
  declare   @s1   varchar(8000),@s2   varchar(8000),@s3   varchar(8000)  
  declare   @l   int  
  select   @l=0  
  ,@s1='char(aa.id)'  
  ,@s2='cast(aa.id   as   varchar)'  
  ,@s3=',#t   aa'  
  exec('  
  update   pwd   set   jm=1,pwdstr='+@s1+'  
  ,pwd='+@s2+'  
  from   #pwd   pwd'+@s3+'  
  where   pwd.jm=0  
  and   pwdcompare('+@s1+',pwd.password,pwd.type)=1  
  ')  
  while   exists(select   1   from   #pwd   where   jm=0   and   @l<@pwdlen)  
  begin  
  select   @l=@l+1  
  ,@s1=@s1+'+char('+char(@l/26+97)+char(@l%26+97)+'.id)'  
  ,@s2=@s2+'+'',''+cast('+char(@l/26+97)+char(@l%26+97)+'.id   as   varchar)'  
  ,@s3=@s3+',#t   '+char(@l/26+97)+char(@l%26+97)  
  exec('  
  update   pwd   set   jm=1,pwdstr='+@s1+'  
  ,pwd='+@s2+'  
  from   #pwd   pwd'+@s3+'  
  where   pwd.jm=0  
  and   pwdcompare('+@s1+',pwd.password,pwd.type)=1  
  ')  
  end  
   
  select   用户名=name,密码=pwdstr,密码ASCII=pwd  
  from   #pwd  
  go

----------------------------------------------------

TA的精华主题

TA的得分主题

 楼主| 发表于 2007-8-24 17:36 | 显示全部楼层

-- 破解SQLSERVER2000存储过程,函数,视图,触发器

CREATE PROCEDURE sp_decrypt(@objectName varchar(50))


AS
begin
set nocount on
--CSDN:j9988 copyright:2004.04.15
--V3.1
--破解字节不受限制,适用于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

TA的精华主题

TA的得分主题

 楼主| 发表于 2007-8-24 17:39 | 显示全部楼层

--已经破解开的excel服务器的

CREATE function fDatePart_acct(@datepart char(2),@ymd datetime)
returns int
-- with encryption --这句加上以后自定义的函数就自动加密了
as
begin
 declare @ymd1 datetime --结账日期时间
 declare @ymd3 datetime
 declare @acctDay smallint
 declare @acctTime smallint
 declare @var int
 --查询结账日和结账时间
 select @acctDay=acctDay,@acctTime=acctTime from ESSys..HomeInfo where id=1
 if @@rowcount=0 select @acctDay=1,@acctTime=0 
 select @ymd1=cast(year(@ymd) as varchar(4))+'-'+cast(month(@ymd) as varchar(20))+'-'+cast(@acctDay as varchar(2))
    +' '+cast(@acctTime as varchar(2))+':00:00'
 if @acctDay>15
  if @ymd<@ymd1
   select @ymd3=@ymd
  else
   select @ymd3=dateadd(month,1,@ymd)
 else
  if @ymd<@ymd1
   select @ymd3=dateadd(month,-1,@ymd)
  else
   select @ymd3=@ymd

 if @datepart='yy'
 begin
  select @var=datepart(yy,@ymd3)
  goto endpoint  
 end
 if @datepart='qq'
 begin
  select @var=datepart(qq,@ymd3)
  goto endpoint  
 end
 if @datepart='mm'
 begin
  select @var=datepart(mm,@ymd3)
  goto endpoint  
 end

EndPoint:
 return @var

end


CREATE  function fStartTime(@datepart char(2),@yy int,@qq smallint,@mm smallint,@acctFlag smallint)
returns datetime
-- with encryption
as
begin
 declare @ymd datetime
 declare @acctDay smallint
 declare @acctTime smallint
 declare @yy1 int   --上年的年份
 declare @mm1 smallint  --上年的月份

 --查询结账日和结账时间
 if @acctFlag=1
 begin
  select @acctDay=acctDay,@acctTime=acctTime from ESSys..HomeInfo where id=1
  if @@rowcount=0 select @acctDay=0,@acctTime=0  
 end 
 --处理年的起始
 if @datepart='yy'
 begin
  select @ymd=convert(varchar(4),@yy)+'-1-1'
  if @acctFlag=1 and @acctDay<>0
  begin
   select @ymd=convert(varchar(4),@yy-1)+'-12-'+convert(varchar(2),@acctDay)+' '
     +convert(varchar(2),@acctTime-1)+':00:00'
   select @ymd=dateadd(hh,1,@ymd)
  end
  goto endpoint  
 end
 --处理季的起始
 if @datepart='qq'
 begin
  --识别季度的起始月份
  select @mm1=case @qq when 1 then 1 when 2 then 4 when 3 then 7 when 4 then 10 end
  select @ymd=convert(varchar(4),@yy)+'-'+convert(varchar(2),@mm1)+'-1'
  if @acctFlag=1 and @acctDay<>0
  begin
   --取上月的年份和月份
   select @ymd=dateadd(mm,-1,@ymd)
   select @yy1=datepart(year,@ymd),@mm1=datepart(month,@ymd)
   --构造按结账日
     select @ymd=convert(varchar(4),@yy1)+'-'
     +convert(varchar(2),@mm1)+'-'+convert(varchar(2),@acctDay)+' '
     +convert(varchar(2),@acctTime-1)+':00:00'
   select @ymd=dateadd(hh,1,@ymd)
  end
  goto endpoint  
 end
 --处理月的起始
 if @datepart='mm'
 begin
  select @ymd=convert(varchar(4),@yy)+'-'+convert(varchar(2),@mm)+'-1'
  if @acctFlag=1 and @acctDay<>0
  begin
   --取上月的年份和月份
   select @ymd=dateadd(mm,-1,@ymd)
   select @yy1=datepart(year,@ymd),@mm1=datepart(month,@ymd)
   --构造按结账日
     select @ymd=convert(varchar(4),@yy1)+'-'
     +convert(varchar(2),@mm1)+'-'+convert(varchar(2),@acctDay)+' '
     +convert(varchar(2),@acctTime-1)+':00:00'
   select @ymd=dateadd(hh,1,@ymd)
  end
  goto endpoint  
 end
EndPoint:
 return @ymd
end

CREATE  function fEndTime(@datepart char(2),@yy int,@qq smallint,@mm smallint,@acctFlag smallint)
returns datetime
-- with encryption
as
begin
 declare @ymd datetime
 declare @yy1 int
 declare @mm1 smallint
 declare @qq1 smallint

 --构造下一个时间区间的开始时间
 if @datepart='yy'
 begin
  select @yy1=@yy+1
  goto step1
 end
 if @datepart='qq'
 begin
  if @qq=4 select @yy1=@yy+1,@qq1=1 else select @yy1=@yy,@qq1=@qq+1
  select @mm1=case @qq1 when 1 then 1 when 2 then 4 when 3 then 7 when 4 then 10 end
  goto step1
 end
 if @datepart='mm'
 begin
  if @mm=12 select @yy1=@yy+1,@mm1=1 else select @yy1=@yy,@mm1=@mm+1
  goto step1
 end
step1:
 select @ymd=dbo.fStartTime(@datepart,@yy1,@qq1,@mm1,@acctFlag)

 --减一微秒,为此时间区间的结束时间
 select @ymd=dateadd(ss,-1,@ymd)
 return @ymd
end

TA的精华主题

TA的得分主题

发表于 2009-7-15 20:55 | 显示全部楼层
果然是曲高和寡阿,目前还看不太懂   学了T-SQL再来看

TA的精华主题

TA的得分主题

发表于 2009-7-27 17:15 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2009-8-9 03:59 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2012-6-13 08:38 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
能说说具体怎么用吗?
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2025-1-9 19:38 , Processed in 0.022302 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表