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
2
Reverse 0x2@HackerSir 10th
YJK
August 31, 2024
Tweet
Share
More Decks by YJK
See All by YJK
你 PWN 不動我@HackerSir 10th
yjk0805
0
2
Reverse 0x1@HackerSir 10th
yjk0805
0
2
不要亂 PWN 我@HackerSir 10th
yjk0805
0
5
Assembly@HackerSir 10th
yjk0805
0
5
Featured
See All Featured
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
329
21k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
226
22k
No one is an island. Learnings from fostering a developers community.
thoeni
19
3k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
26
1.4k
Fireside Chat
paigeccino
34
3k
Optimising Largest Contentful Paint
csswizardry
33
2.9k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
169
50k
Writing Fast Ruby
sferik
627
61k
Being A Developer After 40
akosma
87
590k
Speed Design
sergeychernyshev
25
620
What’s in a name? Adding method to the madness
productmarketing
PRO
22
3.1k
Scaling GitHub
holman
458
140k
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