逆向工具的使用


0x0 環境

  1. x64dbg
  2. 看雪找的一個serial.exe
  3. Windows 10

0x1 主要內容

​ 本文通過分析一個非明碼比較的序列號保護程序,展示x64dbg的常見用法以及逆向的基本思路,在實戰中講解x64dbg的一些用法:

  1. 字符串搜索
  2. 反匯編界面基本操作
  3. 軟件斷點
  4. 函數斷點
  5. 常見窗口介紹

0x2 分析

  1. 分析程序功能

    這程序就長這樣:

    軟件界面

    在help里面可以找到一個注冊功能,注冊界面如下:

    軟件界面2

    輸入正確的用戶名和密碼即可注冊成功,當然,如果輸入錯誤,會彈出一個messagebox顯示錯誤信息

  2. 查殼

    查殼結果

    可以看出,目標程序是使用匯編寫的,貌似沒殼。

  3. 分析目標程序

    將目標程序用x64dbg(實際上是x32dbg)打開,看看x64dbg的界面,這里常用的窗口都使用紅字標注出來了

    xdbg基本界面

    字符串搜索功能,我們可以通過x64dbg的字符串搜索功能來查看內存中加載的字符串,具體操作步驟為:CPU(反匯編)窗口->鼠標右鍵->搜索->選擇模塊(根據個人需求選擇,一般選擇當前模塊,前提是得先執行到主模塊)->字符串

    搜索1

    我們單步到主模塊(單步調試快捷鍵和od一樣,F7單步步入,F8單步步過),字符串搜索得到如下結果,可以看到很明顯的字符串:

    搜索2

    雙擊該字符串即可跳到反匯編窗口中相應位置。

    關鍵代碼

    下軟件斷點,運行程序,觀察是何處調用了該代碼(鼠標點擊相應行,按下F2即可快速使用軟件斷點),下軟件斷點后,地址處會變為紅色,斷點窗口能看到相應信息。

    軟件斷點1

    軟件斷點2

    讓程序運行起來(快捷鍵F9),輸入注冊信息,點擊確認,等待命中軟件斷點

    可以看到,程序的EIP指向了我們的軟件斷點,此時信息框信息為失敗。

    破解流程1

    單步步過,一直走到返回ret,即可查看上層代碼

    可以看到,源程序是使用了2個處理函數,分別對用戶名和密碼進行了運算,用戶名運結果放到了eax中,密碼運算結果放在ebx中,比較二者運算結果是否相同,決定調用注冊成功函數還是注冊失敗函數。(由於此時只是介紹工具使用,故不展示算法分析部分,大致流程為eax = F1(用戶名),ebx = F2(注冊碼),cmp eax,ebx)

    破解流程2

    這時候,我們使用x64dbg的代碼修改功能,將對應的注冊失敗驗證跳過,即可完成破解:將0x401243處的je 0x40124C改為jmp 0x40124C(雙擊代碼行即可修改)

    破解流程3

    保存到文件(反匯編窗口右鍵->補丁->修補文件)

    破解流程4

    現在,驗證我們的破解成果吧

    破解流程5

    可以看到,已經破解成功了,當然,完美的破解應當是寫出注冊機,這里只是展示工具使用,主要不是展示逆向,所以暫時不寫注冊流程。

0x3 知識點總結

  1. 相應界面的查看:CPU(反匯編)窗口、寄存器窗口、內存窗口、棧窗口
  2. 常用快捷鍵:F2下軟件斷點、F7單步步入、F8單步步過、F9運行程序
  3. 常用功能:
    1. 字符串搜索:CPU(反匯編)窗口->鼠標右鍵->搜索->選擇模塊(根據個人需求選擇,一般選擇當前模塊,前提是得先執行到主模塊)->字符串
    2. 保存修改到文件:反匯編窗口右鍵->補丁->修補文件


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM