Category: 

What does It Mean to Decompile a Software Program?

Article Details
  • Written By: Ken Black
  • Edited By: Bronwyn Harris
  • Last Modified Date: 06 September 2016
  • Copyright Protected:
    2003-2016
    Conjecture Corporation
  • Print this Article
Free Widgets for your Site/Blog
Roughly one-fifth of the world's stock of gold - worth over $200 billion USD - is stored under the streets of London.  more...

September 30 ,  1949 :  The Berlin Air Lift ended.  more...

To decompile software means to take that software and change the language it is written in to something that is more understandable to humans. It does this by taking the language of the original program and changing it into a source code that can be better understood. If done correctly, when a person attempts to decompile software, he or she can create a program that acts very similar, if not exactly like, the original software.

There are many programs which can be used to decompile software. Some of these programs have legitimate uses and others do not. It should be noted that anyone attempting to decompile software for illegal purposes could be in violation of stealing intellectual property, which is a punishable by criminal statute in many countries.

In fact, making pirated copies of software, or making a product that has the same function as the original software, may be the most common reason to decompile software. This is because it may be possible to use a software decompiler to strip the software of its anti-copy protection. Thus, anyone who can successfully decompile software in such a way has an unlimited ability to make copies of the program.

Ad

While many companies would like to see computer programs that decompile software outlawed for that reason alone, there are some legitimate uses for software decompilation as well. Those include finding bugs in the program, finding malware and checking code. In addition, using a program to decompile software can act as a learning aid for students studying programming. These instances can be very valid reasons to decompile software.

Often, a decompiler can be a useful tool for those who are dealing with open source software, who may want to add to a certain program's features or value. In this case, a decompiler can aid substantially in the progress toward rewriting, or adding to, the program. However, this is far different than decompiling a program from a major software manufacturer, most of which are protected by license agreements and anti-copy code.

It should be noted that decompiling software does not mean just to disassemble a program, though the name may suggest that is the only thing being done. The translation part of the decompilation is also very important. Often, once it is translated, it is then compiled back together to see if the desired results have been obtained. If not, further work may need to be done.

Ad

You might also Like

Recommended

Discuss this Article

Charred
Post 4

At work the graphic designer does a lot of animations in Flash. Sometimes she’ll use animations that already exist out on the Internet as her starting point or baseline for inspiration. She has a SWF decompiler (this is the default format for Flash) which lets her decompile Flash animations.

As a result she winds up with all of the images, symbols, animations, etc., as separate entities which she can manipulate to create brand new animations. She makes enough changes of course so that the new animation doesn’t resemble the old one and infringe on copyrights. It just saves her a lot of work and time.

MrMoody
Post 3

@miriam98 - Yes, that’s true of .NET. That’s because .NET creates an intermediate library like JAVA before creating the actual run-time.

However, it’s a little more difficult to decompile VB applications. Visual Basic does not use a publicly exposed class library like .NET does. It’s my understanding that it’s virtually impossible to accurately decompile VB applications from the executable program.

I’ve tried some so-called decompilers for VB and they just make a sloppy mess of things in my opinion. There’s so much cleanup work you have to do that it would be easier to rebuild the application from scratch.

miriam98
Post 2

I sometimes hear on the computer programming forums if it’s possible to decompile NET programs. The answer is yes. The .NET framework creates an intermediate file that shows you all the classes and stuff that are in the program.

As a matter of fact, .NET itself ships with its own utility that lets you peek inside the assembly (the program) and see all of the classes and functions. They’re in a slightly altered form syntactically, but you can still get a general idea of what’s going on. I use it myself and find it to be a really great learning tool.

Some people have raised howls of protest about this capability, saying that it’s easier for hackers to break into applications developed for the .NET framework. However, you can use a tool called an obfuscator which will make your application unreadable with any utility.

Mammmood
Post 1

I’m not sure that a decompiler would really be needed for open source software. The reason is that most open source software applications come with their own source code.

You don’t need to decompile the executable – just look at the source, make your changes there, and then compile a new executable.

Open source is meant to be easily modified so that’s why they give you the source code. There’s no need for a decompiler. Personally, I never use the source – I just download the executable program because I have no need to modify the program myself.

Post your comments

exception 'Exception' with message 'error writing captcha: Duplicate entry '2147483647' for key 'PRIMARY'' in /ssd/www/wisegeek/public_html/_core/classes/public/Captcha.php:44
Stack trace:
#0 /ssd/www/wisegeek/public_html/_core/controls/public/ControlDiscussionPostBox.php(324): Captcha->createCaptcha()
#1 /ssd/www/wisegeek/public_html/framework/classes/Control.php(104): ControlDiscussionPostBox->preRender(false)
#2 /ssd/www/wisegeek/public_html/framework/classes/Control.php(149): Control->render()
#3 /ssd/www/wisegeek/public_html/tpl/default-nocustom-lu/pages/public/article/article.htm(526): Control->__toString()
#4 /ssd/www/wisegeek/public_html/framework/classes/Control.php(300): require('/ssd/www/wisege...')
#5 /ssd/www/wisegeek/public_html/framework/classes/Control.php(309): Control->requireTpl('pages/public/ar...', Object(PageArticleCom), true)
#6 /ssd/www/wisegeek/public_html/framework/classes/Control.php(131): Control->renderTpl('pages/public/ar...', Object(PageArticleCom))
#7 /ssd/www/wisegeek/public_html/framework/classes/FormDataControl.php(87): Control->renderTemplate()
#8 /ssd/www/wisegeek/public_html/framework/classes/Control.php(109): FormDataControl->renderTemplate()
#9 /ssd/www/wisegeek/public_html/framework/classes/ScriptPage.php(50): Control->render(false)
#10 /ssd/www/wisegeek/public_html/framework/classes/Control.php(149): ScriptPage->render()
#11 /ssd/www/wisegeek/public_html/framework/classes/Page.php(97): Control->__toString()
#12 /ssd/www/wisegeek/public_html/_core/classes/public/PublicFrontController.php(443): Page->processRequest()
#13 /ssd/www/wisegeek/public_html/_core/classes/public/PublicFrontController.php(7): PublicFrontController->renderPage()
#14 /ssd/www/wisegeek/public_html/index.php(11): PublicFrontController::run()
#15 {main}