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 Engineering - 2
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
LJP-TW
January 20, 2022
Technology
770
0
Share
Reverse Engineering - 2
NYCU Secure Programming 2021 Fall
LJP-TW
January 20, 2022
More Decks by LJP-TW
See All by LJP-TW
Reverse Engineering - 1
ljptw
0
1.8k
Reverse Engineering - 3
ljptw
0
620
Re:0 從零開始的逆向工程
ljptw
1
1.3k
Linux 極入門篇
ljptw
1
310
Fuzzing 101
ljptw
1
230
Binary Exploitation - File Structure
ljptw
1
310
Binary Exploitation - Basic 補充篇
ljptw
1
57
Binary Exploitation - Heap
ljptw
1
180
Binary Exploitation - Basic
ljptw
1
140
Other Decks in Technology
See All in Technology
Sony_KMP_Journey_KotlinConf2026
sony
1
190
マーケットプレイス版Oracle WebCenter Content For OCI
oracle4engineer
PRO
5
1.8k
Databricks 月刊サービスアップデート 2026年05月号
tyosi1212
0
130
Java正規表現エンジン(NFA)の仕組みと パフォーマンスを維持するための最適化手法
takeuchi_132917
0
160
GoとSIMDとWasmの今。
askua
2
420
TypeScript Compiler APIとPHP-Parserを活用し、TypeScriptとPHPで型を共有する
shuta13
0
300
エンジニアは生成AIと どのように向き合うべきか? ことばの意味という観点から
verypluming
3
310
Oracle AI Database@AWS:サービス概要のご紹介
oracle4engineer
PRO
4
2.8k
Platform Engineering as a Product: Criteria for Improvement and Multi-Tenant Design
kumorn5s
0
450
製造業のクラウド活用最適解〜AI,DXを加速するデータ基盤の作り方〜
hamadakoji
0
180
Anthropic AIネイティブ・スタートアップ構築のプレイブック を理解する
nagatsu
0
230
Kiro CLI v2.0.0がやってきた!
kentapapa
0
250
Featured
See All Featured
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.4k
GraphQLの誤解/rethinking-graphql
sonatard
75
12k
New Earth Scene 8
popppiees
3
2.3k
Practical Orchestrator
shlominoach
191
11k
Automating Front-end Workflow
addyosmani
1370
210k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
850
Discover your Explorer Soul
emna__ayadi
2
1.1k
Navigating Weather and Climate Data
rabernat
0
200
Darren the Foodie - Storyboard
khoart
PRO
3
3.4k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.3k
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
65
55k
Mozcon NYC 2025: Stop Losing SEO Traffic
samtorres
1
240
Transcript
Reverse Engineering - 2 2021/11/26 Presented by LJP
# whoami • LJP / LJP-TW • SQLab @ NYCU
碩一 • CTF @ 10sec / TSJ • Pwner 2
Outline • Tools • Where to start • Address Space
• Speed-up 3 • DLL • PE Format • IAT • EAT • PEB
Tools PE-bear / x64dbg 4
Tools - PE-Bear • 觀察 PE format 5
Tools - PE-Bear • 換算 RVA <-> Raw address 6
Tools - x64dbg 7 組合語言 資料視窗 Stack 暫存器
Tools - x64dbg 8 Ref: https://www.facebook.com/10sec.tw/photos/a.102934474545443/410257010479853/
Tools - x64dbg 9
Tools - x64dbg • 常用快捷鍵 • F2: 設定中斷點 • F9:
繼續執行 • F8: 步過 • F7: 步入 • Ctrl+F9: 執行到 ret • Ctrl+G: goto • Space: 組譯 10
Tools - x64dbg • 常用功能 • 設定指令列 11
Tools - x64dbg • 常用功能 • 查看載入了哪些 module 12
Tools - x64dbg • 常用功能 • 呼叫堆疊 (call stack) •
記憶體映射 (memory mapping) • … 13
Tools - x64dbg • 外掛 • ScyllaHide: https://github.com/x64dbg/ScyllaHide 14
Where to start? 15
main • Where is main? 16
main • Where is main? • 在這裡面找有三個參數的 function call 17
main 18
Before main • 比 main 還要早跑的 init 的部分: _initterm_e 19
Before main • 比 main 還要早跑的 init 的部分: _initterm 20
After main • 在 main 結束後才跑的部分, 需用以下 API 註冊要跑的函數 •
atexit • _onexit, _onexit_m • __dllonexit 21
Address Space 22
Address Space • 目前申請到的記憶體空間 • 從 x64dbg 記憶體映射觀察 • 起始位址
/ 大小 / 權限 (E: 可執行; R: 可讀; W: 可寫) 23
Lab 1 24
Speed up! 25
Speed up • 更快的找到重要程式碼 • 直接通靈程式會做什麼 • 看引用了哪些外部函數來當作通靈依據 26
Speed up • socket, connect, recv, send • 網路連線 •
CreateService, RegCreateKeyEx • 猜測在嘗試持久化程式執行 • CryptEncrypt, CryptDecrypt • 加解密 27 Ref: https://book.hacktricks.xyz/reversing/common-api-used-in-malware
Speed up • VirtualAlloc, VirtualProtect, CreateRemoteThread, CreateProcess, ResumeThread • 惡意程式愛用的
API 28 Ref: https://book.hacktricks.xyz/reversing/common-api-used-in-malware
Speed up • RegisterClass 家族 • MFC application 用來註冊 window
class 的 API 29 Ref: https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-registerclassw
Speed up • RegisterClass 家族 • MFC application 用來註冊 window
class 的 API 30 Ref: https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-registerclassw Callback function
Speed up • 在覺得會執行的 API 設定中斷點 • 真的停在中斷點後, 從 call
stack 往回找是哪邊呼叫到這個 API 31
Speed up 32
Speed up • 猜是呼叫 MessageBox 家族 API 所創出的 window 33
Speed up • 從 IDA Imports 看, 發現有引用 34
Speed up • 往回追到關鍵程式碼區域 35
Lab 2 36
DLL 37
DLL • Dynamic-Link Library • 提供函數給程式使用 • Export function 38
DLL • 查看提供了哪些函數 39
DLL • x64dbg 符號這一區還不錯用 • 看目前引用了哪些 module • 看 module
import/export 哪些函數 40
DLL • DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpReserved ) •
會在各種時機呼叫到 (e.g. 剛載入時, 要卸載時) • 可以設定, 也可以不設定 41
Lab 3 42
PE format 43
PE format • 這就是你熟悉的 exe 的結構 • 是不是看了就頭痛 • 讓我們一點一點地拆開來說
44 Ref: https://en.wikipedia.org/wiki/Portable_Executable
PE format 45 • 首先看最上面的 DOS Header • 用 PE-Bear
來展示一下
PE format 46 DOS Hdr 以 “MZ” 作為開頭 紀錄 NT
Hdr 偏移量(offset)多少
PE format 47 • 再來是 NT Hdr (或稱 PE Hdr)
• 其包含了
PE format 48 • 再來是 NT Hdr (或稱 PE Hdr)
• 其包含了 • COFF Hdr (或稱 File Hdr)
PE format 49 • 再來是 NT Hdr (或稱 PE Hdr)
• 其包含了 • COFF Hdr (或稱 File Hdr) • Optional Hdr
PE format 50 • COFF Hdr (或稱 File Hdr) •
用 PE-Bear 來展示一下
PE format 51 PE Hdr 以 “PE” 開頭 紀錄有幾個 sections
紀錄 Optional Hdr 多大 紀錄有哪些特殊設定
PE format 52 • Optional Hdr • 用 PE-Bear 來展示一下
PE format 53 程式進入點 RVA 程式基址 紀錄有哪些特殊設定
PE format 54 各種 Directory 位址及大小
PE format 55 • 解釋一下 RVA (Relative Virtual Address) •
首先先直接展示一個程式在跑的時候, 記憶體位址的樣子
PE format 56
PE format 57
VA RVA 58 • 解釋 RVA (Relative Virtual Address) 之前
• 先解釋什麼是 VA (Virtual Address) • 做一下小實驗, 如果執行兩個 hello.exe, 記憶體位址分布長怎樣?
VA RVA 59 • 兩個 process 的記憶體位址有重疊耶?! • 如果改掉 A
process 記憶體內容 (地址重疊的部分), B process 的 內容也會被改嗎? • 實驗一下, 答案是不會的 • 所以那個記憶體位址到底是啥
VA RVA 60 • 其實我們的程式所看到的記憶體位址, 都是假的 • 都是虛擬記憶體位址 (Virtual Address)
VA RVA 61 • 那為什麼要這麼複雜? • 如果程式都能直接碰到實體記憶體位址 PA (Physical Address)
• 你要怎麼知道這個 PA 有沒有被其他程式占用? • 這個問題很難, 但現代 OS 幫你搞定了這個問題 • OS 只給你 VA, 實際上存取時, OS 有他的方式, 能夠 VA <-> PA
VA RVA 62 • 正常狀況下 A process 的 0x55665566 VA
• 跟 B process 的 0x55665566 VA • 不是對應到同一個 PA • 解釋了剛剛的實驗結果
VA RVA 63 • 搞懂 VA 了, 可以講 RVA 了
• 只是一個方便 PE 結構不用寫這麼多字的東西 • VA = ImageBase + RVA • 第一條指令位址 VA = ImageBase + Entry point RVA
VA RVA 64 程式進入點 RVA 程式基址 第一條指令位址 = 0x140001580
ASLR 65 • 可是實驗中, 我們的第一條指令位址顯然不是剛算的 • 原因是 ASLR (Address Space
Layout Randomization) • 記憶體位址每次執行時都是固定的話, 會有安全問題 • 啟用了 ASLR, OS 就會隨機產生 ImageBase, 原本提供的 ImageBase 就被忽略了 QQ
ASLR 66 • 第一條指令位址 VA = ASLR 隨機產生的 ImageBase +
進入點 RVA • 那麼要怎麼知道 ASLR 有沒有開啟呢?
ASLR 67 若有 DLL can move 就是有啟用 ASLR
ASLR 68 • 如果把程式裡的這個 bit 拔掉, 就可以關掉 ASLR 了 •
來實驗一下!
ASLR 69 • DLL can move 是 0x40 • 減去
0x40 就是把它拔掉
ASLR 70 • 記得另存一個新程式 • 再度執行看看
PE format 71 • Section Hdr • 在右邊的圖是對應 Section Table
• 其實會有多個 Section Hdr • 用 PE-Bear 來展示一下
PE format 72 .text section hdr
PE format 73 .rdata section hdr
PE format 74 • 解釋一下 Section Hdr • 程式檔案的 Raw
Addr 開始的 Raw size 個 Bytes 會映射到 Virtual Addr 開始的 Virtual Size 個 Bytes • Virtual Addr 是 RVA • Characteristics 設定了該區記憶體位址的權限
PE format 75
PE format 76 • 但看了一下 .rdata, 好像不是這麼回事?
PE format 77
PE format 78 • 但看了一下 .rdata, 好像不是這麼回事? • 實際上是因為另一個機制, 改掉了這邊的資料
IAT Import Address Table 79
IAT 80 Ref: https://docs.microsoft.com/en-us/archive/msdn-magazine/2002/march/inside-windows-an-in-depth-look-into-the-win32- portable-executable-file-format-part-2
IAT 81 Ref: https://docs.microsoft.com/en-us/archive/msdn-magazine/2002/march/inside-windows-an-in-depth-look-into-the-win32- portable-executable-file-format-part-2
IAT 82 Ref: https://docs.microsoft.com/en-us/archive/msdn-magazine/2002/march/inside-windows-an-in-depth-look-into-the-win32- portable-executable-file-format-part-2
IAT 83 Ref: https://docs.microsoft.com/en-us/archive/msdn-magazine/2002/march/inside-windows-an-in-depth-look-into-the-win32- portable-executable-file-format-part-2
IAT 84 Ref: https://docs.microsoft.com/en-us/archive/msdn-magazine/2002/march/inside-windows-an-in-depth-look-into-the-win32- portable-executable-file-format-part-2
IAT 85 Ref: https://docs.microsoft.com/en-us/archive/msdn-magazine/2002/march/inside-windows-an-in-depth-look-into-the-win32- portable-executable-file-format-part-2
IAT 86 Ref: https://docs.microsoft.com/en-us/archive/msdn-magazine/2002/march/inside-windows-an-in-depth-look-into-the-win32- portable-executable-file-format-part-2
IAT 87 Ref: https://docs.microsoft.com/en-us/archive/msdn-magazine/2002/march/inside-windows-an-in-depth-look-into-the-win32- portable-executable-file-format-part-2
EAT Export Address Table 88
EAT 89
EAT 90
EAT 91
EAT 92
EAT 93
EAT 94
EAT 95
EAT 96
EAT 97
PEB Process Environment Block 98
PEB • MSDN 裡面是這樣寫的 … 99
PEB • 改用 windbg 來查看… 100
101
PEB • 取得 PEB • 32bit • FS:[0x30] • 64bit
• GS:[0x60] 102 Ref: https://en.wikipedia.org/wiki/Win32_Thread_Information_Block
PEB 103
PEB 104
PEB 105
PEB 106
PEB 107
PEB 108
PEB 109
PEB 110
PEB 111
PEB • 一直順著 linked list 爬下去 • 檢查 BaseDllName 是否為想用的模組
(dll / exe) • 通過 DllBase 取得該模組的 base address • 解析在 base address 的 PE format, 從 EAT 爬到想用的 API • Manual Symbol Resolution! 112
113 Q & A
114 下課囉 \(. _ .)>