J.J. Huang   2019-08-07   x64dbg   瀏覽次數:次  

x64dbg - 第十八章 | 反匯編練習(七)

📑 目錄
  1. 目標程式
  2. 程式簡介
  3. 前置作業
  4. 任務目標
  5. 分析程式
  6. 額外補充
  7. 搜尋思路
  8. 修改思路
  9. 實際分析
  10. 分析總結
  11. 修改思路
  12. 實際修改
  13. 實際驗證
  14. 額外分析
  15. 額外修改

目標程式

檔案下載:pcsurgeon.exe
解壓密碼:morosedog


程式簡介

PC Surgeon是診斷和修復Windows平台所需的強大工具。超過65種特性和功能,使你能夠診斷,監控和修復你的系統。


前置作業

下載目標程式並解壓縮,pcsurgeon.exe右鍵選擇內容->相容性->勾選以相容模式執行這個程式->選擇Windows XP (Service Pack 3)->勾選以系統管理員的身份執行此程式。​‌‌‌‌​​​​​‌‌​‌‌​​​‌‌​‌​​​‌‌​​‌​​​‌‌​​​‌​​‌‌​​‌‌‌​​‌​‌‌​‌​​‌‌​​‌​​​‌‌​​​​​​‌‌​​​‌​​‌‌‌​​‌​​‌‌​​​​​​‌‌‌​​​​​‌‌​​​​​​‌‌​‌‌‌​​‌​‌‌​‌​‌‌‌‌​​​​​‌‌​‌‌​​​‌‌​‌​​​‌‌​​‌​​​‌‌​​​‌​​‌‌​​‌‌‌​​‌​‌‌​‌​​‌‌​​​‌​​‌‌‌​​​

註:因為軟體老舊,所以用Windows XP來執行,方可正常開啟。


任務目標

  • 移除提示購買視窗(Nag)。
  • 移除驗證試用天數判斷。

分析程式

  • 開啟pcsurgeon.exe

  • 彈出視窗,下方顯示Cannot retrieve IP Info (無法檢索IP訊息)​‌‌‌‌​​​​​‌‌​‌‌​​​‌‌​‌​​​‌‌​​‌​​​‌‌​​​‌​​‌‌​​‌‌‌​​‌​‌‌​‌​​‌‌​​‌​​​‌‌​​​​​​‌‌​​​‌​​‌‌‌​​‌​​‌‌​​​​​​‌‌‌​​​​​‌‌​​​​​​‌‌​‌‌‌​​‌​‌‌​‌​‌‌‌‌​​​​​‌‌​‌‌​​​‌‌​‌​​​‌‌​​‌​​​‌‌​​​‌​​‌‌​​‌‌‌​​‌​‌‌​‌​​‌‌​​​‌​​‌‌‌​​​

    註:這個可能是因為Win7環境或是因為虛擬環境造成該軟體無法抓取IP的資訊,可以忽略。

  • 按下OK

  • 彈出視窗Register for only $20.00usd. You have 5 days remaining in your evaluation. (註冊只需$ 20.00usd。 你還有5天的試用時間。)​‌‌‌‌​​​​​‌‌​‌‌​​​‌‌​‌​​​‌‌​​‌​​​‌‌​​​‌​​‌‌​​‌‌‌​​‌​‌‌​‌​​‌‌​​‌​​​‌‌​​​​​​‌‌​​​‌​​‌‌‌​​‌​​‌‌​​​​​​‌‌‌​​​​​‌‌​​​​​​‌‌​‌‌‌​​‌​‌‌​‌​‌‌‌‌​​​​​‌‌​‌‌​​​‌‌​‌​​​‌‌​​‌​​​‌‌​​​‌​​‌‌​​‌‌‌​​‌​‌‌​‌​​‌‌​​​‌​​‌‌‌​​​

x64dbg - 第十八章 - 圖 1 (01)

  • 稍待片刻視窗會被關閉,並開啟主程式

x64dbg - 第十八章 - 圖 2 (02)

  • 注意到主程式標題PC Surgeon <unregistered - 5 days remaining..> (PC外科醫生<未註冊 - 剩餘5天..)
  • 點擊Help->About
  • 看到<Unregistered Version> (<未註冊版本>)

x64dbg - 第十八章 - 圖 3 (03)​‌‌‌‌​​​​​‌‌​‌‌​​​‌‌​‌​​​‌‌​​‌​​​‌‌​​​‌​​‌‌​​‌‌‌​​‌​‌‌​‌​​‌‌​​‌​​​‌‌​​​​​​‌‌​​​‌​​‌‌‌​​‌​​‌‌​​​​​​‌‌‌​​​​​‌‌​​​​​​‌‌​‌‌‌​​‌​‌‌​‌​‌‌‌‌​​​​​‌‌​‌‌​​​‌‌​‌​​​‌‌​​‌​​​‌‌​​​‌​​‌‌​​‌‌‌​​‌​‌‌​‌​​‌‌​​​‌​​‌‌‌​​​

  • 點擊Use Reg Key
  • 會要求輸入First NameLast NameRegistration Key來做註冊

x64dbg - 第十八章 - 圖 4 (04)

檢驗顯示是使用Borland Delphi 6.0 - 7.0編寫。

