What is Reverse Engineering?

46

I often say that I do not get along very well with terms.

These days ago I had to do an operation on a particular PHP framework called Laravel , where I needed to find a resource that would allow me to use an existing database and cause it automatically generated the models and migrations of the application through the tables in that database.

Generally, the opposite is true: You generate models and migrations , which in turn generate the database.

I did several searches on the internet to find what I wanted, but I did not find it. Until I used the term Database Reverse Engine for Laravel , and found what I was looking for.

Until then I was not so familiar with the term, thinking of dealing with something far removed from my day-to-day programming. But it seems that was not true.

What I understand from my experience is that Reverse Engineering is about using what was generated to create the generator. Correct me if I'm wrong.

That's why I came here to ask: What exactly is Reverse Engineering?

Note: I will not include the tag php or laravel , because it is not the subject, it was just an example.

    
asked by anonymous 12.02.2016 / 11:38

4 answers

34

Reverse engineering, in layman's terms, is nothing more than figuring out how the program works with the finished program.¹

To perform reverse engineering you should review the finished product and check "how it was built". Like the @rray said in the comments , the crack of games is a good example of this. Of course, made for "evil" (for manufacturers and well for us, lol), but it is a great example.

There are reports that companies use reverse engineering to check competitors' products, whether in software or not. Like the eternal fight between Apple vs. Samsung on information theft and patent infringement fits in this medium. In this case we can see that reverse engineering is not limited only in codes, but in several areas, in this specific example, hardware as well.

But, is it difficult to do Reverse Engineering?

It depends a lot on your qualities and what you want to do.

An easy example is to use .NET Reflector to get the source code for dll's .NET. See an example image below.

InthisexampleI'mjustcheckingwhat'sbehindMicrosoft'sSystem.Xml.Linq.dlldll.Thiswasonlypossiblewith2clickswiththeprogram,nothingdifficult,donotyouagree?

Andre-engineering,isitthesamething?

Todaythereisalotofconfusionaboutreverseengineeringandre-engineering(refactoring).Re-engineeringisnothingmorethantoexamineafinishedproductandbuildagain,butwithimprovements¹.

Inshort,reverseengineeringgetsyoudoneasitwas,whateverthepurpose,DarkSideornot.Alreadyinre-engineeringyoujustgetbetter,andyoudonotnecessarilyneedreverseengineeringtogetthesources.

Areyousayingthateveryonehasaccesstomysourcesthen?

Inaway,yes.Youcannot"fail" to get your code, but to make it difficult.

This question from @Math has excellent answers about this, so I will not go into more detail. : p

¹ What is the difference between re-engineering and reverse engineering?

    
12.02.2016 / 14:01
19

It is the reverse flow of engineering a solution.

The traditional flow can be expressed as follows:

Specification > Architecture >

Reverse engineering, in this case, is when the specification is deduced from the behavior :

Behavior Behavior

This is a principle widely used in implementing solutions as a consequence of several situations:

  • A legacy solution that can not be further changed directly still needs to receive data entry: A professional can analyze the API or application interfaces, and write a solution that publishes data in the expected format. (This process is so frequent that it even gets a name: Brokerage .)
  • A solution based on Web APIs may have its behavior studied, and new clients can be written (example cases: DropBox , Yik Yak )
12.02.2016 / 15:01
17

Reverse Engineering is the process of, from the outset, understanding the parts, the functioning, the principles of something. It is a term that was coined for hardware, however, it is widely applied to software.

Example: When you dismantle a radio you can understand a lot about how it works. What electronic components it uses, how these components are interconnected, the modules, and so on. It is very common for companies to buy other devices to disassemble and understand the types of components that have been used. In the war between Apple and Samsung several cell phones were destroyed for that purpose.

In software, this term is applied across multiple contexts. Examples are not missing:

  • Generate database creation codes from tables and relationships already created;

  • Understand a specific network protocol from the network packets. A classic example is Samba, a software that allows Linux operating systems to share files and printers with Windows machines.

  • Understand a specific file format. A classic example is OpenOffice because it can open spreadsheets and Office documents (especially before Office 2007, since it was a binary format).

12.02.2016 / 12:34
16

Reverse engineering is the opposite process from the usual either in software development or not, from something already generated get access or find out how something was done without having the internal knowledge or is how to identify the components, the form / order of mounting a black box, this can be done in whole or in part.

Examples:

  • Some softwares can get a .jar and turn it into a plain text file.

  • CASE tools or sometimes IDEs can generate class diagram from source code.

12.02.2016 / 11:45