Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Reverse 0x1@HackerSir 10th
Search
YJK
August 31, 2024
0
2
Reverse 0x1@HackerSir 10th
YJK
August 31, 2024
Tweet
Share
More Decks by YJK
See All by YJK
你 PWN 不動我@HackerSir 10th
yjk0805
0
2
Reverse 0x2@HackerSir 10th
yjk0805
0
2
不要亂 PWN 我@HackerSir 10th
yjk0805
0
5
Assembly@HackerSir 10th
yjk0805
0
2
Featured
See All Featured
BBQ
matthewcrist
85
9.3k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
14
2k
Bash Introduction
62gerente
608
210k
The Cost Of JavaScript in 2023
addyosmani
45
6.6k
YesSQL, Process and Tooling at Scale
rocio
168
14k
Mobile First: as difficult as doing things right
swwweet
222
8.9k
GraphQLの誤解/rethinking-graphql
sonatard
67
10k
Become a Pro
speakerdeck
PRO
24
5k
The Power of CSS Pseudo Elements
geoffreycrofte
72
5.3k
[RailsConf 2023] Rails as a piece of cake
palkan
51
4.9k
Being A Developer After 40
akosma
86
590k
Building Your Own Lightsaber
phodgson
102
6.1k
Transcript
Reverse Basic YJK @ HackerSir 12/06
What is Reverse Engineering Outline 01 04 02 03 Before
Reverse How to Prevent How to Analysis 05 Analysis Tool
Before Reverse
前置知識 • 基礎 C/C++ 語法 (迴圈、陣列、指標…) • 一點點演算法知識 • 基礎組合語言
What is Reverse Engineering
What is Reverse Engineering • 逆向工程 • 在沒有原始碼的時候分析程式行為 • PWN
(Binary Exploitation) 的基礎
Why Reverse Engineering • 惡意程式分析 (ex: WannaCry) • 軟體分析 (ex:
TikTok) • 開發插件 • 挖掘漏洞 • 遊戲外掛 • 盜版軟體 • Keygen
How to Prevent
How to prevent • 加密 • 加殼 • 誤導 •
混淆程式碼 • 提高更新頻率
加殼 • 壓縮殼 • 將 code 壓縮 • 要執行時才解壓縮並執行 •
UPX
加殼 • VM 殼 • 實作一台 VM (Virtual Machine) •
將原始程式變成給 VM 跑的程式 • 逆完整個 VM
查殼 • DIE (Detect it easy) • 查脫殼工具或自己脫殼
混淆程式碼 • 指令替換 • 程式碼邏輯混淆 • 偽造控制流程 • OLLVM
混淆程式碼 • Demo: CGGC - ollvmvm
How to Reverse
How to Reverse source
How to Reverse Static Analysis Dynamic Analysis • 不執行程式 •
Decompile 執行檔分析資訊 • 分析各函式及程式碼 • 執行程式並觀察程式行為 • 觀察執行程式可能改變的值 • 記憶體、變數、底層資訊
Static Analysis Tool
Static Analysis Tool & Command objdump • disassemble 執行檔 •
顯示 object file 資訊 readelf • ELF 檔的資訊 • headers、segments… ltrace • 追蹤使用函式庫 strace • 追蹤 system call 和 signal strings • 列出檔案中所有可視字元 file • 查看檔案類型
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
Static Analysis
Static Analysis • 靜態分析 • 注重 code review • 瞭解程式執行過程
• 看懂自己不一定熟悉的語言執行過程
Static Analysis • 嘗試解讀以下程式
objdump • Disassemble (反組譯)執行檔 • sudo apt install binutils •
objdump <option(s)> <file(s)> • Ex: objdump –M intel –d a.out
objdump • objdump –M intel –d a.out • -M, --disassembler-options=OPT
• 自定義反組譯,例如自訂語法
objdump • objdump –M intel –d a.out • -d, --disassemble
• 指定檔案路徑
objdump • objdump –M intel –d a.out • 反組譯 a.out
並以 intel 格式輸出
Disassemble vs Decompile Disassemble • 反組譯 • 執行檔 -> assembly
Decompile • 反組譯 • 執行檔 -> source code
ltrace • 跟蹤程式使用的函數 • sudo apt install ltrace • ltrace
./a.out
strace • 追蹤 system call 和 signal • sudo apt
install strace • strace ./a.out
strings • 列出檔案中所有可視字元 • 常搭配 grep 使用 • sudo apt
install binutils • strings [option(s)] [file(s)] • ex: strings a.out
strings • 列出檔案中所有可視字元 • 常搭配 grep 使用 • sudo apt
install binutils • strings [option(s)] [file(s)] • ex: strings a.out | grep "HackerSir"
file • 查看檔案類型 • file [OPTION...] [FILE...] • ex: file
a.out
C++ name mangling • name decoration • 解決不能使用跟 C library
一樣函數名稱 (參數或型態不同) • 編譯器區分不同同名函式,必須對符號修改 • C++ 加入 namespace 解決
C++ name mangling rule • g++ 規則 • 都由 "_Z"
開頭 • 巢狀名稱會在 "_Z" 後面加上 "N“ • 接著為字串長度 + 名稱 • 最後面加上 "E" (巢狀才加) 再加上 data type • ex: N::func(int, int) -> _ZN1N4funcEii
c++filt • demangling 可以使用 c++filt • sudo apt install binutils
• c++filt [options] [mangled names] • ex: c++filt _Z4funcdd
Practice • basic command • C++ mangle
IDA
IDA • 曼特農夫人 • 今天用的是 free 版 • Pro 版是很強大的逆向工具
• 反組譯成 asm • 反編譯成 C 語言
How to use IDA • 選取要 decompile 的檔案 • 按下鍵盤上的
F5 • 神奇的事情發生了
IDA - Strings • 功能跟 strings command 相同 • 按下
shift + F12
IDA - XREF • Cross Reference • 查看 function 被呼叫的地⽅
IDA - XREF • Cross Reference • 查看 function 被呼叫的地⽅
• 選取欲查看之 function • 按下 x 或按右鍵選取 Jump to xref
IDA - 修改變數名稱 • 選許要修改的變數 • 按下 n 或是按下滑鼠右鍵選取 rename
lvar
IDA - 型態轉換 • 鼠標停在數字或變數上會發現它的型態 • 數字也可能是字元
IDA - 型態轉換 • 鼠標停在數字或變數上會發現它的型態 • 數字也可能是字元 • 對要轉換的目標值按右鍵 •
選取想要顯示的型態
IDA - 誤判解決 • IDA 可能會誤判 function 回傳型態、參數,可以自行修改
IDA - 誤判解決 • IDA 可能會誤判 function 回傳型態、參數,可以自行修改 • 選取要修改的
function • 按下 y 或是滑鼠右鍵選取 set item type
Practice • IDAbasic
解題流程
How to solve a problem • 先用 file command 確認檔案類型
• 選定 decompile 軟體 • Code review • 將變數更改成可讀性高的名稱
Get Flag • 執行程式依照逆向結果熟知流程拿到 Flag • 直接發現有後門拿到 Flag • 直接發現靜態分析可以拿到產出
Flag 的規則
Practice • Game • FlagGenerater
Next • Dynamic Analysis • 更多 Reverse Engineering 的技巧 &
工具
None