x64dbg - 第十七章 | 反匯編練習(六)
目標程式
檔案下載:[VisualSite Designer](/download/x64dbg/chapter17/VisualSite Designer.7z)
解壓密碼:morosedog
程式簡介
Visual Site Designer 是一套所見即所得的網站設計軟體,讓你使用多頁面、圖片和動畫製作網站。
任務目標
- 移除使用次數限制。
- 移除廣告視窗(Nag)。
分析程式
- 開啟
VisualSite Designer.exe
- 彈出視窗,下方顯示
Number of trials 10
(試驗次數10)
- 點擊綠色的部分,會開啟主程式
- 關閉主程式,會彈出廣告視窗
額外補充
軟件斷點
- 平常常用的
F2
設定的斷點。 - 原理是在斷點處重寫代碼,寫入
int3
中斷指令 (當CPU
執行到int3
,x64dbg
可取得控制權)。
- 平常常用的
硬件斷點
- 依賴
CPU
的物理支持。 - 其中有
8
個專用的調試寄存器:Dr0-Dr7
。Dr0-Dr3
:存放執行地址。Dr4-Dr5
:默認不使用。Dr6-Dr7
:記錄Dr0-Dr3的屬性 (讀、寫還是執行)。
- 是硬件斷點最多下四個的原因
- 依賴
內存斷點 (特殊斷點)
- 每次僅能設置一個
- 設置一個斷點,會改變整個內存的屬性
- 何時使用
軟件斷點
和硬件斷點
?軟件斷點
只能在x64dbg
的CPU
介面設置,無法在資料資料中設置,也無法在一段指令的中間設置。
如果想在Windwos的動態連結程式庫(DLL)裡面設定斷點,就會需要使用硬件斷點
,如使用軟件斷點
設置在動態連結程式庫(DLL)裡面是不會被保存的,重啟程式將丟失斷點。
搜尋思路
F8
一步一步過,找到彈出視窗的位置。F9
執行程式,使用Alt + F9
執行到使用者代碼(U),找到Call
的位置。
修改思路
- 使用
NOP
填充替代彈出Nag
的部分 - 使用
jmp
跳過驗證的部分
實際分析
開啟
VisualSite Designer.exe
F9
執行程式彈出試驗次數視窗
回到
x64dbg
F12
暫停(P)注意標題,領空變成
user32.dll
Alt + F9
執行到使用者代碼(U)左下角由
暫停
變成執行
回到試驗次數視窗
點擊綠色的部分
注意標題,領空變成
VisualSite Designer.exe
,並停在00489917 | 83F8 01 | cmp eax,1 |
向上觀察
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15004898D1 | 84C0 | test al,al |
004898D3 | 0F84 FF000000 | je visualsite designer.4899D8 |
004898D9 | 8A87 E0000000 | mov al,byte ptr ds:[edi+E0] |
004898DF | 84C0 | test al,al |
004898E1 | 0F85 42010000 | jne visualsite designer.489A29 |
004898E7 | 8B87 E4000000 | mov eax,dword ptr ds:[edi+E4] |
004898ED | 6A 00 | push 0 |
004898EF | 85C0 | test eax,eax |
004898F1 | 0F8E A1000000 | jle visualsite designer.489998 |
004898F7 | 8D8C24 10020000 | lea ecx,dword ptr ss:[esp+210] |
004898FE | E8 6D240200 | call visualsite designer.4ABD70 |
00489903 | 8D8C24 0C020000 | lea ecx,dword ptr ss:[esp+20C] |
0048990A | C68424 78870000 0B | mov byte ptr ss:[esp+8778],B | B:'\v'
00489912 | E8 132B0300 | call <JMP.&Ordinal#2514> |
00489917 | 83F8 01 | cmp eax,1 |00489912 | E8 132B0300 | call <JMP.&Ordinal#2514> |
預期這邊是彈出試驗視窗的位址,將斷點設置在此Ctrl + F2
重新啟動(S)F9
執行程式停在
00489912 | E8 132B0300 | call <JMP.&Ordinal#2514> |
並且沒有彈出試驗次數視窗
F8
步過彈出試驗次數視窗
在此可以確認,
00489912 | E8 132B0300 | call <JMP.&Ordinal#2514> |
為彈出試驗次數視窗位址
Ctrl + F2
重新啟動(S)F9
執行程式停在
00489912 | E8 132B0300 | call <JMP.&Ordinal#2514> |
向上觀察
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15004898D1 | 84C0 | test al,al |
004898D3 | 0F84 FF000000 | je visualsite designer.4899D8 |
004898D9 | 8A87 E0000000 | mov al,byte ptr ds:[edi+E0] |
004898DF | 84C0 | test al,al |
004898E1 | 0F85 42010000 | jne visualsite designer.489A29 |
004898E7 | 8B87 E4000000 | mov eax,dword ptr ds:[edi+E4] |
004898ED | 6A 00 | push 0 |
004898EF | 85C0 | test eax,eax |
004898F1 | 0F8E A1000000 | jle visualsite designer.489998 |
004898F7 | 8D8C24 10020000 | lea ecx,dword ptr ss:[esp+210] |
004898FE | E8 6D240200 | call visualsite designer.4ABD70 |
00489903 | 8D8C24 0C020000 | lea ecx,dword ptr ss:[esp+20C] |
0048990A | C68424 78870000 0B | mov byte ptr ss:[esp+8778],B | B:'\v'
00489912 | E8 132B0300 | call <JMP.&Ordinal#2514> |
00489917 | 83F8 01 | cmp eax,1 |發現三個跳轉指令分別為
je visualsite designer.4899D8
、jne visualsite designer.489A29
、jle visualsite designer.489998
,在這三個上面都設置中斷點移除其他的中斷點
Ctrl + F2
重新啟動(S)F9
執行程式停在
004898D3 | 0F84 FF000000 | je visualsite designer.4899D8 |
跳轉未實現修改
ZF = 1
跳轉已實現F9
執行程式發現程序被關閉
在此可以假設
004898D3 | 0F84 FF000000 | je visualsite designer.4899D8 |
是跳轉到程序關閉
Ctrl + F2
重新啟動(S)移除
004898D3 | 0F84 FF000000 | je visualsite designer.4899D8 |
中斷點F9
執行程式停在
004898E1 | 0F85 42010000 | jne visualsite designer.489A29 |
跳轉未實現修改
ZF = 0
跳轉已實現F9
執行程式主程式直接被開啟
在此可以假設
004898E1 | 0F85 42010000 | jne visualsite designer.489A29 |
是跳轉到主程式直接開啟
Ctrl + F2
重新啟動(S)移除
004898E1 | 0F85 42010000 | jne visualsite designer.489A29 |
中斷點F9
執行程式停在
004898F1 | 0F8E A1000000 | jle visualsite designer.489998 |
跳轉未實現修改
ZF = 1
跳轉已實現F9
執行程式彈出試用期到期視窗
在此可以假設
004898F1 | 0F8E A1000000 | jle visualsite designer.489998 |
是跳轉彈出試用期過期的視窗
Ctrl + F2
重新啟動(S)移除所有中斷點
F9
執行程式彈出試驗次數視窗
點擊綠色的部分
主程式被開啟
關閉主程式
彈出廣告視窗
回到
x64dbg
F12
暫停(P)注意標題,領空變成
user32.dll
Alt + F9
執行到使用者代碼(U)左下角由
暫停
變成執行
回廣告視窗
關閉廣告視窗
注意標題,領空變成
VisualSite Designer.exe
,並停在00480C29 | 8D4C24 00 | lea ecx,dword ptr ss:[esp] |
向上觀察
1
2
300480C1C | C74424 68 00000000 | mov dword ptr ss:[esp+68],0 |
00480C24 | E8 01B80300 | call <JMP.&Ordinal#2514> |
00480C29 | 8D4C24 00 | lea ecx,dword ptr ss:[esp] |00480C24 | E8 01B80300 | call <JMP.&Ordinal#2514> |
預期這邊是彈出廣告視窗的位址,將斷點設置在此Ctrl + F2
重新啟動(S)F9
執行程式彈出試驗次數視窗
點擊綠色的部分
主程式被開啟
關閉主程式
停在
00480C24 | E8 01B80300 | call <JMP.&Ordinal#2514> |
並且沒有彈出廣告視窗
F8
步過彈出廣告視窗
在此可以確認,
00480C24 | E8 01B80300 | call <JMP.&Ordinal#2514> |
為彈出廣告視窗位址
分析總結
00489912 | E8 132B0300 | call <JMP.&Ordinal#2514> |
為彈出試驗次數視窗位址004898D3 | 0F84 FF000000 | je visualsite designer.4899D8 |
是跳轉到程序關閉004898E1 | 0F85 42010000 | jne visualsite designer.489A29 |
是跳轉到主程式直接開啟004898F1 | 0F8E A1000000 | jle visualsite designer.489998 |
是跳轉彈出試用期過期的視窗00480C24 | E8 01B80300 | call <JMP.&Ordinal#2514> |
為彈出廣告視窗位址
修改思路
根據分析總結
- 使用
jmp
直接跳轉實現到主程式直接開啟。 - 將彈出廣告視窗位址用
NOP
做填充。
實際修改
開啟
VisualSite Designer.exe
004898E1 | 0F85 42010000 | jne visualsite designer.489A29 |
按下空白鍵將指令修改為
jmp 0x00489A29
,按下確定修改後如下
1
2
3
4// 修改前
004898E1 | 0F85 42010000 | jne visualsite designer.489A29 |
// 修改後
004898E1 | E9 43010000 | jmp visualsite designer.489A29 |00480C24 | E8 01B80300 | call <JMP.&Ordinal#2514> |
右鍵選擇二進位
->用 NOP 填充 (Ctrl + 9)
1
2
3
4
5
6
7
8// 修改前
00480C24 | E8 01B80300 | call <JMP.&Ordinal#2514> |
// 修改後
00480C24 | 90 | nop |
00480C25 | 90 | nop |
00480C26 | 90 | nop |
00480C27 | 90 | nop |
00480C28 | 90 | nop |點擊
修補程式
或是快捷鍵Ctrl + P
點擊
修補檔案(P)
另存檔名
VisualSite Designer.crack.exe
恭喜補丁產生
VisualSite Designer.crack.exe
實際驗證
- 開啟
VisualSite Designer.crack.exe
- 直接開啟主程式,成功破解試用次數限制
- 關閉主程式,成功移除廣告視窗
經驗分享
F8
一步一步過,如果太多會按到很辛苦,可以使用Ctrl + F8
自動步過。點擊
修補程式
發現沒有任何異動,無法點擊修補檔案(P)
,請把目標程式重新解壓縮一份新的,重新修改和重新產生補丁。註:會造成此問題,可能是因為在動態連結程式庫(DLL)裡面設定到
軟件斷點
造成的問題。
註:以上參考了
x64dbg
x64dbg’s documentation!
CSDN billvsme的专栏 的 OllyDbg 使用笔记 (六)