1. 程式人生 > >逆向破解之160個CrackMe —— 001

逆向破解之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