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.exeF9執行程式彈出試驗次數視窗
回到
x64dbgF12暫停(P)注意標題,領空變成
user32.dllAlt + 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執行程式彈出試驗次數視窗
點擊綠色的部分
主程式被開啟
關閉主程式
彈出廣告視窗
回到
x64dbgF12暫停(P)注意標題,領空變成
user32.dllAlt + 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.exe004898E1 | 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 使用笔记 (六)
