Like Share Discussion Bookmark Smile

J.J. Huang   2019-09-04   x64dbg   瀏覽次數:

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
  • 剛好確認這個100Nag視窗

  • 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
    13
    00406707   | 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
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
00431650   | 81EC D0000000         | sub esp,D0                               |
00431656 | 8D4424 00 | lea eax,dword ptr ss:[esp] |
0043165A | 53 | push ebx |
0043165B | 56 | push esi |
0043165C | 57 | push edi |
0043165D | 50 | push eax |
0043165E | 68 19000200 | push 20019 |
00431663 | 6A 00 | push 0 |
00431665 | 68 F8B34400 | push movgear.44B3F8 | 44B3F8:"Software\\gamani\\GIFMovieGear\\2.0"
0043166A | 68 01000080 | push 80000001 |
0043166F | 83CB FF | or ebx,FFFFFFFF |
00431672 | FF15 04804400 | call dword ptr ds:[<&RegOpenKeyExA>] |
00431678 | 85C0 | test eax,eax |
0043167A | 0F85 C2000000 | jne movgear.431742 |
00431680 | 8D4C24 10 | lea ecx,dword ptr ss:[esp+10] |
00431684 | 8B35 08804400 | mov esi,dword ptr ds:[<&RegQueryValueExA |
0043168A | 8D5424 14 | lea edx,dword ptr ss:[esp+14] |
0043168E | 51 | push ecx |
0043168F | 52 | push edx |
00431690 | 50 | push eax |
00431691 | 50 | push eax |
00431692 | 8B4424 1C | mov eax,dword ptr ss:[esp+1C] |
00431696 | BF 64000000 | mov edi,64 | 64:'d'
0043169B | 68 98D44400 | push movgear.44D498 | 44D498:"RegName3"
004316A0 | 50 | push eax |
004316A1 | 897C24 28 | mov dword ptr ss:[esp+28],edi |
004316A5 | FFD6 | call esi |
004316A7 | 85C0 | test eax,eax |
004316A9 | 0F85 93000000 | jne movgear.431742 |
004316AF | 8D4C24 10 | lea ecx,dword ptr ss:[esp+10] |
004316B3 | 8D5424 78 | lea edx,dword ptr ss:[esp+78] |
004316B7 | 51 | push ecx |
004316B8 | 52 | push edx |
004316B9 | 50 | push eax |
004316BA | 50 | push eax |
004316BB | 8B4424 1C | mov eax,dword ptr ss:[esp+1C] |
004316BF | 68 A4D44400 | push movgear.44D4A4 | 44D4A4:"RegCode3"
004316C4 | 50 | push eax |
004316C5 | 897C24 28 | mov dword ptr ss:[esp+28],edi |
004316C9 | FFD6 | call esi |
004316CB | 85C0 | test eax,eax |
004316CD | 75 73 | jne movgear.431742 |
004316CF | 8D4C24 78 | lea ecx,dword ptr ss:[esp+78] |
004316D3 | 8D5424 14 | lea edx,dword ptr ss:[esp+14] |
004316D7 | 51 | push ecx |
004316D8 | 52 | push edx |
004316D9 | E8 B2FEFFFF | call movgear.431590 |
004316DE | 83C4 08 | add esp,8 |
004316E1 | 85C0 | test eax,eax |
004316E3 | 74 5D | je movgear.431742 |
004316E5 | 8B9424 E0000000 | mov edx,dword ptr ss:[esp+E0] |
004316EC | BB 01000000 | mov ebx,1 |
004316F1 | 85D2 | test edx,edx |
004316F3 | 74 21 | je movgear.431716 |
004316F5 | 8D7C24 14 | lea edi,dword ptr ss:[esp+14] |
004316F9 | 83C9 FF | or ecx,FFFFFFFF |
004316FC | 33C0 | xor eax,eax |
004316FE | F2:AE | repne scasb |
00431700 | F7D1 | not ecx |
00431702 | 2BF9 | sub edi,ecx |
00431704 | 8BC1 | mov eax,ecx |
00431706 | 8BF7 | mov esi,edi |
00431708 | 8BFA | mov edi,edx |
0043170A | C1E9 02 | shr ecx,2 |
0043170D | F3:A5 | rep movsd |
0043170F | 8BC8 | mov ecx,eax |
00431711 | 83E1 03 | and ecx,3 |
00431714 | F3:A4 | rep movsb |
00431716 | 8B9424 E4000000 | mov edx,dword ptr ss:[esp+E4] |
0043171D | 85D2 | test edx,edx |
0043171F | 74 21 | je movgear.431742 |
00431721 | 8D7C24 78 | lea edi,dword ptr ss:[esp+78] |
00431725 | 83C9 FF | or ecx,FFFFFFFF |
00431728 | 33C0 | xor eax,eax |
0043172A | F2:AE | repne scasb |
0043172C | F7D1 | not ecx |
0043172E | 2BF9 | sub edi,ecx |
00431730 | 8BC1 | mov eax,ecx |
00431732 | 8BF7 | mov esi,edi |
00431734 | 8BFA | mov edi,edx |
00431736 | C1E9 02 | shr ecx,2 |
00431739 | F3:A5 | rep movsd |
0043173B | 8BC8 | mov ecx,eax |
0043173D | 83E1 03 | and ecx,3 |
00431740 | F3:A4 | rep movsb |
00431742 | 8B4C24 0C | mov ecx,dword ptr ss:[esp+C] |
00431746 | 51 | push ecx |
00431747 | FF15 00804400 | call dword ptr ds:[<&RegCloseKey>] |
0043174D | 5F | pop edi |
0043174E | 8BC3 | mov eax,ebx |
00431750 | 5E | pop esi |
00431751 | 5B | pop ebx |
00431752 | 81C4 D0000000 | add esp,D0 |
00431758 | C3 | ret |
  • 可以發現讀取註冊表取得一個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 使用笔记 (十六)