x64dbg - 第二十七章 | 反匯編練習(十六)
目標程式
檔案下載:urlegal33.exe
解壓密碼:morosedog
程式簡介
URLegal能檢查你的書籤文件並找出無效鏈接。你能選擇測試單一文件或是檢查子目錄,文件中的每一HTTP URL將自動通過連接到目標網站和接收具體的HTML頁面進行測試,結果在一文本窗口中進行展示。
前置作業
- 下載目標程式並解壓縮
- 執行
SETUP.EXE,一路Next安裝 Finish開啟主程式
任務目標
- 移除所有的
Nag視窗
分析程式
執行
URLegal.exe開啟主程式
點擊
File點擊
Register...彈出
Registering視窗輸入
Name、Code點擊
Validata My Codes彈出
Name / Code mis-match. Try again.(名稱/代碼不匹配。 再試一次)關閉主程式
彈出
How did you like URLegal?視窗點擊
右上角X會自對開啟
Windows 說明及支援點擊
I will Register Soon正常關閉主程式

檢驗顯示是使用Microsoft Visual C++ 6.0編寫。

額外補充
- 模式對話框,DialogBoxParam
1 | INT_PTR DialogBoxParamA( |
- 無模式對話框,CreateDialogParam
1 | HWND CreateDialogParamA( |
hInstance,類型:HINSTANCE:包含對話框模板的模組句柄。如果此參數為NULL,則使用當前可執行文件。hInstance對Windwos來說是一個獨一無二的數字,是用來標記這個對話框的句柄
兩個模式的對話框,區別為是否允許使用者在不同窗口間進行切換;模式對話框為不允許,非模式對話框允許。
模式對話框,是由
Windwos為它內建一個消息循環;非模式對話框,則是通過使用者程序中的消息循環派送。模式對話框的簡單範例:

輔助程式
檔案下載:eXeScope.exe
解壓密碼:morosedog
輔助程式簡介
這是一套可將程式中的英文字挑出來加以修改、翻譯,將軟體轉成中文的操作介面來,它包括可更改選單menu、字體font、對話方塊dialog,它還能直接修改EXE,DLL,OCX..etc.
輔助程式前置作業
- 下載目標程式並解壓縮
- 右鍵點選
eXeScope.exe - 點選
內容 - 點選
相容性 - 勾選
以系統管理員的身份執行此程式
註:不然開啟程式都會是僅可讀取模式,無法進行寫入修改。
輔助程式使用簡單示範
開啟
eXeScope.exe點擊
文件(F)->打開(O)選擇
C:\Program Files (x86)\URLegal\Urlegal.exe- 建議先備份一份
Urlegal.exe
- 建議先備份一份
展開
資源->對話框找尋標題為
How did you like URLegal?點擊
測試顯示(可以預覽該對話框)點擊
對話框編輯器(&D)(可以編輯對話框的物件位置、大小..等等)編輯對話框內的網址
Dialog: 103、Static: http://www.worldlynx.net/pgerhart/注意:
103 (十進制),0x67 (十六進制)表示為Nag視窗的hInstance修改
http://www.worldlynx.net/pgerhart/->https://morosedog.gitlab.io/點擊
保持更新點擊
確定執行
URLegal.exe開啟主程式
關閉主程式
彈出
How did you like URLegal?視窗URL已經確定被修改了

搜尋思路
- 使用搜尋字串找關鍵字
- 根據堆疊的調用,判斷產生
Nag視窗的函數位置 - 使用
eXeScope工具查找關鍵位址
修改思路
- 針對彈出的
Nag視窗做處理
實際分析
開啟
URLegal.exe於反匯編視窗點選右鍵選擇
搜尋(S)->目前模組->指令(O)輸入
push 0x671
2位址 反組譯
00401240 push 67點擊
位址=00401240 反組譯=push 67跳轉到
00401240 | 6A 67 | push 67 |向上觀察
1
2
3
4
5
6
7
8
9
10
11
1200401220 | 55 | push ebp |
00401221 | 8BEC | mov ebp,esp |
00401223 | 6A FF | push FFFFFFFF |
00401225 | 68 05744100 | push urlegal.417405 |
0040122A | 64:A1 00000000 | mov eax,dword ptr fs:[0] |
00401230 | 50 | push eax |
00401231 | 64:8925 00000000 | mov dword ptr fs:[0],esp |
00401238 | 51 | push ecx |
00401239 | 894D F0 | mov dword ptr ss:[ebp-10],ecx |
0040123C | 8B45 08 | mov eax,dword ptr ss:[ebp+8] |
0040123F | 50 | push eax |
00401240 | 6A 67 | push 67 |找尋
push ebp入口點00401220 | 55 | push ebp |右鍵選擇尋找參考(R)->選定的位址(S)可見以下位址參考
1
2位址 反組譯
004023BB call urlegal.401220點擊
位址=004023BB 反組譯=call urlegal.401220跳轉到
004023BB | E8 60EEFFFF | call urlegal.401220 |向上觀察
1
2
3
4
5
6004023AA | E8 691A0000 | call urlegal.403E18 |
004023AF | 85C0 | test eax,eax |
004023B1 | 75 43 | jne urlegal.4023F6 |
004023B3 | 6A 00 | push 0 |
004023B5 | 8D8D 98FEFFFF | lea ecx,dword ptr ss:[ebp-168] |
004023BB | E8 60EEFFFF | call urlegal.401220 |會發現
004023B1 | 75 43 | jne urlegal.4023F6 |跳轉未實現可跳過
004023BB | E8 60EEFFFF | call urlegal.401220 |test eax,eax影響jne的跳轉結果call urlegal.403E18會異動eax的值004023AA設定中斷點移除其他中斷點
F9執行程式關閉主程式
斷點在
004023AA | E8 691A0000 | call urlegal.403E18 |F7步入觀察程式
1
2
3
4
5
6
7
8
900403E18 | 55 | push ebp |
00403E19 | 8BEC | mov ebp,esp |
00403E1B | 51 | push ecx | ecx:"艇A"==&"甋A"
00403E1C | 894D FC | mov dword ptr ss:[ebp-4],ecx |
00403E1F | 8B45 FC | mov eax,dword ptr ss:[ebp-4] |
00403E22 | 8B40 2C | mov eax,dword ptr ds:[eax+2C] |
00403E25 | 8BE5 | mov esp,ebp |
00403E27 | 5D | pop ebp |
00403E28 | C3 | ret |F8一步一步過,並持續觀察步過到下方指令時
1
200403E1F | 8B45 FC | mov eax,dword ptr ss:[ebp-4] |
00403E22 | 8B40 2C | mov eax,dword ptr ds:[eax+2C] |mov eax,dword ptr ss:[ebp-4]與mov eax,dword ptr ds:[eax+2C]會異動eax的值00403E1F | 8B45 FC | mov eax,dword ptr ss:[ebp-4] |按下空白鍵將指令修改為
mov eax, 0x1,按下確定修改後如下
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20// 修改前
00403E18 | 55 | push ebp |
00403E19 | 8BEC | mov ebp,esp |
00403E1B | 51 | push ecx | ecx:"艇A"==&"甋A"
00403E1C | 894D FC | mov dword ptr ss:[ebp-4],ecx |
00403E1F | 8B45 FC | mov eax,dword ptr ss:[ebp-4] |
00403E22 | 8B40 2C | mov eax,dword ptr ds:[eax+2C] |
00403E25 | 8BE5 | mov esp,ebp |
00403E27 | 5D | pop ebp |
00403E28 | C3 | ret |
// 修改後
00403E18 | 55 | push ebp |
00403E19 | 8BEC | mov ebp,esp |
00403E1B | 51 | push ecx | ecx:"艇A"==&"甋A"
00403E1C | 894D FC | mov dword ptr ss:[ebp-4],ecx |
00403E1F | B8 01000000 | mov eax,1 |
00403E24 | 90 | nop |
00403E25 | 8BE5 | mov esp,ebp |
00403E27 | 5D | pop ebp |
00403E28 | C3 | ret |F9執行程式主程式正常關閉
沒有彈出
Nag視窗
分析總結
004023AA判斷是否註冊的位址00403E1F、00403E22判斷是否跳轉關鍵
修改思路
- 修改直接賦予
eax的值為0x1
實際修改
開啟
URLegal.exe反匯編視窗中按下
Ctrl + G輸入00403E1F,會跳轉到00403E1F位址00403E1F | 8B45 FC | mov eax,dword ptr ss:[ebp-4] |按下空白鍵將指令修改為
mov eax, 0x1,按下確定修改後如下
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20// 修改前
00403E18 | 55 | push ebp |
00403E19 | 8BEC | mov ebp,esp |
00403E1B | 51 | push ecx | ecx:"艇A"==&"甋A"
00403E1C | 894D FC | mov dword ptr ss:[ebp-4],ecx |
00403E1F | 8B45 FC | mov eax,dword ptr ss:[ebp-4] |
00403E22 | 8B40 2C | mov eax,dword ptr ds:[eax+2C] |
00403E25 | 8BE5 | mov esp,ebp |
00403E27 | 5D | pop ebp |
00403E28 | C3 | ret |
// 修改後
00403E18 | 55 | push ebp |
00403E19 | 8BEC | mov ebp,esp |
00403E1B | 51 | push ecx | ecx:"艇A"==&"甋A"
00403E1C | 894D FC | mov dword ptr ss:[ebp-4],ecx |
00403E1F | B8 01000000 | mov eax,1 |
00403E24 | 90 | nop |
00403E25 | 8BE5 | mov esp,ebp |
00403E27 | 5D | pop ebp |
00403E28 | C3 | ret |點擊
修補程式或是快捷鍵Ctrl + P點擊
修補檔案(P)另存檔名
URLegal.crack.exe恭喜補丁產生
URLegal.crack.exe
心得分享
- 搜尋的方式這邊僅示範了
尋找參考 - 亦可使用暫停的方式,找尋堆疊也可找到關鍵位置
註:以上參考了
x64dbg
x64dbg’s documentation!
CSDN billvsme的专栏 的 OllyDbg 使用笔记 (十五)