x64dbg - 第十八章 - 圖 5 (05)​‌‌‌‌​​​​​‌‌​‌‌​​​‌‌​‌​​​‌‌​​‌​​​‌‌​​​‌​​‌‌​​‌‌‌​​‌​‌‌​‌​​‌‌​​‌​​​‌‌​​​​​​‌‌​​​‌​​‌‌‌​​‌​​‌‌​​​​​​‌‌‌​​​​​‌‌​​​​​​‌‌​‌‌‌​​‌​‌‌​‌​‌‌‌‌​​​​​‌‌​‌‌​​​‌‌​‌​​​‌‌​​‌​​​‌‌​​​‌​​‌‌​​‌‌‌​​‌​‌‌​‌​​‌‌​​​‌​​‌‌‌​​​


額外補充

  • leamov的差異

    • lea傳遞變數位置
    • mov傳遞變數數值
  • fld st(0),dword ptr ds:[5CCA3C]

    • 5CCA3C的四個位元組浮點數值,存入st(0)
  • fsub st(0),qword ptr ds:[eax]​‌‌‌‌​​​​​‌‌​‌‌​​​‌‌​‌​​​‌‌​​‌​​​‌‌​​​‌​​‌‌​​‌‌‌​​‌​‌‌​‌​​‌‌​​‌​​​‌‌​​​​​​‌‌​​​‌​​‌‌‌​​‌​​‌‌​​​​​​‌‌‌​​​​​‌‌​​​​​​‌‌​‌‌‌​​‌​‌‌​‌​‌‌‌‌​​​​​‌‌​‌‌​​​‌‌​‌​​​‌‌​​‌​​​‌‌​​​‌​​‌‌​​‌‌‌​​‌​‌‌​‌​​‌‌​​​‌​​‌‌‌​​​

    • st(0)浮點數值 減去 eax的八個位元組浮點數值

搜尋思路

  • 使用搜尋字串找關鍵字。

    註:unregistered個跟About中的<Unregistered Version>


修改思路

  • 使用NOP填充替代彈出Nag的部分
  • 使用jmp跳過驗證的部分

