x64dbg - 第三十章 | 反匯編練習(十九)
目標程式
檔案下載:gmvgr30.exe
解壓密碼:morosedog
程式簡介
這是一個GIF動畫製作的軟體,幾乎所有製作GIF
動畫的編輯功能它都有,無須再用其他的圖型軟體輔助。
它可以處理背景透明化而且做法容易,做好的圖片可以做最佳化處理使圖片減肥,另外它除了可以把做好的圖片存成GIF
的動畫圖外。還可以存成AVI
或是ANI
的文件格式。
前置作業
- 下載目標程式並解壓縮
- 執行
gmvgr30.exe
,一路Next
安裝
任務目標
- 移除
Nag
視窗
分析程式
- 執行
movgear.exe
- 開啟主程式
- 點擊
Help
->About GIF Movie Gear...
- 彈出視窗,內容
This Trial Software expores in 30 days.
(此試用版軟件將在30天後到期) - 關閉主程式
- 彈出視窗,內容
This Trial Software expores in 30 days.
(此試用版軟件將在30天後到期) - 過幾秒
OK
按鈕才顯示
檢驗顯示是使用Microsoft Visual C++ 6.0
編寫。
額外補充
-
- 打開指定的註冊表項。請注意,鍵名不區分大小寫。
-
- 檢索與打開的註冊表項關聯的指定值名稱的類型和資料。
-
- 關閉指定註冊表項的句柄。
輔助程式
檔案下載:ResHacker.exe
解壓密碼:morosedog
輔助程式簡介
中文化工具 - Resource Hacker
,用來編修程式資源(*.exe
或 *.dll
),如果程式本身沒有保護(加殼),可以用它讓英文軟體變成中文介面。
輔助程式前置作業
- 下載目標程式並解壓縮
- 右鍵點選
ResHacker.exe
- 點選
內容
- 點選
相容性
- 勾選
以系統管理員的身份執行此程式
輔助程式使用簡單示範
開啟
ResHacker.exe
點擊
當案
->開啟(O)
選擇
C:\Program Files (x86)\GIF Movie Gear\movgear.exe
展開
資源
->對話框
- 只能一個一個開來看,這邊開啟第一個
100
- 只能一個一個開來看,這邊開啟第一個
點擊
顯示對話
可以透過修改指令碼,改變對話框內容
點擊
編輯指令碼(C)
(可以編輯對話框的物件位置、大小..等等)點擊
檔案
->儲存(S)
修改完畢
搜尋思路
- 使用搜尋字串找關鍵字
- 根據堆疊的調用,判斷產生
Nag
視窗的函數位置 - 使用
ResHacker
工具查找關鍵位址
修改思路
- 針對彈出的
Nag
視窗做處理
實際分析
開啟
ResHacker.exe
點擊
當案
->開啟(O)
選擇
C:\Program Files (x86)\GIF Movie Gear\movgear.exe
展開
資源
->對話框
- 只能一個一個開來看,這邊開啟第一個
100
- 只能一個一個開來看,這邊開啟第一個
剛好確認這個
100
為Nag
視窗100
轉的16
進制為0x64
開啟
x64dbg
開啟
movgear.exe
於反匯編視窗點選右鍵選擇
搜尋(S)
->目前模組
->指令(O)
輸入
push 0x64
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17位址 反組譯
0040395B push 64
00406725 push 64
00407062 push 64
0040D577 push 64
0043195E push 64
00431979 push 64
00438F5D push 64
00439E52 push 64
0043AA2D push 64
0043B53E push 64
0043B5EA push 64
0043D5E2 push 64
0043D686 push 64
0043EE39 push 64
00441092 push 64
004425DB push 64右鍵選擇
Set breakpoint on all commands
全部設定中斷點F9
執行程式斷點在
0043AA2D | 6A 64 | push 64 |
此時主程式尚未開啟,故該中斷點非
Nag
主要位址取消該中斷點
F9
繼續執行開啟主程式
關閉主程式
斷點在
00406725 | 6A 64 | push 64 |
F9
繼續執行Nag
視窗彈出此時可以確認
00406725
為彈出Nag
視窗位址向上觀察會跳轉跳過彈出訊息視窗的指令
1
2
3
4
5
6
7
8
9
10
11
12
1300406707 | 6A 00 | push 0 |
00406709 | 6A 00 | push 0 |
0040670B | E8 40AF0200 | call movgear.431650 |
00406710 | 83C4 08 | add esp,8 |
00406713 | 83F8 01 | cmp eax,1 |
00406716 | 74 16 | je movgear.40672E |
00406718 | A1 68854600 | mov eax,dword ptr ds:[468568] |
0040671D | 6A 01 | push 1 |
0040671F | 68 D0E84000 | push movgear.40E8D0 |
00406724 | 56 | push esi |
00406725 | 6A 64 | push 64 |
00406727 | 50 | push eax |
00406728 | FF15 E4824400 | call dword ptr ds:[<&DialogBoxParamA>] |00406716 | 74 16 | je movgear.40672E |
會跳到彈出Nag
0040670B | E8 40AF0200 | call movgear.431650 |
影響跳轉結果0040670B
設定中斷點,並移除其他中斷點Ctrl + F2
重新啟動(S)F9
執行程式開啟主程式
關閉主程式
斷點在
0040670B | E8 40AF0200 | call movgear.431650 |
F7
步入斷點在
00431650 | 81EC D0000000 | sub esp,D0 |
F8
一步一步過,並觀察反匯編視窗的註解和資訊視窗的內容
1 | 00431650 | 81EC D0000000 | sub esp,D0 | |
可以發現讀取
註冊表
取得一個Key
根據
004316D9 | E8 B2FEFFFF | call movgear.431590 |
判斷Key
是否正確發現
0043174E | 8BC3 | mov eax,ebx |``ebx
修改eax
Ctrl + F2
重新啟動(S)反匯編視窗中按下
Ctrl + G
輸入004C2AC6
,會跳轉到0043174E
位址0043174E | 8BC3 | mov eax,ebx |
按下空白鍵將指令修改為
mov eax, 0x1
,按下確定修改後如下
1
2
3
4
5
6
7
8
9
10
11
12
13
14// 修改前
0043174E | 8BC3 | mov eax,ebx |
00431750 | 5E | pop esi |
00431751 | 5B | pop ebx |
00431752 | 81C4 D0000000 | add esp,D0 |
00431758 | C3 | ret |
// 修改後
0043174E | B8 01000000 | mov eax,1 |
00431753 | 90 | nop |
00431754 | 90 | nop |
00431755 | 90 | nop |
00431756 | 90 | nop |
00431757 | 90 | nop |
00431758 | C3 | ret |發現後面指令被覆蓋
點擊
修補程式
或是快捷鍵Ctrl + P
點擊
復原選取項目(R)
還原修改的指令
0043174E | 8BC3 | mov eax,ebx |
按下空白鍵將指令修改為
mov al, 0x1
,按下確定修改後如下
1
2
3
4
5
6
7
8
9
10
11
12// 修改前
0043174E | 8BC3 | mov eax,ebx |
00431750 | 5E | pop esi |
00431751 | 5B | pop ebx |
00431752 | 81C4 D0000000 | add esp,D0 |
00431758 | C3 | ret |
// 修改後
0043174E | B0 01 | mov al,1 |
00431750 | 5E | pop esi |
00431751 | 5B | pop ebx |
00431752 | 81C4 D0000000 | add esp,D0 |
00431758 | C3 | ret |移除所有中斷點
F9
執行程式開啟主程式
關閉主程式
正常關閉視窗,未彈出
Nag
視窗
註:以上參考了
x64dbg
x64dbg’s documentation!
CSDN billvsme的专栏 的 OllyDbg 使用笔记 (十六)