Like Share Discussion Bookmark Smile

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

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

目標程式

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


程式簡介

PixtopianBook是面向各行各業用戶的理想個人訊息管理器(PIM)。它具有內置的電子郵件功能,便捷的電話撥號器,以及強大的生產力功能。它完全可定制,以滿足你的個人喜好和獨特的個性。PixtopianBook的設計具有友好的用戶界面和基本功能,是必須更快,更輕鬆地完成工作的工具!完整功能列表

  • 用戶友好界面
  • 配置文件管理
  • 一鍵式撥號和一鍵式電子郵件電子郵件到所有組
  • 密碼保護
  • 生日提醒
  • 電話撥號器
  • 重撥繁忙
  • 非常容易使用
  • 名片打印功能
  • 係統資源高效
  • 輕鬆定制的
  • 競爭性定價
  • 免費電子郵件支持

前置作業

  • 使用管理者權限安裝
  • 一路Next到底


任務目標

  • 移除程式新增成員限制、新增群組限制。
  • 移除或修改未註冊字樣。

分析程式

  • 開啟PixtopianBook.exe
  • 會要求你建立一個使用者,用於存放profile

  • 要你選擇使用者
  • 勾選左下角的Do not show this dialog next time.
  • 按下LogIn

  • 新增聯絡人

  • 新增到第四位後,要新增第五位時彈出You've reached the limit of 4 entries per group. Please register PixtopianBook today!

  • 新增群組

  • 新增到第三組後,要新增第四組時彈出You've reached the limit of 3 groups. Please register PixtopianBook today!

  • 看到標題欄內有UNREGISTERED VERSION字眼

  • 點擊Help->About PixtopianBook...

  • 彈出視窗底下也有unregistered version v1.0.7

  • 主程式中提示區塊也有This is an unregistered version of PoxtopianBook. Please register today!

  • 簡單來說,就是要你趕快花錢註冊

檢驗顯示是使用Microsoft Visual C++ v6.0編寫。


搜尋思路

  • 使用搜尋字串找關鍵字。
  • 暫停 + 執行到使用者代碼(Alt +F9)

修改思路

  • 移除或是跳過驗證。
  • 搜尋字串找關鍵字,修改未註冊字樣。