實際分析

  • 開啟pcsurgeon.exe

  • 於反匯編視窗點選右鍵選擇搜尋(S)->目前模組->字串引用(S)​‌‌‌‌​​​​​‌‌​‌‌​​​‌‌​‌​​​‌‌​​‌​​​‌‌​​​‌​​‌‌​​‌‌‌​​‌​‌‌​‌​​‌‌​​‌​​​‌‌​​​​​​‌‌​​​‌​​‌‌‌​​‌​​‌‌​​​​​​‌‌‌​​​​​‌‌​​​​​​‌‌​‌‌‌​​‌​‌‌​‌​‌‌‌‌​​​​​‌‌​‌‌​​​‌‌​‌​​​‌‌​​‌​​​‌‌​​​‌​​‌‌​​‌‌‌​​‌​‌‌​‌​​‌‌​​​‌​​‌‌‌​​​

  • 搜尋輸入unregistered

  • 發現PC Surgeon <unregistered -,對其設定中斷點

  • F9執行程式​‌‌‌‌​​​​​‌‌​‌‌​​​‌‌​‌​​​‌‌​​‌​​​‌‌​​​‌​​‌‌​​‌‌‌​​‌​‌‌​‌​​‌‌​​‌​​​‌‌​​​​​​‌‌​​​‌​​‌‌‌​​‌​​‌‌​​​​​​‌‌‌​​​​​‌‌​​​​​​‌‌​‌‌‌​​‌​‌‌​‌​‌‌‌‌​​​​​‌‌​‌‌​​​‌‌​‌​​​‌‌​​‌​​​‌‌​​​‌​​‌‌​​‌‌‌​​‌​‌‌​‌​​‌‌​​​‌​​‌‌‌​​​

  • 彈出視窗,下方顯示Cannot retrieve IP Info (無法檢索IP訊息)

    註:該視窗就是忽略按下OK即可

  • 斷點005CC83C | 68 70CB5C00 | push pcsurgeon.5CCB70 | 5CCB70:"PC Surgeon <unregistered - "​‌‌‌‌​​​​​‌‌​‌‌​​​‌‌​‌​​​‌‌​​‌​​​‌‌​​​‌​​‌‌​​‌‌‌​​‌​‌‌​‌​​‌‌​​‌​​​‌‌​​​​​​‌‌​​​‌​​‌‌‌​​‌​​‌‌​​​​​​‌‌‌​​​​​‌‌​​​​​​‌‌​‌‌‌​​‌​‌‌​‌​‌‌‌‌​​​​​‌‌​‌‌​​​‌‌​‌​​​‌‌​​‌​​​‌‌​​​‌​​‌‌​​‌‌‌​​‌​‌‌​‌​​‌‌​​​‌​​‌‌‌​​​

  • F8一步一步過

  • 步過到下方指令時

    1
    005CC894 | FF92 EC000000         | call dword ptr ds:[edx+EC]            |
  • 彈出視窗Register for only $20.00usd. You have 5 days remaining in your evaluation. (註冊只需$ 20.00usd。 你還有5天的試用時間。)​‌‌‌‌​​​​​‌‌​‌‌​​​‌‌​‌​​​‌‌​​‌​​​‌‌​​​‌​​‌‌​​‌‌‌​​‌​‌‌​‌​​‌‌​​‌​​​‌‌​​​​​​‌‌​​​‌​​‌‌‌​​‌​​‌‌​​​​​​‌‌‌​​​​​‌‌​​​​​​‌‌​‌‌‌​​‌​‌‌​‌​‌‌‌‌​​​​​‌‌​‌‌​​​‌‌​‌​​​‌‌​​‌​​​‌‌​​​‌​​‌‌​​‌‌‌​​‌​‌‌​‌​​‌‌​​​‌​​‌‌‌​​​

  • 在此可以確認,這邊就是第一個Nag

  • 向上觀察會跳轉實現會跳過彈出訊息視窗的指令

    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
    005CC820 | A1 8CEB6000           | mov eax,dword ptr ds:[60EB8C]         |
    005CC825 | 8038 00 | cmp byte ptr ds:[eax],0 |
    005CC828 | 0F85 07010000 | jne pcsurgeon.5CC935 |
    005CC82E | A1 DCF16000 | mov eax,dword ptr ds:[60F1DC] |
    005CC833 | 8038 00 | cmp byte ptr ds:[eax],0 |
    005CC836 | 0F85 F9000000 | jne pcsurgeon.5CC935 |
    005CC83C | 68 70CB5C00 | push pcsurgeon.5CCB70 | 5CCB70:"PC Surgeon <unregistered - "
    005CC841 | D905 3CCA5C00 | fld st(0),dword ptr ds:[5CCA3C] |
    005CC847 | A1 8CEC6000 | mov eax,dword ptr ds:[60EC8C] |
    005CC84C | DC20 | fsub st(0),qword ptr ds:[eax] |
    005CC84E | 83C4 F4 | add esp,FFFFFFF4 |
    005CC851 | DB3C24 | fstp tword ptr ss:[esp],st(0) |
    005CC854 | 9B | fwait |
    005CC855 | 8D55 E4 | lea edx,dword ptr ss:[ebp-1C] | [ebp-1C]:L"5"
    005CC858 | B8 94CB5C00 | mov eax,pcsurgeon.5CCB94 | 5CCB94:L"0"
    005CC85D | E8 42FAE3FF | call pcsurgeon.40C2A4 |
    005CC862 | FF75 E4 | push dword ptr ss:[ebp-1C] | [ebp-1C]:L"5"
    005CC865 | 68 A0CB5C00 | push pcsurgeon.5CCBA0 | 5CCBA0:" days remaining..>"
    005CC86A | 8D45 E8 | lea eax,dword ptr ss:[ebp-18] | [ebp-18]:"PC Surgeon <unregistered - 5 days remaining..>"
    005CC86D | BA 03000000 | mov edx,3 |
    005CC872 | E8 A98AE3FF | call pcsurgeon.405320 |
    005CC877 | 8B55 E8 | mov edx,dword ptr ss:[ebp-18] | [ebp-18]:"PC Surgeon <unregistered - 5 days remaining..>"
    005CC87A | 8B45 FC | mov eax,dword ptr ss:[ebp-4] |
    005CC87D | E8 22D5EAFF | call pcsurgeon.479DA4 |
    005CC882 | 8B45 FC | mov eax,dword ptr ss:[ebp-4] |
    005CC885 | 8B80 20120000 | mov eax,dword ptr ds:[eax+1220] |
    005CC88B | C680 20030000 01 | mov byte ptr ds:[eax+320],1 |
    005CC892 | 8B10 | mov edx,dword ptr ds:[eax] |
    005CC894 | FF92 EC000000 | call dword ptr ds:[edx+EC] |
  • 005CC828 | 0F85 07010000 | jne pcsurgeon.5CC935 |005CC836 | 0F85 F9000000 | jne pcsurgeon.5CC935 |會跳轉過彈出Nag​‌‌‌‌​​​​​‌‌​‌‌​​​‌‌​‌​​​‌‌​​‌​​​‌‌​​​‌​​‌‌​​‌‌‌​​‌​‌‌​‌​​‌‌​​‌​​​‌‌​​​​​​‌‌​​​‌​​‌‌‌​​‌​​‌‌​​​​​​‌‌‌​​​​​‌‌​​​​​​‌‌​‌‌‌​​‌​‌‌​‌​‌‌‌‌​​​​​‌‌​‌‌​​​‌‌​‌​​​‌‌​​‌​​​‌‌​​​‌​​‌‌​​‌‌‌​​‌​‌‌​‌​​‌‌​​​‌​​‌‌‌​​​

  • 005CC828005CC836設定中斷點,並移除其他中斷點

  • Ctrl + F2重新啟動(S)

  • F9執行程式​‌‌‌‌​​​​​‌‌​‌‌​​​‌‌​‌​​​‌‌​​‌​​​‌‌​​​‌​​‌‌​​‌‌‌​​‌​‌‌​‌​​‌‌​​‌​​​‌‌​​​​​​‌‌​​​‌​​‌‌‌​​‌​​‌‌​​​​​​‌‌‌​​​​​‌‌​​​​​​‌‌​‌‌‌​​‌​‌‌​‌​‌‌‌‌​​​​​‌‌​‌‌​​​‌‌​‌​​​‌‌​​‌​​​‌‌​​​‌​​‌‌​​‌‌‌​​‌​‌‌​‌​​‌‌​​​‌​​‌‌‌​​​

  • 斷點在005CC828 | 0F85 07010000 | jne pcsurgeon.5CC935 |跳轉未實現

  • jne跳轉未實現為ZF=1,我們將其修改為ZF=0

  • F9執行程式​‌‌‌‌​​​​​‌‌​‌‌​​​‌‌​‌​​​‌‌​​‌​​​‌‌​​​‌​​‌‌​​‌‌‌​​‌​‌‌​‌​​‌‌​​‌​​​‌‌​​​​​​‌‌​​​‌​​‌‌‌​​‌​​‌‌​​​​​​‌‌‌​​​​​‌‌​​​​​​‌‌​‌‌‌​​‌​‌‌​‌​‌‌‌‌​​​​​‌‌​‌‌​​​‌‌​‌​​​‌‌​​‌​​​‌‌​​​‌​​‌‌​​‌‌‌​​‌​‌‌​‌​​‌‌​​​‌​​‌‌‌​​​

  • 主程式直接開啟,標體無試用版的標示

  • 在此可以確認5CC935位址為開啟主程式


  • 移除005CC828中斷點​‌‌‌‌​​​​​‌‌​‌‌​​​‌‌​‌​​​‌‌​​‌​​​‌‌​​​‌​​‌‌​​‌‌‌​​‌​‌‌​‌​​‌‌​​‌​​​‌‌​​​​​​‌‌​​​‌​​‌‌‌​​‌​​‌‌​​​​​​‌‌‌​​​​​‌‌​​​​​​‌‌​‌‌‌​​‌​‌‌​‌​‌‌‌‌​​​​​‌‌​‌‌​​​‌‌​‌​​​‌‌​​‌​​​‌‌​​​‌​​‌‌​​‌‌‌​​‌​‌‌​‌​​‌‌​​​‌​​‌‌‌​​​

  • Ctrl + F2重新啟動(S)

  • F9執行程式

  • 斷點在005CC836 | 0F85 F9000000 | jne pcsurgeon.5CC935 |跳轉未實現​‌‌‌‌​​​​​‌‌​‌‌​​​‌‌​‌​​​‌‌​​‌​​​‌‌​​​‌​​‌‌​​‌‌‌​​‌​‌‌​‌​​‌‌​​‌​​​‌‌​​​​​​‌‌​​​‌​​‌‌‌​​‌​​‌‌​​​​​​‌‌‌​​​​​‌‌​​​​​​‌‌​‌‌‌​​‌​‌‌​‌​‌‌‌‌​​​​​‌‌​‌‌​​​‌‌​‌​​​‌‌​​‌​​​‌‌​​​‌​​‌‌​​‌‌‌​​‌​‌‌​‌​​‌‌​​​‌​​‌‌‌​​​

  • jne跳轉未實現為ZF=1,我們將其修改為ZF=0

  • F9執行程式

  • 主程式直接開啟,標體無試用版的標示​‌‌‌‌​​​​​‌‌​‌‌​​​‌‌​‌​​​‌‌​​‌​​​‌‌​​​‌​​‌‌​​‌‌‌​​‌​‌‌​‌​​‌‌​​‌​​​‌‌​​​​​​‌‌​​​‌​​‌‌‌​​‌​​‌‌​​​​​​‌‌‌​​​​​‌‌​​​​​​‌‌​‌‌‌​​‌​‌‌​‌​‌‌‌‌​​​​​‌‌​‌‌​​​‌‌​‌​​​‌‌​​‌​​​‌‌​​​‌​​‌‌​​‌‌‌​​‌​‌‌​‌​​‌‌​​​‌​​‌‌‌​​​

  • 在此可以確認再次5CC935位址為開啟主程式


  • 移除所有中斷點

  • 於反匯編視窗點選右鍵選擇搜尋(S)->目前模組->字串引用(S)​‌‌‌‌​​​​​‌‌​‌‌​​​‌‌​‌​​​‌‌​​‌​​​‌‌​​​‌​​‌‌​​‌‌‌​​‌​‌‌​‌​​‌‌​​‌​​​‌‌​​​​​​‌‌​​​‌​​‌‌‌​​‌​​‌‌​​​​​​‌‌‌​​​​​‌‌​​​​​​‌‌​‌‌‌​​‌​‌‌​‌​‌‌‌‌​​​​​‌‌​‌‌​​​‌‌​‌​​​‌‌​​‌​​​‌‌​​​‌​​‌‌​​‌‌‌​​‌​‌‌​‌​​‌‌​​​‌​​‌‌‌​​​

  • 搜尋輸入unregistered

  • 發現<Unregistered Version>,對其設定中斷點

  • F9執行程式​‌‌‌‌​​​​​‌‌​‌‌​​​‌‌​‌​​​‌‌​​‌​​​‌‌​​​‌​​‌‌​​‌‌‌​​‌​‌‌​‌​​‌‌​​‌​​​‌‌​​​​​​‌‌​​​‌​​‌‌‌​​‌​​‌‌​​​​​​‌‌‌​​​​​‌‌​​​​​​‌‌​‌‌‌​​‌​‌‌​‌​‌‌‌‌​​​​​‌‌​‌‌​​​‌‌​‌​​​‌‌​​‌​​​‌‌​​​‌​​‌‌​​‌‌‌​​‌​‌‌​‌​​‌‌​​​‌​​‌‌‌​​​

  • 開啟主程式點擊Help->About

  • 斷點0056247B | BA B8265600 | mov edx,pcsurgeon.5626B8 | 5626B8:"<Unregistered Version>"

  • 向上觀察會跳轉實現會跳過<Unregistered Version>訊息準備的指令​‌‌‌‌​​​​​‌‌​‌‌​​​‌‌​‌​​​‌‌​​‌​​​‌‌​​​‌​​‌‌​​‌‌‌​​‌​‌‌​‌​​‌‌​​‌​​​‌‌​​​​​​‌‌​​​‌​​‌‌‌​​‌​​‌‌​​​​​​‌‌‌​​​​​‌‌​​​​​​‌‌​‌‌‌​​‌​‌‌​‌​‌‌‌‌​​​​​‌‌​‌‌​​​‌‌​‌​​​‌‌​​‌​​​‌‌​​​‌​​‌‌​​‌‌‌​​‌​‌‌​‌​​‌‌​​​‌​​‌‌‌​​​

    1
    2
    3
    4
    5
    6
    7
    8
    0056245E | A1 8CEB6000           | mov eax,dword ptr ds:[60EB8C]         | eax:"擊C"
    00562463 | 8038 00 | cmp byte ptr ds:[eax],0 | eax:"擊C"
    00562466 | 75 22 | jne pcsurgeon.56248A |
    00562468 | 8B83 08030000 | mov eax,dword ptr ds:[ebx+308] | eax:"擊C"
    0056246E | B2 01 | mov dl,1 |
    00562470 | E8 1F78F1FF | call pcsurgeon.479C94 |
    00562475 | 8B83 24030000 | mov eax,dword ptr ds:[ebx+324] | eax:"擊C", [ebx+324]:"擊C"
    0056247B | BA B8265600 | mov edx,pcsurgeon.5626B8 | 5626B8:"<Unregistered Version>"
  • 00562466 | 75 22 | jne pcsurgeon.56248A |會跳過訊息準備的指令

  • 00562466設定中斷點,並移除其他中斷點

  • Ctrl + F2重新啟動(S)​‌‌‌‌​​​​​‌‌​‌‌​​​‌‌​‌​​​‌‌​​‌​​​‌‌​​​‌​​‌‌​​‌‌‌​​‌​‌‌​‌​​‌‌​​‌​​​‌‌​​​​​​‌‌​​​‌​​‌‌‌​​‌​​‌‌​​​​​​‌‌‌​​​​​‌‌​​​​​​‌‌​‌‌‌​​‌​‌‌​‌​‌‌‌‌​​​​​‌‌​‌‌​​​‌‌​‌​​​‌‌​​‌​​​‌‌​​​‌​​‌‌​​‌‌‌​​‌​‌‌​‌​​‌‌​​​‌​​‌‌‌​​​

  • F9執行程式

  • 開啟主程式點擊Help->About

  • 斷點在00562466 | 75 22 | jne pcsurgeon.56248A |跳轉未實現​‌‌‌‌​​​​​‌‌​‌‌​​​‌‌​‌​​​‌‌​​‌​​​‌‌​​​‌​​‌‌​​‌‌‌​​‌​‌‌​‌​​‌‌​​‌​​​‌‌​​​​​​‌‌​​​‌​​‌‌‌​​‌​​‌‌​​​​​​‌‌‌​​​​​‌‌​​​​​​‌‌​‌‌‌​​‌​‌‌​‌​‌‌‌‌​​​​​‌‌​‌‌​​​‌‌​‌​​​‌‌​​‌​​​‌‌​​​‌​​‌‌​​‌‌‌​​‌​‌‌​‌​​‌‌​​​‌​​‌‌‌​​​

  • jne跳轉未實現為ZF=1,我們將其修改為ZF=0

  • F9執行程式

  • About視窗開啟,顯示Licensed Version. Do Not Copy! (許可版本。 不要抄襲!)​‌‌‌‌​​​​​‌‌​‌‌​​​‌‌​‌​​​‌‌​​‌​​​‌‌​​​‌​​‌‌​​‌‌‌​​‌​‌‌​‌​​‌‌​​‌​​​‌‌​​​​​​‌‌​​​‌​​‌‌‌​​‌​​‌‌​​​​​​‌‌‌​​​​​‌‌​​​​​​‌‌​‌‌‌​​‌​‌‌​‌​‌‌‌‌​​​​​‌‌​‌‌​​​‌‌​‌​​​‌‌​​‌​​​‌‌​​​‌​​‌‌​​‌‌‌​​‌​‌‌​‌​​‌‌​​​‌​​‌‌‌​​​

  • 在此可以確認00562466位址跳過試用版訊息準備


