1. 程式人生 > >20154305 齊帥 PC平臺逆向破解

20154305 齊帥 PC平臺逆向破解

情況下 函數調用 混亂 結果 副本 -o 此刻 V9 執行文件

Exp1 PC平臺逆向破解

一、實踐目標

本次實踐的對象是一個名為pwn1的linux可執行文件。

該程序正常執行流程是:main調用foo函數,foo函數會簡單回顯任何用戶輸入的字符串。

該程序同時包含另一個代碼片段,getShell,會返回一個可用Shell。正常情況下這個代碼是不會被運行的。我們實踐的目標就是想辦法運行這個代碼片段。

二、實驗要求

報告內容

  1. 掌握NOP, JNE, JE, JMP, CMP匯編指令的機器碼(0.5分)
  2. 掌握反匯編與十六進制編程器 (0.5分)
  3. 能正確修改機器指令改變程序執行流程(0.5分)
  4. 能正確構造payload進行bof攻擊(0.5分)

報告整體觀感

  1. 報告格式範圍,版面整潔 加0.5。

  2. 報告排版混亂,加0分。

文字表述

  1. 報告文字內容非常全面,表述清晰準確 加1分。

  2. 報告邏輯清楚,比較簡要地介紹了自己的操作目標與過程 加0.5分。

  3. 報告邏輯混亂表述不清或文字有明顯抄襲可能 加0分。

三、實驗方法

  • 手工修改可執行文件,改變程序執行流程,直接跳轉到getShell函數。

四、實驗步驟

(一)反匯編查看pwn1的內容並計算修改地址的值

1. 輸入反匯編指令 objdump -d 20154305|more查看可執行文件內容,其中20154305為pwn1的一個副本

技術分享圖片

2. 向下翻頁找到getshell函數、foo函數和main函數

技術分享圖片

由圖中可見“ call 8048491 "這條指令將調用位於地址8048491處的foo函數,其對應機器指令為“e8 d7ffffff”,e8即跳轉之意。本來正常流程,此時此刻EIP的值應該是下條指令的地址,即80484ba,但如一解釋e8這條指令,CPU就會轉而執行 “EIP + d7ffffff”這個位置的指令。“d7ffffff”是補碼,表示-41,41 = 0x29 ,80484ba + d7ffffff = 80484ba - 0x29 正好是8048491這個值。

main函數調用foo,對應機器指令為“ e8 d7ffffff ”,那我們想讓它調用getShell,只要修改 d7ffffff 為 getShell-80484ba 對應的補碼就行。用Windows計算器,直接 47d-4ba就能得到補碼,是c3ffffff。
技術分享圖片

(二)修改可執行文件

1. 用vim編輯器打開20154305可執行文件,輸入 vim 20154305

2. 在 vim 編輯器中按 Esc 鍵,輸入" :%!xxd "將原格式轉換成十六進制顯示,結果如下圖:

技術分享圖片

3. 查找要修改的內容,輸入“ /e8 d7 "。

技術分享圖片
此處可通過記錄改行機器語言前邊的編號000004b0標識位置。

4. 修改d7為c3

技術分享圖片
具體操作是將光標移動到要修改的位置,然後按下鍵盤上的 r 鍵,然後按下修改的目標值。

5. 轉換十六進制為原格式,輸入 “ :%!xxd -r ” 。

技術分享圖片

6. 保存、退出 vim 編輯器

輸入 “ :wq ”
技術分享圖片

(三)反匯編檢查修改後的結果

技術分享圖片
修改指令成功,本次試驗成功完成。

(五)實驗總結

首先,由於條件有限,我實驗的PC未能安裝32位運行器,不能運行該可執行文件,但是已將修改後的文件在其他同學電腦上運行過了,可以執行且達到目的。

其次,本次實驗內容雖然以前從未接觸過,但是同樣也給我帶來了興趣,使我能夠深入地去學習研究,並且可參考的報告、案例比較多,理解相對比較深刻,但是對於該實驗的其他攻擊方法暫時沒有頭緒,會在以後的課上繼續深入研究。

20154305 齊帥 PC平臺逆向破解