CrackMe —— 001
160 CrackMe 是比較適合新手學習逆向破解的CrackMe的一個集合一共160個待逆向破解的程序
CrackMe:它們都是一些公開給別人嘗試破解的小程序,制作 crackme 的人可能是程序員,想測試一下自己的軟件保護技術,也可能是一位 cracker,想挑戰一下其它 cracker 的破解實力,也可能是一些正在學習破解的人,自己編一些小程序給自己破。
編號 | 作者 | 保護方式 |
001 | Acid burn Nag | Name/Serial,Serial |
工具
x32dbg
KeyMake
開始破解之旅
ON.1
使用x32dbg打開001號程序
我們來到了入口點,如果打開后發現程序直接運行,在選項->選項->事件處勾選 入口斷點 即可在程序入口處暫停
ON.2
F9運行,或者點擊菜單欄 調試->運行 程序運行出現
程序分為兩部分Serial/Name 和 Serial
爆破方式破解
Serial/Name
在輸入框內輸入任意數據,點擊Check it Baby! 彈出窗口
在x32dbg里右鍵 搜索->當前模塊->字符串 先會顯示在當前搜索到的字符串
找到 Sorry, The serial is incorect!
找到兩處
地址=0042FA63 反匯編=mov edx,acid burn.42FB80 字符串="Sorry , The serial is incorect !" 地址=0042FB26 反匯編=mov edx,acid burn.42FB80 字符串="Sorry , The serial is incorect !"
插入代碼里竟然沒有匯編的選項!!!
分別點進去查看兩處代碼
地址=0042FA63
0042FA52 | E8 D96EFDFF | call acid burn.406930 | 0042FA57 | 83F8 04 | cmp eax,0x4 | 0042FA5A | 7D 1D | jge acid burn.42FA79 | 0042FA5C | 6A 00 | push 0x0 | 0042FA5E | B9 74FB4200 | mov ecx,acid burn.42FB74 | 42FB74:"Try Again!" 0042FA63 | BA 80FB4200 | mov edx,acid burn.42FB80 | 42FB80:"Sorry , The serial is incorect !" 0042FA68 | A1 480A4300 | mov eax,dword ptr ds:[0x430A48] | 0042FA6D | 8B00 | mov eax,dword ptr ds:[eax] | 0042FA6F | E8 FCA6FFFF | call acid burn.42A170 | 0042FA74 | E9 BE000000 | jmp acid burn.42FB37 | 0042FA79 | 8D55 F0 | lea edx,dword ptr ss:[ebp-0x10] | 0042FA7C | 8B83 DC010000 | mov eax,dword ptr ds:[ebx+0x1DC] |
0042FA5A 處有跳轉,指向彈出錯誤提示框 修改為JMP
地址=0042FB26
0042FAF8 | 8B55 F0 | mov edx,dword ptr ss:[ebp-0x10] | 0042FAFB | 8B45 F4 | mov eax,dword ptr ss:[ebp-0xC] | 0042FAFE | E8 F93EFDFF | call <acid burn.sub_4039FC> | 0042FB03 | 75 1A | jne acid burn.42FB1F | 0042FB05 | 6A 00 | push 0x0 | 0042FB07 | B9 CCFB4200 | mov ecx,acid burn.42FBCC | 42FBCC:"Congratz !!" 0042FB0C | BA D8FB4200 | mov edx,acid burn.42FBD8 | 42FBD8:"Good job dude =)" 0042FB11 | A1 480A4300 | mov eax,dword ptr ds:[0x430A48] | 0042FB16 | 8B00 | mov eax,dword ptr ds:[eax] | 0042FB18 | E8 53A6FFFF | call acid burn.42A170 | 0042FB1D | EB 18 | jmp acid burn.42FB37 | 0042FB1F | 6A 00 | push 0x0 | 0042FB21 | B9 74FB4200 | mov ecx,acid burn.42FB74 | 42FB74:"Try Again!" 0042FB26 | BA 80FB4200 | mov edx,acid burn.42FB80 | 42FB80:"Sorry , The serial is incorect !" 0042FB2B | A1 480A4300 | mov eax,dword ptr ds:[0x430A48] | 0042FB30 | 8B00 | mov eax,dword ptr ds:[eax] | 0042FB32 | E8 39A6FFFF | call acid burn.42A170 | 0042FB37 | 33C0 | xor eax,eax | 0042FB39 | 5A | pop edx | 0042FB3A | 59 | pop ecx | 0042FB3B | 59 | pop ecx |
通過查看發現 0042FB26 處有字符串 “Good job dude =)” 猜測可能是正確執行流程
查看該出匯編代碼發現0042FB03處有跳轉,修改跳轉為NOP
運行程序
破解成功
Serial
搜索字符串“Try Agent” 在每個地址下斷點,點擊Check it Baby!
發現斷點於 0042F4F8 在該地址向上翻最近跳轉處設置斷點單步F8
經過兩個call是發現寄存器處顯示字符,疑似密碼,繼續單步向下
發現寄存器出現之前call處顯示的字符串拼接到了一起和我們輸入框輸入的數據,下一條指令為判斷跳轉,此處call為輸入框判斷對比函數
在輸入框內輸入Hello Dude!
密碼正確,此處可用爆破方式 jne 42F41F 修改 NOP,運行
bingo! 破解成功
內存補丁方式
單步F8,在地址 42F4D0 處看到寄存器存在Key
打開KeyMake 點擊其他->內存注冊機->添加
中斷地址:對應的內存地址
中斷次數:設置1次,是第一次運行到指定地址時中斷並追碼,設置2次,是第二次運行到指定地址時中斷並追碼
第一字節:原始指令
指令長度:兩個字母或數字代表一個指令長度E82745FDFF代表5個指令長度
點擊添加->生成->打開程序運行->點擊按鈕出現注冊碼
同理 0042FAFE 發現注冊碼,制作內存注冊機,運行得到注冊碼