逆向破解之160個CrackMe —— 001
CrackMe —— 001
160 CrackMe 是比較適合新手學習逆向破解的CrackMe的一個集合一共160個待逆向破解的程式
CrackMe:它們都是一些公開給別人嘗試破解的小程式,製作 crackme 的人可能是程式設計師,想測試一下自己的軟體保護技術,也可能是一位 cracker,想挑戰一下其它 cracker 的破解實力,也可能是一些正在學習破解的人,自己編一些小程式給自己破。
CrackMe簡稱CM。來源
編號 | 作者 | 保護方式 |
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 發現註冊碼,製作記憶體註冊機,執行得到註冊碼
&n