Can I decompile an existing installer?: Difference between revisions

From NSIS Wiki
Jump to navigationJump to search
Line 4: Line 4:
==Extraction Tools==
==Extraction Tools==
There are, however, external tools that allow this:
There are, however, external tools that allow this:
* Since version 4.42[may 2006] [http://www.7-zip.org 7-zip] supports decompressing NSIS installers. But it doesn't extract the compiled scriptcode.
* Since version 4.42[may 2006] [http://www.7-zip.org 7-zip] supports decompressing NSIS installers.<br />Since version 9.34 [Jun 2014] 7-zip is also able to extract the compiled scriptcode.
* The decompression plug-in '''InstallExplorer''' [http://www.totalcmd.net/plugring/installexplorer.html InstExpl.wcx] is also available for '''TotalCommander'''. Beside the files it'll create the file ''' 'script.bin' ''' compiled scriptcode.For use without the TotalCommander the [http://legroom.net/software/uniextract Universal Extractor] is a good option.
* The decompression plug-in '''InstallExplorer''' [http://www.totalcmd.net/plugring/installexplorer.html InstExpl.wcx] is also available for '''TotalCommander'''. Beside the files it'll create the file ''' 'script.bin' ''' compiled scriptcode.For use without the TotalCommander the [http://legroom.net/software/uniextract Universal Extractor] is a good option.<br />
 
Well since [Feb 2014] InstExpl suffers from problems naming file names and dirs correctly that were created with NSIS 3. ''That's because the implementation [http://sourceforge.net/p/sevenzip/bugs/1398 GetNSISString()] was slightly changed so names like $INSTDIR, $PROGRAMFILE ... inside strings are not expanded correctly.''
However at the moment[Feb 2014] these tools suffer from problems naming file names and dirs correctly that were created with NSIS 3.
''Since the implementation of the function [http://sourceforge.net/p/sevenzip/bugs/1398 GetNSISString()] was slightly changed names like $INSTDIR, $PROGRAMFILE ... inside strings are not expanded correctly.''


==Decompilers==
==Decompilers==

Revision as of 02:07, 26 February 2015

About

Currently NSIS installers cannot be fully decompiled. The installer itself doesn't provide any method to extract files or the script without installation. It is the developer's choice whether the source code and/or the files for the installer are available to the public or not.

Extraction Tools

There are, however, external tools that allow this:

  • Since version 4.42[may 2006] 7-zip supports decompressing NSIS installers.
    Since version 9.34 [Jun 2014] 7-zip is also able to extract the compiled scriptcode.
  • The decompression plug-in InstallExplorer InstExpl.wcx is also available for TotalCommander. Beside the files it'll create the file 'script.bin' compiled scriptcode.For use without the TotalCommander the Universal Extractor is a good option.

Well since [Feb 2014] InstExpl suffers from problems naming file names and dirs correctly that were created with NSIS 3. That's because the implementation GetNSISString() was slightly changed so names like $INSTDIR, $PROGRAMFILE ... inside strings are not expanded correctly.

Decompilers

It's a open source Python script that'll help you to nearly fully recover your NSIS-installation scripts. Its state is currently alpha - and so not very user friendly and it'll expect a 'script.bin' that'll come from InstExpl.wcx.

Protection against Decompilers

As a general note to software developers, you should use a plugin like DCryptDll if you need to protect certain files in your installer.

.. or if ya in the mood for compiling the NSIS have a look into nsis-3.xx-src\Source\exehead\fileform.h. Mixing up the order of the enum with all the EW_* a little bit as recommend in the Comment. It will mess up decompilers output that expect these tokes to be in the standard order.