Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Basic Reverse-逆要做什麼@THUHC

YJK
January 13, 2025
3

Basic Reverse-逆要做什麼@THUHC

YJK

January 13, 2025
Tweet

Transcript

  1. Whoami • YJK • 逢甲大學黑客社學術部長 • AIS3 Junior 2024 助教

    • MyFirstCTF 2024 銅質獎 • 2022 & 2023 T 貓盃資安基礎實務能力競賽 佳作 • ICPC 2024 Taoyuan Regional High Honors • 演算法 & Reverse & Pwn & IoT Security
  2. Table of contents 01 03 02 04 Introduction How to

    Reverse IDA Dynamic Analysis & GDB 05 Other Language Reverse
  3. Why Reverse Engineering • 惡意程式分析 (ex: WannaCry) • 軟體分析 (ex:

    TikTok) • 開發插件 • 挖掘漏洞 (ex: IoT、browser) • 遊戲外掛 • 盜版軟體 • Keygen
  4. How to Reverse Engineering • 假設現在有一個由 C/C++ 撰寫而成的程式 Source code

    Assembly code Preprocessor 前處理器 & Compiler 編譯器 Library/ Object Executable Machine code Assembler 組譯器 Linker 連結器
  5. Reverse Engineering? • Reverse 的過程 Source code Assembly code Preprocessor

    前處理器 & Compiler 編譯器 Library/ Object Executable Machine code Assembler 組譯器 Linker 連結器 disassemble
  6. Reverse Engineering? • Reverse 的過程 Source code Assembly code Preprocessor

    前處理器 & Compiler 編譯器 Library/ Object Executable Machine code Assembler 組譯器 Linker 連結器 disassemble decompile
  7. Compiler • 程式碼->執行檔的重要過程 • 將高階語言轉換為較低階語言 ▪ ex:一行的 scanf 會被編譯成多行的 ASM

    • 未必直接生成 machine code ▪ 可以先轉為 IL(中間語言),後續再做優化 • C 語言所常用的 gcc 或是 C++ 的 g++ 就是 compiler
  8. Interpreter • 直譯器 • 分析中間語言並做出相對應行為 • 通常會將中間語言轉為當下架構的 instruction • Python

    即為常見的 interpreter 語言 • Java 也為 interpreter • 會先解析成 Bytecode 並執行
  9. How to Reverse Static Analysis Dynamic Analysis • 不執行程式 •

    Decompile 執行檔分析資訊 • 分析各函式及程式碼 • 執行程式並觀察程式行為 • 觀察執行程式可能改變的值 • 記憶體、變數、底層資訊
  10. Useful Tool & Command objdump • disassemble 執行檔 • 顯示

    object file 資訊 readelf • ELF 檔的資訊 • headers、segments… ltrace • 追蹤使用函式庫 strace • 追蹤 system call 和 signal strings • 列出檔案中所有可視字元 file • 查看檔案類型
  11. Static Analysis Tool IDA Pro • 非常貴、很強大 • IDA Free

    Ghidra • Java • 開源 • NSA 開發 Radare2 • 開源 • CLI binary ninja • 比 IDA Free 可以逆更多架構 • cloud version dnSpy • .NET 架構 Apktool • .apk Bytecode-Viewer • .class
  12. Disassemble vs Decompile • Disassemble ▪ 反組譯 ▪ 執行檔 ->

    assembly • Decompile ▪ 反編譯 ▪ 執行檔 -> source code
  13. How to use IDA • 選取要 decompile 的檔案 • 一路按下

    OK 接下來按下鍵盤上的 F5 • 神奇的事情發生了
  14. IDA - XREF • Cross Reference • 查看 function 被呼叫的地方

    • 在追蹤流程的時候很方便 • 選取欲查看之 function • 按下 x 或按右鍵選取 Jump to xref
  15. How to solve a problem • 先用 file command 確認檔案類型

    • 選定 decompile 軟體 • Code review • 將變數更改成可讀性高的名稱
  16. Why Dynamic Analysis • 如果執行完某個函式發現有些數值變化,代表有可能是關鍵 • 可以透過 debugger 跳過或繞過某些部分,甚至跳到重點 •

    設定中斷點,觀察暫存器、記憶體 • 動態修改數值,使數值成立 ▪ 可以執行到原本不該執行的程式
  17. Dynamic Analysis Tool GDB • GNU Debugger • 互動式的 shell

    • CLI x64dbg • For Windows • GUI • x32dbg WinDbg • 微軟開發 • 對 Windows 相容性較高 • GUI
  18. GDB • GNU Debugger • GNU 系統中的標準除錯器 • 許多類 UNIX

    系統都可以使用 • 支援許多語言,包括 C、C++ 等
  19. GDB Plugin • peda • pwndbg • gdbgui • gef

    • 可以直接觀察較多資訊
  20. GDB - Examine • 特定格式將記憶體印出 • x/<fmt> <address> • fmt

    = count + size + format • ex: x/2gx $rax • size: b (byte)、h (halfword)、w (word)、g (giant, 8 bytes) • format: x (hex)、d (decimal)、c (char)、s (string)…
  21. 初步使用 GDB • 先將程式執行 • b main • r •

    後面再看該怎麼做 ▪ ni、si...
  22. Python reverse • 實際上 python 可以編譯成 .pyc ▪ 有需求時也會產生出 __pycache__

    • 內部為 Python Bytecode • 可以透過 python -m compileall <file> 編譯
  23. Disassembler • 在 disassemble/decompile 前要知道版本 (magic number、file) • 可以使用 marshal

    讀 code object • 用對應版本的 dis module dissemble ▪ dis.dis(data) • 此時會獲得 bytecode
  24. Disassembler • 在 disassemble/decompile 前要知道版本 (magic number、file) • 可以使用 marshal

    讀 code object • 用對應版本的 dis module dissemble ▪ dis.dis(data) • 此時會獲得 bytecode • Demo:picoCTF-weirdSnake
  25. Bytecode -> Python • 可以間接當成 decompile • pylingual (machine learning)

    • uncompyle • pycdc • pylingual 會將程式繼續上傳幫助開發
  26. Pyinstaller • 可以將 python 變成執行檔 • 會將 cpython 和 script

    一起包起來 • 一樣可以整包解開 ▪ 解開為 .pyc • https://github.com/pyinstxtractor/pyinstxtractor-ng • https://pyinstxtractor-web.netlify.app/
  27. Pyinstaller • 可以將 python 變成執行檔 • 會將 cpython 和 script

    一起包起來 • 一樣可以整包解開 ▪ 解開為 .pyc • https://github.com/pyinstxtractor/pyinstxtractor-ng • https://pyinstxtractor-web.netlify.app/ • 從 entry point 分析
  28. 壞處 • 環境問題 • Ex: 進入 libc 可能會掛在裡面 • 路徑爆炸

    • 每個判斷式都要走兩條路 (2^n) • 遞迴處理困難