Reverse-engineering: introduction
In this series of articles, I will discuss the techniques and tools for reverse-engineering computer programs. This is my own personal take on a subject that is as much art as it is science and, as such, may differ from how others would approach it.
We will assume that the reader knows how to program in the C programming language and can read assembly code, but not necessarily the specifics of the target platform we will be using.
Performing acts of reverse-engineering may have legal issues surrounding them depending on your jurisdiction. Such issues will not be covered here.
The files for this case study can be found here: case-study.tar.gz
- Reverse-engineering: introduction
- Reverse-engineering part 1: the toolchain workflow
- Reverse-engineering part 2: building our case study
- Reverse-engineering part 3: introspecting with the toolchain
- Reverse-engineering part 4: running our case study
- Reverse-engineering part 5: old-school binary patching
- Reverse-engineering part 6: crash course on binary patching with Ghidra
- Reverse-engineering part 7: setting up the stage for delinking (training wheels edition)
- Reverse-engineering part 8: baby's first steps with delinking
- Reverse-engineering part 9: look Ma, no relocations!
- Reverse-engineering part 10: with a little help from my extension