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
 35- 005D0C44 | 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 使用笔记 (九)

 
		