Athena Wiki

Reverse Engineering

reversingbeginner

Index of all reversing pages - static analysis, dynamic analysis, decompilers, and platform-specific techniques.

reversingindexoverviewrebinary-analysis

Reverse Engineering

Reverse engineering (RE) challenges give you a compiled binary. Your goal: understand what it does, find the flag, or generate valid input that makes the program print "Correct!". Unlike pwn (where you exploit memory bugs) or web (where you attack services), RE is about understanding compiled code — reading assembly, decompiling to pseudocode, and reversing algorithms.

The key insight: you don't need to understand every instruction. You need to find the comparison, understand what's being compared, and extract the answer.


Pages in This Section

PageDifficultyWhat You'll Learn
Static AnalysisBeginnerAnalyze without running: strings, objdump, Ghidra
Dynamic AnalysisIntermediateDebug and trace at runtime: GDB, strace, ltrace
DecompilersBeginnerGhidra, IDA, Binary Ninja, dnSpy comparison
ELF BinariesBeginnerLinux binary format analysis
PE BinariesIntermediateWindows binary format analysis
CrackmesBeginnerLicense check methodology — the core RE challenge type
Anti-DebuggingIntermediateDetect and bypass anti-debug tricks
ObfuscationIntermediateIdentify and defeat code obfuscation
ARM ReversingIntermediateMobile/embedded ARM binaries
MIPS ReversingIntermediateRouter/IoT MIPS binaries
Android APKIntermediatejadx, apktool, Frida for APK challenges
WASM ReversingIntermediateWebAssembly analysis

The Universal First Step

Before opening a decompiler, run these commands on every challenge binary:

file ./binary                                              # what is it?
checksec --file=./binary                                   # what protections?
strings ./binary | grep -iE "(flag|ctf|correct|wrong|pass)" # quick win
ltrace ./binary <<< "test"                                 # see library calls

strings and ltrace alone solve a surprising number of beginner RE challenges. Don't overcomplicate things.

New to RE? Start with strings and ltrace — these two commands alone solve a surprising number of beginner CTF challenges without any deeper analysis.


Quick Methodology

Mermaid diagram

Learning Path

Beginner — Static Analysis

Start with strings, file, checksec, then learn Ghidra basics for decompilation. See Static Analysis and ELF Binaries.

Beginner — Crackmes & Decompilers

Apply the methodology to license-check challenges. Compare Ghidra, IDA Free, and Binary Ninja. See Crackmes and Decompilers.

Intermediate — Dynamic Analysis

Run binaries under GDB, strace, ltrace. Set breakpoints at comparisons. See Dynamic Analysis.

Intermediate — Anti-Debug & Obfuscation

Bypass ptrace checks, timing detections, and packed binaries. See Anti-Debugging and Obfuscation.

Specialized — Platform-Specific

Android APKs with jadx/Frida, ARM/MIPS embedded targets via QEMU, browser WASM, Windows PE. See Android APK, ARM Reversing, WASM, PE Binaries.


Tool Quick Reference

# File identification
file ./binary
xxd ./binary | head -20

# String extraction
strings ./binary
strings -n 8 ./binary
strings -e l ./binary    # UTF-16 (Windows)

# ELF inspection
readelf -h ./binary      # ELF header
readelf -S ./binary      # sections
readelf -s ./binary      # symbols
nm ./binary              # symbol table
objdump -d ./binary      # disassembly

# Decompilers
ghidra                   # GUI decompiler (recommended)
r2 -A ./binary           # radare2 CLI

Last updated on

On this page