x64dbg - 第二十五章 | 反匯編練習(十四)
前言
這篇延續上一篇x64dbg - 第二十四章 | 反匯編練習(十三),分析並使用查看調用堆疊。
目標程式
檔案下載:DVDMenuStudio.exe
解壓密碼:morosedog
任務目標
- 試用期限已過,破解註冊。
分析程式
執行
DVDMenuStudio.exe
彈出
Nag
,顯示30 days left
(還剩30天試用期)點擊
Enter Reg.Code
點擊
OK
彈出
Please enter your name
視窗輸入
Name
:123
、Serial Number
:456
、Unlick Code
:789
點擊
OK
彈出
Please check Serial Number....
視窗輸入
Name
:123456789
、Serial Number
:123456789
、Unlick Code
:123456789
點擊
OK
彈出
The registration code seems to be not valid.Please check if you didn't made any mistake.
視窗點擊
Continue
進入主程式
點擊
Help
點擊
About...
彈出
Registerd to: Unregistered
檢驗顯示是使用Microsoft Visual C++ 6.0
編寫。
前置作業
- 調整系統時間為一個月後
- 執行
DVDMenuStudio.exe
- 彈出
Nag
顯示0 days left Please Register this copy (Click on But button to see how)
(還剩0天請註冊此副本(點擊但按鈕查看方法)) - 關閉程式
- 還原系統時間
- 執行
DVDMenuStudio.exe
- 依舊彈出
Nag
顯示0 days left Please Register this copy (Click on But button to see how)
(還剩0天請註冊此副本(點擊但按鈕查看方法))
額外補充
push ebp
函數的入口點
搜尋思路
- 根據堆疊的調用,判斷產生
Nag
視窗的函數位置
修改思路
- 跳過產生
Nag
函數
實際分析
開啟
DVDMenuStudio.exe
F9
執行程式主程式開啟
彈出
Nag
視窗回到
x64dbg
F12
暫停(P)開啟
呼叫堆疊
視窗 (Alt + K)右鍵點選
顯示可疑的呼叫堆疊
發現有一個返回到
004DC0D6
右鍵點選
跟隨目標(T)
跳轉到
004DC0D6 | 8B35 B8575E00 | mov esi,dword ptr ds:[<&SetTimer>] |
向上觀察
1
2004DC0D1 | E8 77FD0C00 | call dvdmenustudio.5ABE4D |
004DC0D6 | 8B35 B8575E00 | mov esi,dword ptr ds:[<&SetTimer>] |004DC0D1
設定中斷點Ctrl + F2
重新啟動(S)F9
執行程式主程式開啟
並未彈出
Nag
視窗F8
步過彈出
Nag
視窗這邊可以確認該
Call
為彈出Nag
視窗向上觀察,找尋函數入口點
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33004DBD80 | 55 | push ebp |
004DBD81 | 8BEC | mov ebp,esp |
004DBD83 | 6A FF | push FFFFFFFF |
004DBD85 | 68 17B85D00 | push dvdmenustudio.5DB817 |
004DBD8A | 64:A1 00000000 | mov eax,dword ptr fs:[0] |
004DBD90 | 50 | push eax |
004DBD91 | 64:8925 00000000 | mov dword ptr fs:[0],esp |
004DBD98 | 81EC 68010000 | sub esp,168 |
004DBD9E | 8B45 08 | mov eax,dword ptr ss:[ebp+8] |
004DBDA1 | 53 | push ebx |
004DBDA2 | 56 | push esi |
004DBDA3 | 57 | push edi |
004DBDA4 | 83F8 01 | cmp eax,1 |
004DBDA7 | 8BF9 | mov edi,ecx |
004DBDA9 | 75 53 | jne dvdmenustudio.4DBDFE |
004DBDAB | 50 | push eax |
004DBDAC | 8B47 1C | mov eax,dword ptr ds:[edi+1C] |
004DBDAF | 50 | push eax |
004DBDB0 | FF15 B4575E00 | call dword ptr ds:[<&KillTimer>] |
004DBDB6 | E8 8E5C0E00 | call dvdmenustudio.5C1A49 |
004DBDBB | 8B40 04 | mov eax,dword ptr ds:[eax+4] |
004DBDBE | 83B8 64010000 01 | cmp dword ptr ds:[eax+164],1 |
004DBDC5 | 75 1F | jne dvdmenustudio.4DBDE6 |
004DBDC7 | 8BCF | mov ecx,edi |
004DBDC9 | E8 621C0000 | call dvdmenustudio.4DDA30 |
004DBDCE | 8B4F 1C | mov ecx,dword ptr ds:[edi+1C] |
004DBDD1 | 6A 00 | push 0 |
004DBDD3 | 68 C8000000 | push C8 |
004DBDD8 | 6A 07 | push 7 |
004DBDDA | 51 | push ecx |
004DBDDB | FF15 B8575E00 | call dword ptr ds:[<&SetTimer>] |
004DBDE1 | E9 91040000 | jmp dvdmenustudio.4DC277 |
004DBDE6 | 8B57 1C | mov edx,dword ptr ds:[edi+1C] |004DBD80
設定中斷點Ctrl + F2
重新啟動(S)F9
執行程式F8
一步一步過,並持續觀察持續修改寄存器
會發現
004DBDC5 | 75 1F | jne dvdmenustudio.4DBDE6 |
跳轉未實現可跳過
004DC0D1 | E8 77FD0C00 | call dvdmenustudio.5ABE4D |
並正常開啟主程式
分析總結
004DBDC5
跳轉未實現即可跳過彈出Nag
視窗
修改思路
- 將
004DBDC5
該段用NOP
做填充。
實際修改
開啟
DVDMenuStudio.exe
反匯編視窗中按下
Ctrl + G
輸入004DBDC5
,會跳轉到004DBDC5
位址對
004DBDC5
按右鍵選擇二進位
->用 NOP 填充 (Ctrl + 9)
F9
執行直接開啟主程式
未彈出
Nag
視窗點擊
修補程式
或是快捷鍵Ctrl + P
點擊
修補檔案(P)
另存檔名
DVDMenuStudio.crack.exe
恭喜補丁產生
DVDMenuStudio.crack.exe
註:以上參考了
x64dbg
x64dbg’s documentation!
CSDN billvsme的专栏 的 OllyDbg 使用笔记 (十三)