黑客字典 II(限制版)

看雪資料發表於2015-11-15

目標:黑客字典 II(限制版)
工具:olly
作者:FTBirthday

軟體說明:黑客字典II是在黑客字典V0.9釋出之後,在聽取廣大網友意見的基礎上重寫而成的。
她幾乎可以生成任何形式的密碼組合,可用於產生密碼檔案,以便和一些解密軟體配合使用。
如:網路刺客、John The Ripper、Jack、CrackZip、CrackArj等。本軟體是免費的,您可以
自由傳播。----------小榕軟體實驗室

註冊說明:本軟體是一個共享軟體,如果您需要使用它的全部功能,測需要進行註冊。這種註冊
是免費的。您只要發一封標題為“註冊”的電子郵件到Assassin@ynmail.com即可收到以同樣方
式發回的註冊碼。

用olly載入,點選註冊,輸入
使用者名稱"FTBirthday",註冊碼"510510510"

設斷GetWindowTextA
中斷於
0012ECC8   0042002E  /CALL to GetWindowTextA from UltraDic.00420028
0012ECCC   0045022E  |hWnd = 0045022E (class='Edit',parent=00100232)
0012ECD0   0012ED04  |Buffer = 0012ED04
0012ECD4   00000064  Count = 64 (100.)
最終返回到
00420028  |. FF15 C0B34200  CALL DWORD PTR DS:[<&USER32.GetWindowTex>; GetWindowTextA
0042002E  |. EB 12          JMP SHORT UltraDic.00420042

*****************************************************************
關鍵程式碼段
*****************************************************************
00401BF5   . E8 1CE40100    CALL UltraDic.00420016
00401BFA   . 8D7C24 20      LEA EDI,DWORD PTR SS:[ESP+20]            ;  DWORD PTR SS:[ESP+20]="FTBirthday"
00401BFE   . 83C9 FF        OR ECX,FFFFFFFF
00401C01   . 33C0           XOR EAX,EAX                              ;  EAX為使用者名稱的長度
00401C03   . F2:AE          REPNE SCAS BYTE PTR ES:[EDI]
00401C05   . F7D1           NOT ECX                                  ;  ECX=使用者名稱的長度+1取反
00401C07   . 49             DEC ECX                                  ;  ECX=ECX-1=0000000A,判斷使用者名稱是否為空
00401C08   . 0F84 16020000  JE UltraDic.00401E24
00401C0E   . 8DBC24 8400000>LEA EDI,DWORD PTR SS:[ESP+84]            ;  DWORD PTR SS:[ESP+84]="510510510"
00401C15   . 83C9 FF        OR ECX,FFFFFFFF
00401C18   . F2:AE          REPNE SCAS BYTE PTR ES:[EDI]
00401C1A   . F7D1           NOT ECX                                  ;  ECX=註冊碼的長度+1取反
00401C1C   . 49             DEC ECX                                  ;  ECX=00000009,判斷註冊碼是否為空
00401C1D   . 0F84 01020000  JE UltraDic.00401E24

下面開始對使用者名稱進行運算得出一個相應的字串

00401C23   . 8D7C24 20      LEA EDI,DWORD PTR SS:[ESP+20]            ;  DWORD PTR SS:[ESP+20]="FTBirthday"
00401C27   . 83C9 FF        OR ECX,FFFFFFFF
00401C2A   . 33F6           XOR ESI,ESI                              ;  ESI清零
00401C2C   . F2:AE          REPNE SCAS BYTE PTR ES:[EDI]
00401C2E   . F7D1           NOT ECX                                  ;  ECX=使用者名稱的長度+1取反
00401C30   . 49             DEC ECX                                  ;  ECX=ECX-1=0000000A,判斷使用者名稱是否為空
00401C31   . 74 79          JE SHORT UltraDic.00401CAC
00401C33   > 0FBE7C34 20    MOVSX EDI,BYTE PTR SS:[ESP+ESI+20]       ;  取使用者名稱第i個字元,符號擴充套件給EDI
00401C38   . 8BC7           MOV EAX,EDI                              ;  EAX=EDI=使用者名稱第i個字元
00401C3A   . B9 0A000000    MOV ECX,0A
00401C3F   . 99             CDQ                                      ;  把EDX清零
00401C40   . F7F9           IDIV ECX                                 ;  EAX/ECX,EAX放商,EDX放餘數
00401C42   . 8BCA           MOV ECX,EDX
00401C44   . 81E2 01000080  AND EDX,80000001
00401C4A   . 79 05          JNS SHORT UltraDic.00401C51              ;  非負數則跳
00401C4C   . 4A             DEC EDX
00401C4D   . 83CA FE        OR EDX,FFFFFFFE
00401C50   . 42             INC EDX
00401C51   > 75 16          JNZ SHORT UltraDic.00401C69              ;  不為零則跳
00401C53   . 8BC7           MOV EAX,EDI                              ;  EAX=EDI=使用者名稱第i個字元
00401C55   . B9 1A000000    MOV ECX,1A
00401C5A   . 99             CDQ
00401C5B   . F7F9           IDIV ECX                                 ;  EAX/ECX,EAX放商,EDX放餘數
00401C5D   . 80C2 41        ADD DL,41                                ;  餘數低八位DL+41
00401C60   . 889434 4801000>MOV BYTE PTR SS:[ESP+ESI+148],DL         ;  DL=53="S"
00401C67   . EB 2E          JMP SHORT UltraDic.00401C97
00401C69   > 8BC1           MOV EAX,ECX                              ;  餘數不為零時把餘數給EAX
00401C6B   . BB 03000000    MOV EBX,3
00401C70   . 99             CDQ                                      ;  把EDX清零
00401C71   . F7FB           IDIV EBX                                 ;  EAX/EBX,EAX放商,EDX放餘數
00401C73   . 85D2           TEST EDX,EDX                             ;  看看第二次,餘數是否為零
00401C75     75 16          JNZ SHORT UltraDic.00401C8D              ;  不為零則跳
00401C77   . 8BC7           MOV EAX,EDI                              ;  EAX=EDI=使用者名稱第i個字元
00401C79   . B9 1A000000    MOV ECX,1A
00401C7E   . 99             CDQ
00401C7F   . F7F9           IDIV ECX                                 ;  EAX/ECX,EAX放商,EDX放餘數
00401C81   . 80C2 61        ADD DL,61                                ;  餘數低八位DL+61
00401C84   . 889434 4801000>MOV BYTE PTR SS:[ESP+ESI+148],DL
00401C8B   . EB 0A          JMP SHORT UltraDic.00401C97
00401C8D   > 80C1 31        ADD CL,31                                ;  餘數低八位CL+31
00401C90   . 888C34 4801000>MOV BYTE PTR SS:[ESP+ESI+148],CL
00401C97   > 8D7C24 20      LEA EDI,DWORD PTR SS:[ESP+20]            ;  DWORD PTR SS:[ESP+20]="FTBirthday"
00401C9B   . 83C9 FF        OR ECX,FFFFFFFF
00401C9E   . 33C0           XOR EAX,EAX
00401CA0   . 46             INC ESI                                  ;  取字元計數器
00401CA1   . F2:AE          REPNE SCAS BYTE PTR ES:[EDI]
00401CA3   . F7D1           NOT ECX                                  ;  ECX=使用者名稱的長度+1取反
00401CA5   . 49             DEC ECX                                  ;  ECX=ECX-1=0000000A,使用者名稱長度
00401CA6   . 3BF1           CMP ESI,ECX                              ;  比較是否已取完使用者名稱所有字元
00401CA8   .^72 89          JB SHORT UltraDic.00401C33               ;  小於則跳回迴圈

下面算出的字串將和輸入的註冊碼進行比較

00401CAA   . 33DB           XOR EBX,EBX
00401CAC   > 55             PUSH EBP
00401CAD   . 8D8C24 EC00000>LEA ECX,DWORD PTR SS:[ESP+EC]
00401CB4   . 889C34 4C01000>MOV BYTE PTR SS:[ESP+ESI+14C],BL
00401CBB   . E8 F0010000    CALL UltraDic.00401EB0
00401CC0   . 899C24 B401000>MOV DWORD PTR SS:[ESP+1B4],EBX
00401CC7   . 8DB424 8400000>LEA ESI,DWORD PTR SS:[ESP+84]            ;  ESI=註冊碼
00401CCE   . 8D8424 4801000>LEA EAX,DWORD PTR SS:[ESP+148]           ;  EAX=使用者名稱變換後的字元
00401CD5   > 8A10           MOV DL,BYTE PTR DS:[EAX]                 ;  使用者名稱變換後的第i個字元給DL
00401CD7   . 8ACA           MOV CL,DL
00401CD9   . 3A16           CMP DL,BYTE PTR DS:[ESI]                 ;  和註冊碼的第i個字元比較
00401CDB   . 75 1C          JNZ SHORT UltraDic.00401CF9
00401CDD   . 3ACB           CMP CL,BL                                ;  比較是否為空
00401CDF   . 74 14          JE SHORT UltraDic.00401CF5
00401CE1   . 8A50 01        MOV DL,BYTE PTR DS:[EAX+1]               ;  使用者名稱變換後的第i+1個字元給DL
00401CE4   . 8ACA           MOV CL,DL
00401CE6   . 3A56 01        CMP DL,BYTE PTR DS:[ESI+1]               ;  和註冊碼的第i+1個字元比較
00401CE9   . 75 0E          JNZ SHORT UltraDic.00401CF9
00401CEB   . 83C0 02        ADD EAX,2
00401CEE   . 83C6 02        ADD ESI,2
00401CF1   . 3ACB           CMP CL,BL                                ;  比較是否為空BL
00401CF3   .^75 E0          JNZ SHORT UltraDic.00401CD5              ;  不為零則跳回繼續比較

至此,比較完成,下面是將註冊資訊寫到"C: egbanyet.dat"檔案中

00401CF5   > 33C0           XOR EAX,EAX
00401CF7   . EB 05          JMP SHORT UltraDic.00401CFE
00401CF9   > 1BC0           SBB EAX,EAX
00401CFB   . 83D8 FF        SBB EAX,-1
00401CFE   > 3BC3           CMP EAX,EBX
00401D00   . 0F85 DF000000  JNZ UltraDic.00401DE5
00401D06   . 68 01100000    PUSH 1001
00401D0B   . 68 F4704300    PUSH UltraDic.004370F4                   ;  ASCII "C: egbanyet.dat"
00401D10   . 8D4C24 18      LEA ECX,DWORD PTR SS:[ESP+18]
00401D14   . E8 8FEF0100    CALL UltraDic.00420CA8
00401D19   . 8D7C24 20      LEA EDI,DWORD PTR SS:[ESP+20]
00401D1D   . 83C9 FF        OR ECX,FFFFFFFF
00401D20   . 33C0           XOR EAX,EAX
00401D22   . B2 0D          MOV DL,0D
00401D24   . F2:AE          REPNE SCAS BYTE PTR ES:[EDI]
00401D26   . F7D1           NOT ECX
00401D28   . 49             DEC ECX
00401D29   . 8DBC24 8400000>LEA EDI,DWORD PTR SS:[ESP+84]
00401D30   . C68424 B401000>MOV BYTE PTR SS:[ESP+1B4],1
00401D38   . 88540C 20      MOV BYTE PTR SS:[ESP+ECX+20],DL
00401D3C   . 41             INC ECX
00401D3D   . C6440C 20 0A   MOV BYTE PTR SS:[ESP+ECX+20],0A
00401D42   . 885C0C 21      MOV BYTE PTR SS:[ESP+ECX+21],BL
00401D46   . 83C9 FF        OR ECX,FFFFFFFF
00401D49   . F2:AE          REPNE SCAS BYTE PTR ES:[EDI]
00401D4B   . F7D1           NOT ECX
00401D4D   . 49             DEC ECX
00401D4E   . 8D7C24 20      LEA EDI,DWORD PTR SS:[ESP+20]
00401D52   . 88940C 8400000>MOV BYTE PTR SS:[ESP+ECX+84],DL
00401D59   . 41             INC ECX
00401D5A   . C6840C 8400000>MOV BYTE PTR SS:[ESP+ECX+84],0A
00401D62   . 889C0C 8500000>MOV BYTE PTR SS:[ESP+ECX+85],BL
00401D69   . 83C9 FF        OR ECX,FFFFFFFF
00401D6C   . F2:AE          REPNE SCAS BYTE PTR ES:[EDI]
00401D6E   . F7D1           NOT ECX
00401D70   . 49             DEC ECX
00401D71   . 8D4424 20      LEA EAX,DWORD PTR SS:[ESP+20]            ; 使用者名稱給EAX
00401D75   . 51             PUSH ECX                                 ; /Arg2
00401D76   . 50             PUSH EAX                                 ; |Arg1
00401D77   . 8D4C24 18      LEA ECX,DWORD PTR SS:[ESP+18]            ; |
00401D7B   . E8 DCF10100    CALL UltraDic.00420F5C                   ; UltraDic.00420F5C
00401D80   . 8DBC24 8400000>LEA EDI,DWORD PTR SS:[ESP+84]
00401D87   . 83C9 FF        OR ECX,FFFFFFFF
00401D8A   . 33C0           XOR EAX,EAX
00401D8C   . F2:AE          REPNE SCAS BYTE PTR ES:[EDI]
00401D8E   . F7D1           NOT ECX
00401D90   . 49             DEC ECX
00401D91   . 51             PUSH ECX                                 ; /Arg2
00401D92   . 8D8C24 8800000>LEA ECX,DWORD PTR SS:[ESP+88]            ; |
00401D99   . 51             PUSH ECX                                 ; |Arg1
00401D9A   . 8D4C24 18      LEA ECX,DWORD PTR SS:[ESP+18]            ; |
00401D9E   . E8 B9F10100    CALL UltraDic.00420F5C                   ; UltraDic.00420F5C
00401DA3   . 6A 03          PUSH 3                                   ; /FileAttributes = READONLY|HIDDEN
00401DA5   . 68 F4704300    PUSH UltraDic.004370F4                   ; |FileName = "C: egbanyet.dat"
00401DAA   . FF15 8CB24200  CALL DWORD PTR DS:[<&KERNEL32.SetFileAtt>; SetFileAttributesA
00401DB0   . 68 D8704300    PUSH UltraDic.004370D8
00401DB5   . 8D8C24 EC00000>LEA ECX,DWORD PTR SS:[ESP+EC]
00401DBC   . E8 AF010000    CALL UltraDic.00401F70                 *******[到這兒彈出註冊成功資訊]********
00401DC1   . 8D4C24 10      LEA ECX,DWORD PTR SS:[ESP+10]
00401DC5   . 889C24 B401000>MOV BYTE PTR SS:[ESP+1B4],BL
00401DCC   . E8 77EF0100    CALL UltraDic.00420D48
00401DD1   . 8BCD           MOV ECX,EBP
00401DD3   . E8 44B50100    CALL UltraDic.0041D31C
00401DD8   . C78424 B401000>MOV DWORD PTR SS:[ESP+1B4],3
00401DE3   . EB 1C          JMP SHORT UltraDic.00401E01
00401DE5   > 68 C0704300    PUSH UltraDic.004370C0
00401DEA   . 8D8C24 EC00000>LEA ECX,DWORD PTR SS:[ESP+EC]
00401DF1   . E8 7A010000    CALL UltraDic.00401F70
00401DF6   . C78424 B401000>MOV DWORD PTR SS:[ESP+1B4],2
00401E01   > 8D8C24 4401000>LEA ECX,DWORD PTR SS:[ESP+144]
00401E08   . E8 CCEB0100    CALL UltraDic.004209D9
00401E0D   . 8D8C24 E800000>LEA ECX,DWORD PTR SS:[ESP+E8]
00401E14   . C78424 B401000>MOV DWORD PTR SS:[ESP+1B4],-1
00401E1F   . E8 43AE0100    CALL UltraDic.0041CC67
00401E24   > 8B8C24 AC01000>MOV ECX,DWORD PTR SS:[ESP+1AC]           ;  註冊名為空則直接來到這兒
00401E2B   . 5F             POP EDI
00401E2C   . 5E             POP ESI
00401E2D   . 5D             POP EBP
00401E2E   . 5B             POP EBX
00401E2F   . 64:890D 000000>MOV DWORD PTR FS:[0],ECX
00401E36   . 81C4 A8010000  ADD ESP,1A8
00401E3C   . C3             RETN

最後把使用者名稱和註冊碼,放入到"C: egbanyet.dat"檔案中,屬性是隻讀,隱藏。

總結:
序號產生器制:
由使用者名稱算出一個註冊碼並與輸入的註冊碼比較,並且這個真碼出現在記憶體中,
使用者名稱長度=註冊碼長度

註冊演算法模擬:
設使用者名稱字元對應ASCII為a[i],相應字串為b[i]
t1=a[i]%A;
if (t1!=0)
   {t2=t1%3;
    if (t2!=0) b[i]=t1+31;
    else       b[i]=a[i]%1A+31;}
else b[i]=a[i]%1A+41;

於是有
使用者名稱:FTBirthday
註冊碼:SGO6KMAW82

相關文章