您好,登錄后才能下訂單哦!
提示輸入帳號密碼
圖片2
回車后 提示 需要重新輸入
載入OD
圖片3
字符串搜索
找main函數
圖片4
此時停在 00401060這里,是個
00401060 /$ 83EC 30 sub esp,0x30 //分配棧幀
00401063 |. 68 FC804000 push Crackme.004080FC ; input your name:
00401068 |. E8 6C020000 call Crackme.004012D9// printf
0040106D |. 8D4424 1C lea eax,dword ptr ss:[esp+0x1C]
00401071 |. 50 push eax
00401072 |. 68 F8804000 push Crackme.004080F8 ; %s
00401077 |. E8 46020000 call Crackme.004012C2
0040107C |. 68 E4804000 push Crackme.004080E4 ; input your pass:
00401081 |. E8 53020000 call Crackme.004012D9// scanf
00401086 |. 8D4C24 10 lea ecx,dword ptr ss:[esp+0x10]
0040108A |. 51 push ecx
0040108B |. 68 F8804000 push Crackme.004080F8 ; %s
00401090 |. E8 2D020000 call Crackme.004012C2 ; scanf()
00401095 |. 8D5424 18 lea edx,dword ptr ss:[esp+0x18] ; edx存放帳號地址
00401099 |. 8D4424 30 lea eax,dword ptr ss:[esp+0x30] ; eax存放密碼地址
0040109D |. 52 push edx
0040109E |. 50 push eax
0040109F |. E8 5CFFFFFF call Crackme.00401000//call 參數為兩個地址 edx eax
004010A4 |. 83C4 20 add esp,0x20// 平衡堆棧
004010A7 |. 84C0 test al,al//若al為0 則 zf = 1 則je成立
004010A9 |. 74 19 je XCrackme.004010C4 //這里會跳到一個提示try again
圖片5
這里是提示正確or錯誤的地方
004010A9 |. /74 19 je XCrackme.004010C4
004010AB |. |68 D8804000 push Crackme.004080D8 ; good job!\n
004010B0 |. |E8 24020000 call Crackme.004012D9
004010B5 |. |68 C0804000 push Crackme.004080C0 ; the key is: md5(pass)
004010BA |. |E8 1A020000 call Crackme.004012D9
004010BF |. |83C4 08 add esp,0x8
004010C2 |. |EB 0D jmp XCrackme.004010D1
004010C4 |> \68 B4804000 push Crackme.004080B4 ; try again!
004010C9 |. E8 0B020000 call Crackme.004012D9
0040109F |. E8 5CFFFFFF call Crackme.00401000 //驗證函數
00401000 /$ 55 push ebp
00401001 |. 56 push esi
00401002 |. 8B7424 0C mov esi,dword ptr ss:[esp+0xC] ; 參數一
00401006 |. 57 push edi
00401007 |. 8BFE mov edi,esi
00401009 |. 83C9 FF or ecx,0xFFFFFFFF
0040100C |. 33C0 xor eax,eax
0040100E |. 8B5424 14 mov edx,dword ptr ss:[esp+0x14] ; 參數二
00401012 |. F2:AE repne scas byte ptr es:[edi] ; 長度
00401014 |. F7D1 not ecx
00401016 |. 49 dec ecx
00401017 |. 8BFA mov edi,edx ; edi存放密碼地址
00401019 |. 8BE9 mov ebp,ecx ; ebp存放帳號長度
0040101B |. 83C9 FF or ecx,0xFFFFFFFF
0040101E |. F2:AE repne scas byte ptr es:[edi]
00401020 |. F7D1 not ecx
00401022 |. 49 dec ecx ; 密碼長度
00401023 |. 3BE9 cmp ebp,ecx ; 長度比較
00401025 |. 74 06 je XCrackme.0040102D ; 長度相等繼續 不等退出
00401027 |. 5F pop edi
00401028 |. 5E pop esi
00401029 |. 32C0 xor al,al
0040102B |. 5D pop ebp
0040102C |. C3 retn
0040102D |> 33C0 xor eax,eax
0040102F |. 85ED test ebp,ebp
00401031 |. 7E 19 jle XCrackme.0040104C
00401033 |. 53 push ebx
00401034 |. BF 30804000 mov edi,Crackme.00408030 ; 全局變量 使用edi存放數組首地址
00401039 |> 8A0F /mov cl,byte ptr ds:[edi] ; cl= [edi+eax]
0040103B |. 8A1C10 |mov bl,byte ptr ds:[eax+edx] ; bl=密碼地址+eax
0040103E |. 32D9 |xor bl,cl ; 密碼=密碼xor 數組[eax]
00401040 |. 83C7 04 |add edi,0x4 ; 下一個元素
00401043 |. 881C10 |mov byte ptr ds:[eax+edx],bl
00401046 |. 40 |inc eax ; eax++
00401047 |. 3BC5 |cmp eax,ebp ; eax < strlen(密碼)
00401049 |.^ 7C EE \jl XCrackme.00401039 ; eax < ebp
0040104B |. 5B pop ebx
0040104C |> 8BFA mov edi,edx
0040104E |. 8BCD mov ecx,ebp
00401050 |. 33D2 xor edx,edx
00401052 |. F3:A6 repe cmps byte ptr es:[edi],byte ptr ds:[esi]
00401054 |. 8BC2 mov eax,edx
00401056 |. 5F pop edi
00401057 |. 5E pop esi
00401058 |. 5D pop ebp
00401059 |. 0F94C0 sete al//相等 al = 1
0040105C \. C3 retn
加密用的table 值
圖片6
首先判斷帳號密碼長度是否相等
圖片7
若長度相等,則首先將 密碼中的各個元素與 00408030處的數 xor 操作,得到當前密碼,
然后將密碼與帳號進行比較
圖片8
esi存放的是帳號 edi為密碼
sete zf = 1 則al = 1
圖片9
這樣就過了。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。