# [資安實務] 逆向工程及底層架構 ## 底層架構 ### RAM(記憶體)、CPU(處理器)、硬碟間的關係 ㄧ般情況下檔案會被放在硬碟儲存空間中,執行檔案程式時才會被放到RAM上。程式則是交由CPU計算與執行。 ## 什麼是逆向工程? 透過把程式變回code,以了解程式在做什麼。 ## ELF 使用xxd指令查看檔案的十六進位,看似是一串亂碼,實際上有格式,稱為ELF格式。  可以利用指令來解析ELF格式內容: ``` readelf -a 程式 ``` 前四個byte(前八個字元)為該檔案的識別標頭(Magic number),用來查看檔案的類型。 第五個byte若為2,表示該程式為64-bit。 ### Binwalk Linux的工具,透過尋找檔案裡的各項識別標頭,來找出裡面的資源。 #### 把檔案寫入另一個檔案 ``` cat 要寫入的檔案 >> 被寫入的檔案 ``` #### 利用binwalk取出檔案內容 ``` binwalk --dd='.*' <檔案名稱> ``` 該指令將掃到的檔案取出來,並附加對應的檔名。 ## Strings strings指令用來查看檔案中所有可列印字符。 ## Wireshark 觀察封包的工具,用來查看程式與伺服器之間的溝通內容。  有許多伺服器可以選擇。 Adapter for loopback trffic capture指的是對本機傳送的封包。  能看出主要分為三個部分:封包清單、封包內容、封包位元組。 ## Cheat Engine 用來尋找與修改記憶體的軟體。常用於遊戲外掛。 *<注意>基於此軟體有修改記憶體功能,安裝時請關掉防毒。* ### 題目示範:Lottery  當然,這題也是可以暴力破解,但我猜破解成功前滑鼠會先被點壞==  1.開啟Cheat Engine,按下尋找(紅框標示處),在裡面找到Lottery.exe 2.因為目前抽獎的值是0,在Value框中輸入0。 (如果已經按過抽獎則輸入抽到的數字。因為「0」的搜尋結果有十多萬條,建議先換成其他數字) 3.能看見左邊出現許多查到的數值,按下抽獎,觀察哪個數值產生了變化。 4.找到右側Value值與新抽到的數字相同的Address,按下Ctrl+E修改數值(也可以按右鍵選擇修改) 5.兌獎即可得到Flag(請不要再按抽獎否則數值會跑掉) ## X86組合語言 ### 指令集架構 電腦的機器語言。我們所寫的程式,都是編譯成機器語言後,才能讓電腦執行。 常見的指令集架構有x86、ARM...等。 ### x86指令 #### 組譯 ``` nasm -f <輸出格式> -o <輸出檔名> <.asm原始碼> ``` #### 連結 ``` ld <object檔> -o <輸出檔名> ``` #### 移動指令 把A放到B ``` mov B, A ``` 把A+B放到C ``` lea C, [A+B] ``` #### 運算指令 相加,結果放到值2 ``` add <值2>, <值1> ``` 值1減值2,結果放到值2 ``` sub <值2>, <值1> ``` 相乘,結果放到值2 ``` mul <值2>, <值1> ``` #### 分支指令 cmp: 相減並設定EFLAGS(大/小/等於) j: 若EFLAGS(大/小/等於)時執行跳轉 j後面可以接l: 小於 / g: 大於 / e: 等於 / le:小於等於 / ge: 大於等於 jmp: 無條件執行跳轉 #### syscall 執行 syscall 組合語言指令 https://chromium.googlesource.com/chromiumos/docs/+/master/constants/syscalls.md#tables ## 分析工具 ### gdb | 指令 | 功能 | | ----- | ------ | | disas | 反組譯 | | b * *[Address expression]* | 設定中斷點 | | r | 開始執行(run) | | c | 繼續執行(continue) | | x/*[Length][Format] [Address expression]* | 顯示記憶體內容 | ### IDA Freeware [下載] https://hex-rays.com/ida-free/#download 拖曳要分析的執行檔進來,按下 F5 反編譯 ### Ghidra [下載] https://github.com/NationalSecurityAgency/ghidra/releases ###### tags: `資安`
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up