分析總結

  • 005CC828005CC836位址判斷是否為註冊版,決定是否要跳轉005CC935位址開啟主程式
  • 00562466位址跳過試用版訊息準備

修改思路

根據分析總結

  • 使用jmp直接跳轉實現到主程式直接開啟。
  • 使用jmp直接跳轉實現過About訊息準備。

實際修改

  • 開啟pcsurgeon.exe​‌‌‌‌​​​​​‌‌​‌‌​​​‌‌​‌​​​‌‌​​‌​​​‌‌​​​‌​​‌‌​​‌‌‌​​‌​‌‌​‌​​‌‌​​‌​​​‌‌​​​​​​‌‌​​​‌​​‌‌‌​​‌​​‌‌​​​​​​‌‌‌​​​​​‌‌​​​​​​‌‌​‌‌‌​​‌​‌‌​‌​‌‌‌‌​​​​​‌‌​‌‌​​​‌‌​‌​​​‌‌​​‌​​​‌‌​​​‌​​‌‌​​‌‌‌​​‌​‌‌​‌​​‌‌​​​‌​​‌‌‌​​​

  • 005CC828 | 0F85 07010000 | jne pcsurgeon.5CC935 |按下空白鍵

  • 將指令修改為jmp 0x005CC935,按下確定

  • 修改後如下​‌‌‌‌​​​​​‌‌​‌‌​​​‌‌​‌​​​‌‌​​‌​​​‌‌​​​‌​​‌‌​​‌‌‌​​‌​‌‌​‌​​‌‌​​‌​​​‌‌​​​​​​‌‌​​​‌​​‌‌‌​​‌​​‌‌​​​​​​‌‌‌​​​​​‌‌​​​​​​‌‌​‌‌‌​​‌​‌‌​‌​‌‌‌‌​​​​​‌‌​‌‌​​​‌‌​‌​​​‌‌​​‌​​​‌‌​​​‌​​‌‌​​‌‌‌​​‌​‌‌​‌​​‌‌​​​‌​​‌‌‌​​​

    1
    2
    3
    4
    // 修改前
    005CC828 | 0F85 07010000 | jne pcsurgeon.5CC935 |
    // 修改後
    005CC828 | E9 08010000 | jmp pcsurgeon.5CC935 |
  • 00562466 | 75 22 | jne pcsurgeon.56248A |按下空白鍵

  • 將指令修改為jmp 0x0056248A,按下確定

  • 修改後如下​‌‌‌‌​​​​​‌‌​‌‌​​​‌‌​‌​​​‌‌​​‌​​​‌‌​​​‌​​‌‌​​‌‌‌​​‌​‌‌​‌​​‌‌​​‌​​​‌‌​​​​​​‌‌​​​‌​​‌‌‌​​‌​​‌‌​​​​​​‌‌‌​​​​​‌‌​​​​​​‌‌​‌‌‌​​‌​‌‌​‌​‌‌‌‌​​​​​‌‌​‌‌​​​‌‌​‌​​​‌‌​​‌​​​‌‌​​​‌​​‌‌​​‌‌‌​​‌​‌‌​‌​​‌‌​​​‌​​‌‌‌​​​

    1
    2
    3
    4
    // 修改前
    00562466 | 75 22 | jne pcsurgeon.56248A |
    // 修改後
    00562466 | EB 22 | jmp pcsurgeon.56248A |
  • 點擊修補程式 或是快捷鍵Ctrl + P

  • 點擊修補檔案(P)

  • 另存檔名pcsurgeon.crack.exe​‌‌‌‌​​​​​‌‌​‌‌​​​‌‌​‌​​​‌‌​​‌​​​‌‌​​​‌​​‌‌​​‌‌‌​​‌​‌‌​‌​​‌‌​​‌​​​‌‌​​​​​​‌‌​​​‌​​‌‌‌​​‌​​‌‌​​​​​​‌‌‌​​​​​‌‌​​​​​​‌‌​‌‌‌​​‌​‌‌​‌​‌‌‌‌​​​​​‌‌​‌‌​​​‌‌​‌​​​‌‌​​‌​​​‌‌​​​‌​​‌‌​​‌‌‌​​‌​‌‌​‌​​‌‌​​​‌​​‌‌‌​​​

  • 恭喜補丁產生pcsurgeon.crack.exe

