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 0x2@HackerSir 10th
Search
YJK
August 31, 2024
0
3
Reverse 0x2@HackerSir 10th
YJK
August 31, 2024
Tweet
Share
More Decks by YJK
See All by YJK
你 PWN 不動我@HackerSir 10th
yjk0805
0
4
Reverse 0x1@HackerSir 10th
yjk0805
0
5
不要亂 PWN 我@HackerSir 10th
yjk0805
0
6
Assembly@HackerSir 10th
yjk0805
0
5
Featured
See All Featured
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
47
5.1k
Art, The Web, and Tiny UX
lynnandtonic
298
20k
Code Review Best Practice
trishagee
65
17k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
10
810
Build your cross-platform service in a week with App Engine
jlugia
229
18k
Bash Introduction
62gerente
608
210k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
356
29k
A Philosophy of Restraint
colly
203
16k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
2
170
Making the Leap to Tech Lead
cromwellryan
133
9k
jQuery: Nuts, Bolts and Bling
dougneiner
61
7.5k
Why You Should Never Use an ORM
jnunemaker
PRO
54
9.1k
Transcript
Reverse 0x2 阿是怎樣逆 YJK @ HackerSir 12/13
How to use GDB Outline 01 02 03 Dynamic Analysis
Other Language Reverse
Dynamic Analysis
Dynamic Analysis • 將程式執行觀察程式行為並分析 • 建議在虛擬環境
Why Dynamic Analysis • 如果執行完某個函式發現有些數值變化,代表有可能是關鍵 • 可以透過 debugger 跳過或繞過某些部分,甚至跳到重點 •
設定中斷點,觀察暫存器、記憶體 • 動態修改數值,使數值成立 • 用工具紀錄程式行為
Dynamic Analysis Tool GDB • GNU Debugger • 互動式的 shell
• CLI x64dbg • For Windows • GUI • x32dbg WinDbg • 微軟開發 • 對 Windows 相容性較高 • GUI
上週內容補充
Why strace • 追蹤 system call 和 signal • ls
command 是如何實現
Why ltrace • 追蹤使用函式庫 • ls command 是如何實現
Practice • static or dynamic
GDB
GDB • GNU Debugger • GNU 系統中的標準除錯器 • 許多類 UNIX
系統都可以使用 • 支援許多語言,包括 C、C++ 等
GDB Plugin • peda • pwndbg • gdbgui • gef
How to use GDB • gdb ./[執行檔] • 會發現 gdb
開始執行你的程式
GDB - run • 執行程式 • run、r
GDB - breakpoints • 設定中斷點,可以是函式、記憶體位置、行數 • break [中斷點]、b [中斷點] •
ex: b main
GDB - continue • 程式中斷後再執行 • continue、c
GDB - backtrace • 追蹤 stack 的狀態 • backtrace、bt
GDB - disassemble • 反組譯執行的程式 • disas
GDB - next instruction • 下一步指令 • ni
GDB - step instruction • 下一步指令 • si
GDB - si vs ni • 遇到函式的操作 • ni 會將函式直接執行
• si 會跳進函式 si ni
GDB - finish • 結束函式 • finish、fini
GDB - information • 顯示暫存器、函式、中斷點...資訊 • info functions、breakpoints
GDB - Examine • 列出記憶體資訊 • x $rax、x 0x7fffffffd9b8
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)…
GDB - Examine
GDB - Delete • 刪除中斷點 • delete、del、d 刪除全部 • delete、del、d
<id> 刪除特定中斷點
GDB - jump • 直接讓指令跳轉到指定位址 • jump LOCATION • jump
read_flag、jump *0x00000000080015c2
GDB - help • 查看有什麼參數 • help、help <指令>
初步使用 GDB • 先將程式執行 • b main • r •
後面再看該怎麼做
Practice • GDB
Java Reverse
Bytecode • 像是 x86、ARM 一樣的指令格式 • 一種中間語言 • 只需要編譯一次,如果有相對應的 VM
就可以執行 (ex: JVM) • 比前面的 asm 相對好逆向
Operation code • Opcode、instruction code • 與 asm 中的 mov、lea…
類似
Operation code • ldc: 將常數載入到 stack 上 • astore_1: 將資料儲存到區域變數索引值
= 1 的位置 • aload_1: 將區域變數索引值 = 1 的資料載入到 stack 上
Virtual Machine?
Virtual Machine?
Virtual Machine?
Virtual Machine System Virtual Machine • 完整系統 (ex: Ubuntu、kali、Windows) •
Hypervisor • ex: VMWare、VirtualBox Process Virtual Machine • 專門提供給特定架構 • 環境提供執行某個特定架構的程式 • ex: JVM (Java Virtual Machine)
Java • 編譯成 bytecode 形式 • 在 JVM 上執行 •
只要有對應的環境就可以執行
How Java Works? source code (.java) Java Compiler (javac) Java
ByteCode (.class) JVM JVM Windows Linux
How to compile and run
Java disassemble • 安裝好 JDK 後有個指令 javap • javap <options>
<classes> • Options: -c Disassemble the code • javap –c main
Java decompile • JD-GUI • Procyon • CFR • JD-Core
• Jadx • Fernflower • JAD • Online-tool
Decompile .jar or .class • 選擇一個 .class 或是 .jar •
底下選項不用特地改變 • 上傳並反編譯
How to solve and get flag • 靜態分析 • 修改程式碼
• Online-tool
Practice • BAD FLAG CHECKER
Bonus
.NET • 跨平台、免費、open source
.NET Decompile • dnSpy • Debugger & decompiler • 可以靜態分析也可以動態分析
更多題目 • picoCTF • Hackme CTF
None