Like Share Discussion Bookmark Smile

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

x64dbg - 第二十五章 | 反匯編練習(十四)

前言

這篇延續上一篇x64dbg - 第二十四章 | 反匯編練習(十三),分析並使用查看調用堆疊。

目標程式

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


任務目標

  • 試用期限已過,破解註冊。

分析程式

  • 執行DVDMenuStudio.exe

  • 彈出Nag,顯示30 days left (還剩30天試用期)

  • 點擊Enter Reg.Code

  • 點擊OK

  • 彈出Please enter your name視窗

  • 輸入Name:123Serial Number:456Unlick Code:789

  • 點擊OK

  • 彈出Please check Serial Number....視窗

  • 輸入Name:123456789Serial Number:123456789Unlick Code:123456789

  • 點擊OK

  • 彈出The registration code seems to be not valid.Please check if you didn't made any mistake.視窗

  • 點擊Continue

  • 進入主程式

  • 點擊Help

  • 點擊About...

  • 彈出Registerd to: Unregistered

檢驗顯示是使用Microsoft Visual C++ 6.0編寫。


前置作業

  • 調整系統時間為一個月後
  • 執行DVDMenuStudio.exe
  • 彈出Nag顯示0 days left Please Register this copy (Click on But button to see how) (還剩0天請註冊此副本(點擊但按鈕查看方法))
  • 關閉程式
  • 還原系統時間
  • 執行DVDMenuStudio.exe
  • 依舊彈出Nag顯示0 days left Please Register this copy (Click on But button to see how) (還剩0天請註冊此副本(點擊但按鈕查看方法))

額外補充

  • push ebp 函數的入口點

搜尋思路

  • 根據堆疊的調用,判斷產生Nag視窗的函數位置

修改思路

  • 跳過產生Nag函數

實際分析

  • 開啟DVDMenuStudio.exe

  • F9執行程式

  • 主程式開啟

  • 彈出Nag視窗

  • 回到x64dbg

  • F12暫停(P)

  • 開啟呼叫堆疊視窗 (Alt + K)

  • 右鍵點選顯示可疑的呼叫堆疊

  • 發現有一個返回到004DC0D6

  • 右鍵點選跟隨目標(T)

  • 跳轉到004DC0D6 | 8B35 B8575E00 | mov esi,dword ptr ds:[<&SetTimer>] |

  • 向上觀察

    1
    2
    004DC0D1   | E8 77FD0C00           | call dvdmenustudio.5ABE4D                |
    004DC0D6 | 8B35 B8575E00 | mov esi,dword ptr ds:[<&SetTimer>] |
  • 004DC0D1設定中斷點

  • Ctrl + F2 重新啟動(S)

  • F9執行程式

  • 主程式開啟

  • 並未彈出Nag視窗

  • F8步過

  • 彈出Nag視窗

  • 這邊可以確認該Call為彈出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
    30
    31
    32
    33
    004DBD80   | 55                    | push ebp                                 |
    004DBD81 | 8BEC | mov ebp,esp |
    004DBD83 | 6A FF | push FFFFFFFF |
    004DBD85 | 68 17B85D00 | push dvdmenustudio.5DB817 |
    004DBD8A | 64:A1 00000000 | mov eax,dword ptr fs:[0] |
    004DBD90 | 50 | push eax |
    004DBD91 | 64:8925 00000000 | mov dword ptr fs:[0],esp |
    004DBD98 | 81EC 68010000 | sub esp,168 |
    004DBD9E | 8B45 08 | mov eax,dword ptr ss:[ebp+8] |
    004DBDA1 | 53 | push ebx |
    004DBDA2 | 56 | push esi |
    004DBDA3 | 57 | push edi |
    004DBDA4 | 83F8 01 | cmp eax,1 |
    004DBDA7 | 8BF9 | mov edi,ecx |
    004DBDA9 | 75 53 | jne dvdmenustudio.4DBDFE |
    004DBDAB | 50 | push eax |
    004DBDAC | 8B47 1C | mov eax,dword ptr ds:[edi+1C] |
    004DBDAF | 50 | push eax |
    004DBDB0 | FF15 B4575E00 | call dword ptr ds:[<&KillTimer>] |
    004DBDB6 | E8 8E5C0E00 | call dvdmenustudio.5C1A49 |
    004DBDBB | 8B40 04 | mov eax,dword ptr ds:[eax+4] |
    004DBDBE | 83B8 64010000 01 | cmp dword ptr ds:[eax+164],1 |
    004DBDC5 | 75 1F | jne dvdmenustudio.4DBDE6 |
    004DBDC7 | 8BCF | mov ecx,edi |
    004DBDC9 | E8 621C0000 | call dvdmenustudio.4DDA30 |
    004DBDCE | 8B4F 1C | mov ecx,dword ptr ds:[edi+1C] |
    004DBDD1 | 6A 00 | push 0 |
    004DBDD3 | 68 C8000000 | push C8 |
    004DBDD8 | 6A 07 | push 7 |
    004DBDDA | 51 | push ecx |
    004DBDDB | FF15 B8575E00 | call dword ptr ds:[<&SetTimer>] |
    004DBDE1 | E9 91040000 | jmp dvdmenustudio.4DC277 |
    004DBDE6 | 8B57 1C | mov edx,dword ptr ds:[edi+1C] |
  • 004DBD80設定中斷點

  • Ctrl + F2 重新啟動(S)

  • F9執行程式

  • F8一步一步過,並持續觀察

  • 持續修改寄存器

  • 會發現004DBDC5 | 75 1F | jne dvdmenustudio.4DBDE6 |跳轉未實現

  • 可跳過004DC0D1 | E8 77FD0C00 | call dvdmenustudio.5ABE4D |

  • 並正常開啟主程式


分析總結

  • 004DBDC5跳轉未實現即可跳過彈出Nag視窗

修改思路

  • 004DBDC5該段用NOP做填充。

實際修改

  • 開啟DVDMenuStudio.exe

  • 反匯編視窗中按下Ctrl + G輸入004DBDC5,會跳轉到004DBDC5位址

  • 004DBDC5按右鍵選擇二進位->用 NOP 填充 (Ctrl + 9)

  • F9執行

  • 直接開啟主程式

  • 未彈出Nag視窗

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

  • 點擊修補檔案(P)

  • 另存檔名DVDMenuStudio.crack.exe

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


註:以上參考了
x64dbg
x64dbg’s documentation!
CSDN billvsme的专栏OllyDbg 使用笔记 (十三)