[EN] Reverse Engineering & Decompile Program

Disclaimer: everything written is only for educational purposes and nothing else. The writer doesn't responsible for whatever case that you might be using and every illegal and prohibited action should be taken accordingly to the law.

Image by securitytoday.com

What is reverse engineering?

Reverse engineering is an act, process, or method in an attempt to understand through deductive reasoning how a previously made program, device, process, or system is in order to get insight into whatever the purpose it will serve. Reverse engineering has so many fields that may apply and there are so many reasons for performing reverse engineering in various fields. But we will only limit the topic to software reverse engineering.

Imagine a compiled program, packed neatly and you just wondered how they can achieve these whole features only by programming. You may wonder what kind of logic behind the program, and what you have to do is take a peek into the code, but when it comes to a compiled program, you need to reverse engineer it by decompiling it. Not every program can be decompiled, but some of them, such as Delphi, .NET/ C#, C, and Visual Basic can. You can refer more to this answer on StackOverflow https://stackoverflow.com/a/273248

But, what's the real purpose? You get access to their codes. It totally depends on you about what will you going to do next after the codes are in your hand. It's generally legal unless you violate some illegal access in order to get it on your hand. As a competitor, usually, people use the codes for evaluation, trying to understand and make an innovative copy of their own. They study the code to make it their own. It's actually pretty standard, it's just similar to those codes solutions you've found online, but you got to dig deeper in order to retrieve it.

My experiences...

Nothing fancy or illegal. With our bad git versioning back then on the past company I've used to work with, it's really, really, awful when someone actually deletes a few lines of your codes, at least accidentally. Our very 'versioning' was replacing the entire code with my coworker's newer 'updates'. Never let someone do this without your supervision, better yet, please use a goddamn git versioning. One day I got back to the apps and realized at least two features were missing. No backup, no nothing. That's why do git versioning on your codes kids. They can also git-blame someone who deleted your code and roll back to a certain version in case you or anybody messed up the new feature. Because codes will definitely break.

After two minutes of emotional breakdown and being internally dying, I looked for a way to get back those codes that I used to write. Lines of important features that even I'm too lazy to even repeat again because it's about measuring two-point map code using coordinates and finding a bearing point and I don't even remember anything else related to that matters. Luckily, we wrote the whole codes in C#. We can actually decompile it using dotPeek. I got it back minutes later, everyone's happy, well, I'm not. We should've use git no matter what.

In another different case, we worked with a cross-nation company and there's probably a language barrier because when I asked for the source code she's actually or supposedly understand but she's only explained how things work when I think it's easier for me to know how's the logic behind it works by taking a look into the code. The long short story they eventually allow me to have access to the source, but I'm unable to reach for them because of the time zone difference. Meanwhile, we need it to be ready by tomorrow. I don't understand why am I here, with three half-ass made applications, alone on my own because my coworker has no idea how it works. Well, I barely know how it works too.

Again, it's C#, I decompiled it, took a look into the code, finally get a grasp for technologies I barely understand at that moment and was able to get the machine to work as it was supposed to be even though I needed to stay for hours there. Magic always happens in the last moment, but I do not wish to desperately yearn for it again.