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

Reverse 0x1@HackerSir 10th

YJK
August 31, 2024
2

Reverse 0x1@HackerSir 10th

YJK

August 31, 2024
Tweet

Transcript

  1. What is Reverse Engineering Outline 01 04 02 03 Before

    Reverse How to Prevent How to Analysis 05 Analysis Tool
  2. Why Reverse Engineering • 惡意程式分析 (ex: WannaCry) • 軟體分析 (ex:

    TikTok) • 開發插件 • 挖掘漏洞 • 遊戲外掛 • 盜版軟體 • Keygen
  3. How to prevent • 加密 • 加殼 • 誤導 •

    混淆程式碼 • 提高更新頻率
  4. 加殼 • VM 殼 • 實作一台 VM (Virtual Machine) •

    將原始程式變成給 VM 跑的程式 • 逆完整個 VM
  5. How to Reverse Static Analysis Dynamic Analysis • 不執行程式 •

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

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

    IDA Free Ghidra • Java • 開源 • NSA 開發 Radare2 • 開源 • CLI • Cutter (GUI) binary ninja • 比 IDA Free 可以逆更多檔案 • cloud version dnSpy • .NET 架構 Apktool • .apk Bytecode-Viewer • .class
  8. objdump • Disassemble (反組譯)執行檔 • sudo apt install binutils •

    objdump <option(s)> <file(s)> • Ex: objdump –M intel –d a.out
  9. Disassemble vs Decompile Disassemble • 反組譯 • 執行檔 -> assembly

    Decompile • 反組譯 • 執行檔 -> source code
  10. strace • 追蹤 system call 和 signal • sudo apt

    install strace • strace ./a.out
  11. strings • 列出檔案中所有可視字元 • 常搭配 grep 使用 • sudo apt

    install binutils • strings [option(s)] [file(s)] • ex: strings a.out
  12. strings • 列出檔案中所有可視字元 • 常搭配 grep 使用 • sudo apt

    install binutils • strings [option(s)] [file(s)] • ex: strings a.out | grep "HackerSir"
  13. C++ name mangling • name decoration • 解決不能使用跟 C library

    一樣函數名稱 (參數或型態不同) • 編譯器區分不同同名函式,必須對符號修改 • C++ 加入 namespace 解決
  14. C++ name mangling rule • g++ 規則 • 都由 "_Z"

    開頭 • 巢狀名稱會在 "_Z" 後面加上 "N“ • 接著為字串長度 + 名稱 • 最後面加上 "E" (巢狀才加) 再加上 data type • ex: N::func(int, int) -> _ZN1N4funcEii
  15. c++filt • demangling 可以使用 c++filt • sudo apt install binutils

    • c++filt [options] [mangled names] • ex: c++filt _Z4funcdd
  16. IDA

  17. IDA - XREF • Cross Reference • 查看 function 被呼叫的地⽅

    • 選取欲查看之 function • 按下 x 或按右鍵選取 Jump to xref
  18. How to solve a problem • 先用 file command 確認檔案類型

    • 選定 decompile 軟體 • Code review • 將變數更改成可讀性高的名稱