In this post I will share some of the benefits that becoming a better reverse-engineer has had on my software development. Unfortunately, reverse-engineering, or so-called “reversing” seems to occasionally be associated with “cracking,” which is essentially criminal activity associated with violating a program’s license agreements and making it do things that it was not intended to do. While yes, reverse-engineering can be used for this purpose, there’s much more to it than that. Additionally, it is often associated with reading assembly opcodes and deciphering binary files, which yes, that’s part of it… But if provided source-code, by all means, reversers will use that instead.
One immediate benefit that I’ve reaped from improving my reverse-engineering skills is, simply, it’s easier to learn from books and the code of others. Developers will relate that some of the toughest parts of programming involve digging through the poorly written, sometimes undocumented, legacy code of other programmers who conveniently are no where to be found. Blogs at sites like Medium.com and even organizations like Microsoft focus on the “latest and greatest,” but the reality is, most companies out there still have codebases which are years old, so learning how to more effectively work the code of others is a skill that will benefit any professional developer, beginner or expert. Improved deciphering skills also benefits when reading books… particularly overly verbose books. Lately, I find myself being able to skip over all the jargon and just read code examples, often extracting the main points precisely just from that. Of course I still skim the explanation just to confirm, but the ability to do this has improved my ability to learn concepts immensely. Equally so, being able to get on GitHub and read through a library and figure out what it’s doing in a timely manner has tremendous benefits as well.
And this is what reverse-engineering really is to me. It’s simply being able to look at a finished product, figuring out what each module does, and documenting it and/or using it to accomplish a goal. In some cases, the goal is cracking software or testing the system to find vulnerabilities, yes, but in others, it’s simply learning a way to do something more effectively or seeing how others do it.
This brings me into my final point, which is reversing is especially good for those who are self-taught or independent learners. Often a tough part of being an independent learner is “finding a mentor.” Well, using reverse-engineering techniques can even act as a mentor in ways… Just find some good engineers and study/reverse their code and you’d be surprised how much you learn. I certainly am and the skill has been a blessing. So how do you improve your reversing skills? Just start doing it! Make it a point once a week to read and study code that you didn’t write, without reading documentation, and try to figure out what it does, module by module. Focus on improving the process of breaking down the code and figuring it out- rather than the conclusion – which is what the code does. Essentially, you’ll be taking an often dreaded task and making something fun, educational, and beneficial out of it. Give it a shot.