x64dbg - 第二十章 | 反匯編練習(九)
目標程式
檔案下載:pc2am2p.exe
解壓密碼:morosedog
程式簡介
PC 2應答機專業版
是專為個人計算機設計的軟件,可用作家庭或辦公室的電話答錄機。一般要點:專業呼叫記錄,為每個呼叫添加備註,標記和優先級。在呼叫進入和結束時顯示語音和語音。高級語音郵件允許從任何外部電話訪問你的呼叫列表。個人網站允許使用任何Internet瀏覽器訪問你的呼叫列表。將消息保存為壓縮的通用波形格式。從消息中刪除靜默部分。阻止不需要的電話。只需連接你的電話線,然後將你的電腦變成功能強大的應答機。
前置作業
- 使用
管理者權限
安裝 - 選擇
English
語系 - 一路
Next
到底
註:因為軟體老舊,所以用Windows XP來執行,方可正常開啟。
任務目標
- 輸入許可證號讓其註冊成功。
分析程式
- 開啟
PC2AM2_PRO.exe
- 稍待片刻,可見右下角顯示訊息
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17Welcome! Please wait a few seconds to finish installation on your computer.
(歡迎! 請等待幾秒鐘,以完成計算機上的安裝。)
Applying a unique identification number.
(應用唯一標識號。)
Installing program kernel as a service.
(將程序內核安裝為服務。)
From now on the PC 2 Answering Machine 2.0 - Professional Edition program is part of your WINDOWS services. You can LOG OFF or SWITCH users, the program will stay on the background to receive new phone calls.
(從現在開始,PC 2 Answering Machine 2.0 - 專業版程序是你WINDOWS服務的一部分。 你可以在LOG OFF或SWITCH用戶,程序將留在後台接收新的電話。)
Unregistered version - Please Register
(未註冊版本 - 請註冊)
Done, Loading PC 2 Answering Machine 2.0 - Professional Edition Please Wait ...
(完成,正在加載PC 2應答機2.0 - 專業版請稍候...) - 開啟主程式,彈出註冊視窗
- 於
Type here yout registration key then click OK:
輸入1234567890
- 按下
OK
- 彈出訊息
Error Registration Key
(錯誤的許可證號)
- 按下
Try
進入主程式 - 點擊
Help
底下有個Registration
檢驗顯示是使用Microsoft Visual Basic 5.0 / 6.0
編寫。
額外補充
VB
程序的特殊性在於,再用OD調試過程中,會在動態鏈接庫以及程序領空中經常跳躍,這裡說一些常見的動態鏈接庫:VB4
鏈接庫為vb40016.dll
; (16 位,較少見)VB4
鏈接庫為vb40032.dll
; (32 位)VB5
鏈接庫為msvbvm50.dll
;VB6
鏈接庫為msvbvm60.dll
;
在編譯的過程中,VB
程序執行時從本質上講是解釋執行,它們只是調用VBRUNxxx.DLL
中的函數,這樣可使程序員不需寫大量的程序代碼就可編寫出較好的圖形界面的windows
程序。
- 常見用於比較的
API
函數1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16// 變量比較
__vbaVarTstEq
__vbaVarCompEq
__vbaVarCompLe
__vbaVarCompLt
__vbaVarCompGe
__vbaVarCompGt
__vbaVarCompNe
// 字串比較
__vbaStrCmp
__vbaStrComp
__vbaStrCompVar
__vbaStrLike
__vbaStrTextComp
__vbaStrTextLike
搜尋思路
- 使用搜尋字串找關鍵字。
Visual Basic
撰寫的,使用函數搜尋常用的比較函數。
修改思路
- 找到關鍵驗證碼
實際分析
開啟
PC2AM2_PRO.exe
於反匯編視窗點選右鍵選擇
搜尋(S)
->目前模組
->字串引用(S)
搜尋
輸入registration
運氣不錯,發現註冊成功的字串,對其設定中斷點
1
2
3位址 反組譯 字串
005D0CBF mov edx,pc2am2_pro.438D00 L"Registration Success"
005D1997 mov edx,pc2am2_pro.438D00 L"Registration Success"F9
執行程式程式直接執行,並未執行到中斷點
到達
005D0CBF
位址,向上觀察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
35005D0C44 | C745 FC 05000000 | mov dword ptr ss:[ebp-4],5 |
005D0C4B | C745 98 01000000 | mov dword ptr ss:[ebp-68],1 |
005D0C52 | C745 A8 18845D00 | mov dword ptr ss:[ebp-58],pc2am2_pro.5D8 | 5D8418:",>n"==&L"oeiu-564-oqei-97"
005D0C59 | C745 A0 08400000 | mov dword ptr ss:[ebp-60],4008 |
005D0C60 | 8D45 9C | lea eax,dword ptr ss:[ebp-64] |
005D0C63 | 50 | push eax |
005D0C64 | 8D4D 98 | lea ecx,dword ptr ss:[ebp-68] |
005D0C67 | 51 | push ecx |
005D0C68 | 8D55 A0 | lea edx,dword ptr ss:[ebp-60] |
005D0C6B | 52 | push edx |
005D0C6C | 68 EC804300 | push pc2am2_pro.4380EC | 4380EC:L"License"
005D0C71 | 8B45 08 | mov eax,dword ptr ss:[ebp+8] |
005D0C74 | 8B48 38 | mov ecx,dword ptr ds:[eax+38] |
005D0C77 | 8B55 08 | mov edx,dword ptr ss:[ebp+8] |
005D0C7A | 8B42 38 | mov eax,dword ptr ds:[edx+38] |
005D0C7D | 8B10 | mov edx,dword ptr ds:[eax] |
005D0C7F | 51 | push ecx |
005D0C80 | FF52 50 | call dword ptr ds:[edx+50] |
005D0C83 | DBE2 | fnclex |
005D0C85 | 8945 94 | mov dword ptr ss:[ebp-6C],eax |
005D0C88 | 837D 94 00 | cmp dword ptr ss:[ebp-6C],0 |
005D0C8C | 7D 20 | jge pc2am2_pro.5D0CAE |
005D0C8E | 6A 50 | push 50 |
005D0C90 | 68 A0EA4200 | push pc2am2_pro.42EAA0 |
005D0C95 | 8B45 08 | mov eax,dword ptr ss:[ebp+8] |
005D0C98 | 8B48 38 | mov ecx,dword ptr ds:[eax+38] |
005D0C9B | 51 | push ecx |
005D0C9C | 8B55 94 | mov edx,dword ptr ss:[ebp-6C] |
005D0C9F | 52 | push edx |
005D0CA0 | FF15 AC104000 | call dword ptr ds:[<&__vbaHresultCheckOb |
005D0CA6 | 8985 58FFFFFF | mov dword ptr ss:[ebp-A8],eax |
005D0CAC | EB 0A | jmp pc2am2_pro.5D0CB8 |
005D0CAE | C785 58FFFFFF 0000000 | mov dword ptr ss:[ebp-A8],0 |
005D0CB8 | C745 FC 06000000 | mov dword ptr ss:[ebp-4],6 |
005D0CBF | BA 008D4300 | mov edx,pc2am2_pro.438D00 | 438D00:L"Registration Success"==&L"lBar"發現一段註解
5D8418:",>n"==&L"oeiu-564-oqei-97"
假設
oeiu-564-oqei-97
為驗證碼輸入
oeiu-564-oqei-97
,並按下OK
斷點在
005D0CBF | BA 008D4300 | mov edx,pc2am2_pro.438D00 | 438D00:L"Registration Success"==&L"lBar"
F9
執行程式斷點在
005D1997 | BA 008D4300 | mov edx,pc2am2_pro.438D00 | 438D00:L"Registration Success"==&L"lBar"
F9
執行程式彈出註冊成功視窗
點擊
Help
,Registration
已經消失恭喜程式被註冊
註:運氣好使用字串搜尋,分析過程中看到自動註解的驗證碼。
開啟
PC2AM2_PRO.exe
於反匯編視窗點選右鍵選擇
搜尋(S)
->目前模組
->跨模組呼叫(I)
輸入常見的
VB``API
函數搜尋輸入全部過後只有
__vbaVarTstEq
和__vbaStrCmp
有被調用右鍵選擇
Set breakpoint on all commands
F9
執行程式F8
一步一步過- 步過到下方指令時
1
005BBFD9 | BA 98804300 | mov edx,pc2am2_pro.438098 | 438098:L"oeiu-564-oqei-97"
- 步過到下方指令時
發現一段註解
5D8418:",>n"==&L"oeiu-564-oqei-97"
假設
oeiu-564-oqei-97
為驗證碼
分析總結
oeiu-564-oqei-97
為驗證碼註:每一台電腦的驗證碼不盡相同。
注意事項
x64dbg
開啟PC2AM2_PRO.exe
,F9
執行程式,已終止,除錯停止。- 可能是因為
PC2AM2_PRO.exe
已經開啟的狀態,注意是否有重複開啟程式。
- 可能是因為
註冊過,移除重新安裝,依然是註冊狀態。
- 因
Key
已經寫入Windwos 註冊表
。
- 因
註:網路上有很多註冊表搜尋工具,可以參考RegScanner 2.31。
註:以上參考了
x64dbg
x64dbg’s documentation!
CSDN billvsme的专栏 的 OllyDbg 使用笔记 (九)