Game Reversing. Discord: muffin#0640

How to become a full stack reverse engineer?

I’d like to paste a guide to becoming a full stack reverse engineer by one of my favorite reverse engineers, Cody “Daeken” Brocious:

1) Read: Reversing by Eldad Eilam

2) Learn Assembly (atleast one architecture)

2a) Do: write some C, compile it, disassemble, hand-decompile to C.

2b) Have a friend write and compile some C, then disassemble and hand-decompile it and have friend check your work

3) Do: Pick a game. Reverse-engineer its archive format and write an unpacker

4) Do: Reverse-engineer the 3d model format for a game

5) Read: The Dragon Book (Compilers by Aho et al)

6) Do: Write a compiler from some high-level language (feel free to make one up) to another (good candidates: JavaScript, Python, Ruby)

7) Do: Write an assembler

8) Do: Write a compiler from some language down to assembly

9) Read: Reverse Compilation Techniques by Cifuentes

10) Do: Write a decompiler for CIL and/or Dalvik bytecode

11) Do: Write a decompiler for ARM (doesn’t have to be ARM, but it’s consistent and relatively sane)

12) Read: The osdev wiki, until your eyes can’t focus anymore

13) Do: Write a toy kernel

14a) Do: Write it again, with slightly less suck

14b) Do: Port your kernel to a different platform

15) Do: Pick a well-known platform and write an interpreting emulator

15a) Do: Add a recompiler

16) Do: Pick a slightly-unknown platform

16a) Read: Everything you can find about it.

16b) Do: Begin writing an emulator.

16c) Read: All the assembly you can find, for bits that aren’t known.

17) Keep Learning & Practicing.

Video Version