Slide 1

Slide 1 text

Reverse 0x2 阿是怎樣逆 YJK @ HackerSir 12/13

Slide 2

Slide 2 text

How to use GDB Outline 01 02 03 Dynamic Analysis Other Language Reverse

Slide 3

Slide 3 text

Dynamic Analysis

Slide 4

Slide 4 text

Dynamic Analysis • 將程式執行觀察程式行為並分析 • 建議在虛擬環境

Slide 5

Slide 5 text

Why Dynamic Analysis • 如果執行完某個函式發現有些數值變化,代表有可能是關鍵 • 可以透過 debugger 跳過或繞過某些部分,甚至跳到重點 • 設定中斷點,觀察暫存器、記憶體 • 動態修改數值,使數值成立 • 用工具紀錄程式行為

Slide 6

Slide 6 text

Dynamic Analysis Tool GDB • GNU Debugger • 互動式的 shell • CLI x64dbg • For Windows • GUI • x32dbg WinDbg • 微軟開發 • 對 Windows 相容性較高 • GUI

Slide 7

Slide 7 text

上週內容補充

Slide 8

Slide 8 text

Why strace • 追蹤 system call 和 signal • ls command 是如何實現

Slide 9

Slide 9 text

Why ltrace • 追蹤使用函式庫 • ls command 是如何實現

Slide 10

Slide 10 text

Practice • static or dynamic

Slide 11

Slide 11 text

GDB

Slide 12

Slide 12 text

GDB • GNU Debugger • GNU 系統中的標準除錯器 • 許多類 UNIX 系統都可以使用 • 支援許多語言,包括 C、C++ 等

Slide 13

Slide 13 text

GDB Plugin • peda • pwndbg • gdbgui • gef

Slide 14

Slide 14 text

How to use GDB • gdb ./[執行檔] • 會發現 gdb 開始執行你的程式

Slide 15

Slide 15 text

GDB - run • 執行程式 • run、r

Slide 16

Slide 16 text

GDB - breakpoints • 設定中斷點,可以是函式、記憶體位置、行數 • break [中斷點]、b [中斷點] • ex: b main

Slide 17

Slide 17 text

GDB - continue • 程式中斷後再執行 • continue、c

Slide 18

Slide 18 text

GDB - backtrace • 追蹤 stack 的狀態 • backtrace、bt

Slide 19

Slide 19 text

GDB - disassemble • 反組譯執行的程式 • disas

Slide 20

Slide 20 text

GDB - next instruction • 下一步指令 • ni

Slide 21

Slide 21 text

GDB - step instruction • 下一步指令 • si

Slide 22

Slide 22 text

GDB - si vs ni • 遇到函式的操作 • ni 會將函式直接執行 • si 會跳進函式 si ni

Slide 23

Slide 23 text

GDB - finish • 結束函式 • finish、fini

Slide 24

Slide 24 text

GDB - information • 顯示暫存器、函式、中斷點...資訊 • info functions、breakpoints

Slide 25

Slide 25 text

GDB - Examine • 列出記憶體資訊 • x $rax、x 0x7fffffffd9b8

Slide 26

Slide 26 text

GDB - Examine • 特定格式將記憶體印出 • x/
• 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)…

Slide 27

Slide 27 text

GDB - Examine

Slide 28

Slide 28 text

GDB - Delete • 刪除中斷點 • delete、del、d 刪除全部 • delete、del、d 刪除特定中斷點

Slide 29

Slide 29 text

GDB - jump • 直接讓指令跳轉到指定位址 • jump LOCATION • jump read_flag、jump *0x00000000080015c2

Slide 30

Slide 30 text

GDB - help • 查看有什麼參數 • help、help <指令>

Slide 31

Slide 31 text

初步使用 GDB • 先將程式執行 • b main • r • 後面再看該怎麼做

Slide 32

Slide 32 text

Practice • GDB

Slide 33

Slide 33 text

Java Reverse

Slide 34

Slide 34 text

Bytecode • 像是 x86、ARM 一樣的指令格式 • 一種中間語言 • 只需要編譯一次,如果有相對應的 VM 就可以執行 (ex: JVM) • 比前面的 asm 相對好逆向

Slide 35

Slide 35 text

Operation code • Opcode、instruction code • 與 asm 中的 mov、lea… 類似

Slide 36

Slide 36 text

Operation code • ldc: 將常數載入到 stack 上 • astore_1: 將資料儲存到區域變數索引值 = 1 的位置 • aload_1: 將區域變數索引值 = 1 的資料載入到 stack 上

Slide 37

Slide 37 text

Virtual Machine?

Slide 38

Slide 38 text

Virtual Machine?

Slide 39

Slide 39 text

Virtual Machine?

Slide 40

Slide 40 text

Virtual Machine System Virtual Machine • 完整系統 (ex: Ubuntu、kali、Windows) • Hypervisor • ex: VMWare、VirtualBox Process Virtual Machine • 專門提供給特定架構 • 環境提供執行某個特定架構的程式 • ex: JVM (Java Virtual Machine)

Slide 41

Slide 41 text

Java • 編譯成 bytecode 形式 • 在 JVM 上執行 • 只要有對應的環境就可以執行

Slide 42

Slide 42 text

How Java Works? source code (.java) Java Compiler (javac) Java ByteCode (.class) JVM JVM Windows Linux

Slide 43

Slide 43 text

How to compile and run

Slide 44

Slide 44 text

Java disassemble • 安裝好 JDK 後有個指令 javap • javap • Options: -c Disassemble the code • javap –c main

Slide 45

Slide 45 text

Java decompile • JD-GUI • Procyon • CFR • JD-Core • Jadx • Fernflower • JAD • Online-tool

Slide 46

Slide 46 text

Decompile .jar or .class • 選擇一個 .class 或是 .jar • 底下選項不用特地改變 • 上傳並反編譯

Slide 47

Slide 47 text

How to solve and get flag • 靜態分析 • 修改程式碼 • Online-tool

Slide 48

Slide 48 text

Practice • BAD FLAG CHECKER

Slide 49

Slide 49 text

Bonus

Slide 50

Slide 50 text

.NET • 跨平台、免費、open source

Slide 51

Slide 51 text

.NET Decompile • dnSpy • Debugger & decompiler • 可以靜態分析也可以動態分析

Slide 52

Slide 52 text

更多題目 • picoCTF • Hackme CTF

Slide 53

Slide 53 text

No content