實際分析

  • 開啟C:\Program Files (x86)\PixtopianBook\PixtopianBook.exe
  • F9執行程式
  • 會發現x64dbg暫停了,主程式沒有被開啟
  • 看到左下角有提示訊息First chance exception on 7576C41F (E06D7363, CPP_EH_EXCEPTION)!
  • 解決方式請參考x64dbg - 第二章 | 認識x64dbg偏好設定,新增忽略異常範圍。

  • Ctrl + F2重新啟動(S)

  • F9執行程式

  • 主程式正常啟動

  • Add新增聯絡人 (內容都不填寫)

  • 新增到第四位後,要新增第五位時彈出You've reached the limit of 4 entries per group. Please register PixtopianBook today!

  • 回到x64dbg

  • F12暫停(P)

  • 注意標題,領空變成user32.dll

  • Alt + F9執行到使用者代碼(U)

  • 左下角由暫停變成執行

  • 回到主程式

  • 提示視窗按下確定

  • 注意標題,領空變成pixtopianbook.exe,並停在0045631B | 5E | pop esi |

  • 此時不知何處調用了這個call

  • F8一步一步過,直到ret後,就會跳轉回調用的位址

  • 停在00412DEA | E9 DD000000 | jmp pixtopianbook.412ECC |

  • 向上觀察

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    00412DBE | 8B8E BC010000         | mov ecx,dword ptr ds:[esi+1BC]        | esi+1BC:"??"
    00412DC4 | 8BF8 | mov edi,eax |
    00412DC6 | 8B04F9 | mov eax,dword ptr ds:[ecx+edi*8] |
    00412DC9 | 8D2CFD 00000000 | lea ebp,dword ptr ds:[edi*8] |
    00412DD0 | 83F8 04 | cmp eax,4 |
    00412DD3 | 7C 1A | jl pixtopianbook.412DEF |
    00412DD5 | 8B4C24 10 | mov ecx,dword ptr ss:[esp+10] |
    00412DD9 | 6A 10 | push 10 |
    00412DDB | 68 00F74800 | push pixtopianbook.48F700 | 48F700:"Please register PixtopianBook"
    00412DE0 | 68 68FC4800 | push pixtopianbook.48FC68 | 48FC68:"You've reached the limit of 4 entries per group.\n\nPlease register PixtopianBook today!"
    00412DE5 | E8 03350400 | call pixtopianbook.4562ED |
    00412DEA | E9 DD000000 | jmp pixtopianbook.412ECC |
  • 00412DE5 | E8 03350400 | call pixtopianbook.4562ED |間接call MessageBox

  • 00412DDB | 68 00F74800 | push pixtopianbook.48F700 | 48F700:"Please register PixtopianBook"00412DE0 | 68 68FC4800 | push pixtopianbook.48FC68 | 48FC68:"You've reached the limit of 4 entries per group.\n\nPlease register PixtopianBook today!"是彈出視窗的內容

  • jl pixtopianbook.412DEF跳轉實現(jl = 若低於則跳越),會跳轉過彈出訊息視窗

  • 向上觀察cmp eax,4,表示聯絡人數量與4比較

  • 可以知道聯絡人的上限是4


  • F9執行程式

  • Add Group新增群組 (群組名隨意)

  • 新增到第三組後,要新增第四組時彈出You've reached the limit of 3 groups. Please register PixtopianBook today!

  • 回到x64dbg

  • F12暫停(P)

  • 注意標題,領空變成user32.dll

  • Alt + F9執行到使用者代碼(U)

  • 左下角由暫停變成執行

  • 回到主程式

  • 提示視窗按下確定

  • 注意標題,領空變成pixtopianbook.exe,並停在0045631B | 5E | pop esi |

  • 此時不知何處調用了這個call

  • F8一步一步過,直到ret後,就會跳轉回調用的位址

  • 停在00408B1D | 5E | pop esi | esi:"piG"==&"佳G"

  • 向上觀察

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    00408AF1 | 8B83 A4000000         | mov eax,dword ptr ds:[ebx+A4]         |
    00408AF7 | 6A 00 | push 0 |
    00408AF9 | 68 46010000 | push 146 |
    00408AFE | 50 | push eax |
    00408AFF | FF15 D0564700 | call dword ptr ds:[<&SendMessageA>] |
    00408B05 | 83F8 03 | cmp eax,3 |
    00408B08 | 7C 2A | jl pixtopianbook.408B34 |
    00408B0A | 6A 10 | push 10 |
    00408B0C | 68 00F74800 | push pixtopianbook.48F700 | 48F700:"Please register PixtopianBook"
    00408B11 | 68 B4F64800 | push pixtopianbook.48F6B4 | 48F6B4:"You've reached the limit of 3 groups.\n\nPlease register PixtopianBook today!"
    00408B16 | 8BCB | mov ecx,ebx |
    00408B18 | E8 D0D70400 | call pixtopianbook.4562ED |
    00408B1D | 5E | pop esi | esi:"piG"==&"佳G"
  • 00408B18 | E8 D0D70400 | call pixtopianbook.4562ED |間接call MessageBox

  • 00408B0C | 68 00F74800 | push pixtopianbook.48F700 | 48F700:"Please register PixtopianBook"00408B11 | 68 B4F64800 | push pixtopianbook.48F6B4 | 48F6B4:"You've reached the limit of 3 groups.\n\nPlease register PixtopianBook today!"是彈出視窗的內容

  • jl pixtopianbook.408B34跳轉實現(jl = 若低於則跳越),會跳轉過彈出訊息視窗

  • 向上觀察cmp eax,3,表示群組數量與3比較

  • 可以知道群組的上限是3


分析總結

  • 00412DD3為聯絡人限制判斷位址。
  • 00408B08為群組限制判斷位址。

修改思路

根據分析總結

  • 將兩個判斷位置使用jmp直接跳轉實現。

實際修改

  • 開啟C:\Program Files (x86)\PixtopianBook\PixtopianBook.exe

  • 00412DD3 | 7C 1A | jl pixtopianbook.412DEF |按下空白鍵

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

  • 修改後如下

    1
    2
    3
    4
    // 修改前
    00412DD3 | 7C 1A | jl pixtopianbook.412DEF |
    // 修改後
    00412DD3 | EB 1A | jmp pixtopianbook.412DEF |
  • 00408B08 | 7C 2A | jl pixtopianbook.408B34 |按下空白鍵

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

  • 修改後如下

    1
    2
    3
    4
    // 修改前
    00408B08 | 7C 2A | jl pixtopianbook.408B34 |
    // 修改後
    00408B08 | EB 2A | jmp pixtopianbook.408B34 |
  • 點擊修補程式 或是快捷鍵Ctrl + P

  • 點擊修補檔案(P)

  • 另存檔名PixtopianBook.crack.exe

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

註:搜尋字串找關鍵字,修改未註冊字樣;這邊就不做示範。如果有相同的字串,都改改看即可找到正確的。


實際驗證

  • 開啟C:\Program Files (x86)\PixtopianBook\PixtopianBook.crack.exe
  • 新增聯絡人,成功破解人數限制4
  • 新增群組,成功破解群組限制3


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