註:開啟新的補丁.exe不要忘記設定相容性和管理員執行。


實際驗證

  • 開啟pcsurgeon.crack.exe
  • 直接開啟主程式,標題無試用天數,成功破解
  • 開啟About,顯示Licensed Version. Do Not Copy! (許可版本。 不要抄襲!),成功破解

額外分析

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// 跳轉`Nag`部分指令
005CC820 | A1 8CEB6000 | mov eax,dword ptr ds:[60EB8C] |
005CC825 | 8038 00 | cmp byte ptr ds:[eax],0 |
005CC828 | 0F85 07010000 | jne pcsurgeon.5CC935 |
005CC82E | A1 DCF16000 | mov eax,dword ptr ds:[60F1DC] |
005CC833 | 8038 00 | cmp byte ptr ds:[eax],0 |
005CC836 | 0F85 F9000000 | jne pcsurgeon.5CC935 |
005CC83C | 68 70CB5C00 | push pcsurgeon.5CCB70 | 5CCB70:"PC Surgeon

// 準備`About`訊息部分指令
0056245E | A1 8CEB6000 | mov eax,dword ptr ds:[60EB8C] | eax:"擊C"
00562463 | 8038 00 | cmp byte ptr ds:[eax],0 | eax:"擊C"
00562466 | 75 22 | jne pcsurgeon.56248A |
00562468 | 8B83 08030000 | mov eax,dword ptr ds:[ebx+308] | eax:"擊C"
0056246E | B2 01 | mov dl,1 |
00562470 | E8 1F78F1FF | call pcsurgeon.479C94 |
00562475 | 8B83 24030000 | mov eax,dword ptr ds:[ebx+324] | eax:"擊C", [ebx+324]:"擊C"
0056247B | BA B8265600 | mov edx,pcsurgeon.5626B8 | 5626B8:"<Unregistered Version>"
  • 可見cmp關鍵的eax值都是由0060EB8C位址取得​‌‌‌‌​​​​​‌‌​‌‌​​​‌‌​‌​​​‌‌​​‌​​​‌‌​​​‌​​‌‌​​‌‌‌​​‌​‌‌​‌​​‌‌​​‌​​​‌‌​​​​​​‌‌​​​‌​​‌‌‌​​‌​​‌‌​​​​​​‌‌‌​​​​​‌‌​​​​​​‌‌​‌‌‌​​‌​‌‌​‌​‌‌‌‌​​​​​‌‌​‌‌​​​‌‌​‌​​​‌‌​​‌​​​‌‌​​​‌​​‌‌​​‌‌‌​​‌​‌‌​‌​​‌‌​​​‌​​‌‌‌​​​

  • 條件為eax=0為試用版

  • 005CC820 | A1 8CEB6000 | mov eax,dword ptr ds:[60EB8C] |右鍵選擇尋找參考(R)->位址: 60EB8C

  • 可見以下位址參考​‌‌‌‌​​​​​‌‌​‌‌​​​‌‌​‌​​​‌‌​​‌​​​‌‌​​​‌​​‌‌​​‌‌‌​​‌​‌‌​‌​​‌‌​​‌​​​‌‌​​​​​​‌‌​​​‌​​‌‌‌​​‌​​‌‌​​​​​​‌‌‌​​​​​‌‌​​​​​​‌‌​‌‌‌​​‌​‌‌​‌​‌‌‌‌​​​​​‌‌​‌‌​​​‌‌​‌​​​‌‌​​‌​​​‌‌​​​‌​​‌‌​​‌‌‌​​‌​‌‌​‌​​‌‌​​​‌​​‌‌‌​​​

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    位址       反組譯                          
    0050B6F4 mov eax,dword ptr ds:[60EB8C]
    0056245E mov eax,dword ptr ds:[60EB8C]
    005B44B3 mov eax,dword ptr ds:[60EB8C]
    005C2BF6 mov edx,dword ptr ds:[60EB8C]
    005C2BFE mov eax,dword ptr ds:[60EB8C]
    005C2E68 mov edx,dword ptr ds:[60EB8C]
    005CC748 mov eax,dword ptr ds:[60EB8C]
    005CC7D6 mov eax,dword ptr ds:[60EB8C]
    005CC820 mov eax,dword ptr ds:[60EB8C]
    005CCC49 mov eax,dword ptr ds:[60EB8C]
    005CCCCB mov eax,dword ptr ds:[60EB8C]
  • 右鍵選擇Set breakpoint on all commands (在所有命令上設置斷點)

  • Ctrl + F2重新啟動(S)

  • F9執行程式​‌‌‌‌​​​​​‌‌​‌‌​​​‌‌​‌​​​‌‌​​‌​​​‌‌​​​‌​​‌‌​​‌‌‌​​‌​‌‌​‌​​‌‌​​‌​​​‌‌​​​​​​‌‌​​​‌​​‌‌‌​​‌​​‌‌​​​​​​‌‌‌​​​​​‌‌​​​​​​‌‌​‌‌‌​​‌​‌‌​‌​‌‌‌‌​​​​​‌‌​‌‌​​​‌‌​‌​​​‌‌​​‌​​​‌‌​​​‌​​‌‌​​‌‌‌​​‌​‌‌​‌​​‌‌​​​‌​​‌‌‌​​​

  • 斷點005C2BF6 | 8B15 8CEB6000 | mov edx,dword ptr ds:[60EB8C] |

  • 向下觀察

    1
    2
    3
    4
    005C2BF6 | 8B15 8CEB6000         | mov edx,dword ptr ds:[60EB8C]            |
    005C2BFC | 8802 | mov byte ptr ds:[edx],al |
    005C2BFE | A1 8CEB6000 | mov eax,dword ptr ds:[60EB8C] |
    005C2C03 | 8038 00 | cmp byte ptr ds:[eax],0 |
  • mov byte ptr ds:[edx],al在賦值​‌‌‌‌​​​​​‌‌​‌‌​​​‌‌​‌​​​‌‌​​‌​​​‌‌​​​‌​​‌‌​​‌‌‌​​‌​‌‌​‌​​‌‌​​‌​​​‌‌​​​​​​‌‌​​​‌​​‌‌‌​​‌​​‌‌​​​​​​‌‌‌​​​​​‌‌​​​​​​‌‌​‌‌‌​​‌​‌‌​‌​‌‌‌‌​​​​​‌‌​‌‌​​​‌‌​‌​​​‌‌​​‌​​​‌‌​​​‌​​‌‌​​‌‌‌​​‌​‌‌​‌​​‌‌​​​‌​​‌‌‌​​​

  • cmp byte ptr ds:[eax],0判斷

  • 兩個皆嘗試

  • 第一個嘗試​‌‌‌‌​​​​​‌‌​‌‌​​​‌‌​‌​​​‌‌​​‌​​​‌‌​​​‌​​‌‌​​‌‌‌​​‌​‌‌​‌​​‌‌​​‌​​​‌‌​​​​​​‌‌​​​‌​​‌‌‌​​‌​​‌‌​​​​​​‌‌‌​​​​​‌‌​​​​​​‌‌​‌‌‌​​‌​‌‌​‌​‌‌‌‌​​​​​‌‌​‌‌​​​‌‌​‌​​​‌‌​​‌​​​‌‌​​​‌​​‌‌​​‌‌‌​​‌​‌‌​‌​​‌‌​​​‌​​‌‌‌​​​

    1
    2
    3
    4
    5
    6
    7
    8
    // 修改前
    005C2BFC | 8802 | mov byte ptr ds:[edx],al |
    // 修改後
    005C2BFC | C602 01 | mov byte ptr ds:[edx],1 |
    005C2BFF | 90 | nop |
    005C2C00 | 90 | nop |
    005C2C01 | 90 | nop |
    005C2C02 | 90 | nop |
  • 移除所有斷點

  • Ctrl + F2重新啟動(S)

  • F9執行程式​‌‌‌‌​​​​​‌‌​‌‌​​​‌‌​‌​​​‌‌​​‌​​​‌‌​​​‌​​‌‌​​‌‌‌​​‌​‌‌​‌​​‌‌​​‌​​​‌‌​​​​​​‌‌​​​‌​​‌‌‌​​‌​​‌‌​​​​​​‌‌‌​​​​​‌‌​​​​​​‌‌​‌‌‌​​‌​‌‌​‌​‌‌‌‌​​​​​‌‌​‌‌​​​‌‌​‌​​​‌‌​​‌​​​‌‌​​​‌​​‌‌​​‌‌‌​​‌​‌‌​‌​​‌‌​​​‌​​‌‌‌​​​

  • 直接開啟主程式,標題無試用天數,成功破解

  • 開啟About,顯示Licensed Version. Do Not Copy! (許可版本。 不要抄襲!),成功破解


  • 第二個嘗試
    1
    2
    3
    4
    // 修改前
    005C2C03 | 8038 00 | cmp byte ptr ds:[eax],0 |
    // 修改後
    005C2C03 | 8038 01 | cmp byte ptr ds:[eax],1 |
  • Ctrl + F2重新啟動(S)
  • F9執行程式
  • 彈出視窗Register for only $20.00usd. You have 15 days remaining in your evaluation. (註冊只需$ 20.00usd。 你還有15天的試用時間。)
  • 主程式,標題試用天數15天
  • 開啟About,顯示<Unregistered Version> (<未註冊版本>)

