Prerequisites (Foundational Knowledge)
Operating Systems & Computer Architecture
- Learn how OS works: processes, memory, system calls, file systems
- Study computer architecture (x86/x86_64/ARM):
- Registers, flags, stack, heap
- Recommended:
- “Computer Systems: A Programmer’s Perspective”
- “Operating Systems: Three Easy Pieces”
Programming Skills
- C and C++ (you’ll need this to understand compiled binaries)
- Assembly Language:
- x86 and x86-64 at minimum
- ARM if you’re interested in mobile/IoT RE
- Scripting: Python (for automating RE tasks)
Introduction to Reverse Engineering
Learn Basic RE Concepts:
- What is disassembly, decompilation?
- Static vs Dynamic Analysis
- Understanding binary formats: PE (Windows), ELF (Linux), Mach-O (macOS)
Tools:
- IDA Free / Ghidra / Binary Ninja (Disassemblers & Decompilers)
- x64dbg / OllyDbg / WinDbg (Windows Debuggers)
- radare2 / GDB / pwndbg (Linux Debuggers)
- Cutter (GUI frontend for radare2)
Static Analysis Skills
- Learn to read and interpret disassembled code
- Recognize standard library functions (e.g., strcmp, printf)
- Understand control flow graphs (CFGs), function prologues/epilogues
Focus Areas:
- String references
- API calls
- Code obfuscation techniques
Dynamic Analysis Skills
- Set breakpoints, step through code
- Modify registers, memory at runtime
- Trace system/API calls (e.g., with Procmon, strace, ltrace)
- Use frida, Valgrind, or unicorn for advanced instrumentation
Software Modifying
- Learn how to:
- Bypass checks or popup dialogs
- Modify control flow in binaries
- Patch binaries (with tools like Hiew, LordPE, or 010 Editor)
- Understand:
- Software protection mechanisms (packing, obfuscation)
- Anti-debugging techniques and how to bypass them
Leave a Reply