Let me tell you a story.
I started reverse-engineering 25 years ago, and I did not speak English, I did not understand assembly, and I did not even have internet access at home. I was just a teenager.
I visited an internet cafe regularly to hunt for tutorials on how to reverse engineer. Everything was in English, and the number of available tools was limited.
I would download everything I could find: Crackmes, tutorials, tools, and save it on floppy disks.
Back then, I was using Soft ICE on Windows 95. IDA did not even have a GUI yet.
I learned English just to understand those tutorials. Most of them were written by hobbyist reverse engineers. There were mistakes sometimes, and a lot of what I studied was useless.
My understanding of the assembly language was just as low as my English skills.
If I were to start again, the only thing I would focus on at the beginning would be learning x86 Assembly. It slowed me down for years.
This is the most critical bit of advice I can give to someone who is getting started.
I struggled for three years because I did not know what to study first.
I did not know any method, and nobody was around to help me.
I spent countless hours on my own to get valuable knowledge and experience and finally knew both Assembly and English.
I created my own techniques to tackle different problems.
Fast forward 20 years later, we have the opposite of the problem I had: Too much information.
There are tons of video tutorials and articles in every language and dozen of tools to reverse engineer.
IDA free, Ghidra, xdbg64, Radare to list a few.
With all the overwhelming information available today:
- Where do we start?
- What should I learn first? What knowledge is critical to have?
- Should we watch every free video on youtube? Some of them are excellent, and many of them aren't leading anywhere.
In other words, it is difficult to identify where to focus our time to learn the fundamentals and become a skilled reverse engineer.
I have been teaching reversing at RECON since 2005 and spent the past 15 years polishing my training methods.
Learning software reverse engineering without going in every direction requires a well-defined plan to follow.