額外修改

  • 開啟pcsurgeon.exe​‌‌‌‌​​​​​‌‌​‌‌​​​‌‌​‌​​​‌‌​​‌​​​‌‌​​​‌​​‌‌​​‌‌‌​​‌​‌‌​‌​​‌‌​​‌​​​‌‌​​​​​​‌‌​​​‌​​‌‌‌​​‌​​‌‌​​​​​​‌‌‌​​​​​‌‌​​​​​​‌‌​‌‌‌​​‌​‌‌​‌​‌‌‌‌​​​​​‌‌​‌‌​​​‌‌​‌​​​‌‌​​‌​​​‌‌​​​‌​​‌‌​​‌‌‌​​‌​‌‌​‌​​‌‌​​​‌​​‌‌‌​​​

  • 005C2BFC | 8802 | mov byte ptr ds:[edx],al |按下空白鍵

  • 將指令修改為mov byte ptr ds:[edx], 0x1,按下確定

    註:記得勾選使用 NOPs 填充(F)​‌‌‌‌​​​​​‌‌​‌‌​​​‌‌​‌​​​‌‌​​‌​​​‌‌​​​‌​​‌‌​​‌‌‌​​‌​‌‌​‌​​‌‌​​‌​​​‌‌​​​​​​‌‌​​​‌​​‌‌‌​​‌​​‌‌​​​​​​‌‌‌​​​​​‌‌​​​​​​‌‌​‌‌‌​​‌​‌‌​‌​‌‌‌‌​​​​​‌‌​‌‌​​​‌‌​‌​​​‌‌​​‌​​​‌‌​​​‌​​‌‌​​‌‌‌​​‌​‌‌​‌​​‌‌​​​‌​​‌‌‌​​​

  • 修改後如下
    // 修改前
    005C2BFC | 8802 | mov byte ptr ds:[edx],al |
    // 修改後
    005C2BFC | C602 01 | mov byte ptr ds:[edx],1 |
    005C2BFF | 90 | nop |
    005C2C00 | 90 | nop |
    005C2C01 | 90 | nop |
    005C2C02 | 90 | nop |

  • 點擊修補程式 或是快捷鍵Ctrl + P

  • 點擊修補檔案(P)​‌‌‌‌​​​​​‌‌​‌‌​​​‌‌​‌​​​‌‌​​‌​​​‌‌​​​‌​​‌‌​​‌‌‌​​‌​‌‌​‌​​‌‌​​‌​​​‌‌​​​​​​‌‌​​​‌​​‌‌‌​​‌​​‌‌​​​​​​‌‌‌​​​​​‌‌​​​​​​‌‌​‌‌‌​​‌​‌‌​‌​‌‌‌‌​​​​​‌‌​‌‌​​​‌‌​‌​​​‌‌​​‌​​​‌‌​​​‌​​‌‌​​‌‌‌​​‌​‌‌​‌​​‌‌​​​‌​​‌‌‌​​​

    註:這邊會有需要重定位的問題,點擊Yes即可

  • 另存檔名pcsurgeon.crack.exe

  • 恭喜補丁產生pcsurgeon.crack.exe​‌‌‌‌​​​​​‌‌​‌‌​​​‌‌​‌​​​‌‌​​‌​​​‌‌​​​‌​​‌‌​​‌‌‌​​‌​‌‌​‌​​‌‌​​‌​​​‌‌​​​​​​‌‌​​​‌​​‌‌‌​​‌​​‌‌​​​​​​‌‌‌​​​​​‌‌​​​​​​‌‌​‌‌‌​​‌​‌‌​‌​‌‌‌‌​​​​​‌‌​‌‌​​​‌‌​‌​​​‌‌​​‌​​​‌‌​​​‌​​‌‌​​‌‌‌​​‌​‌‌​‌​​‌‌​​​‌​​‌‌‌​​​

註:開啟新的補丁.exe不要忘記設定相容性和管理員執行。


註:以上參考了
x64dbg
x64dbg’s documentation!
CSDN billvsme的专栏OllyDbg 使用笔记 (七)
知乎汇编语言–x86汇编指令集大全