What types are those set-up EXE files that have a big [0], and how to extract them?

In many cases, 7Zip can show the content of an installer ZIP file, so that I can just extract them and use them without running the set-up EXE. When 7Zip can't, it is usually Inno set-up, and I use the InnoExtractor to do that.

One type of set-up EXE I from time to time encounter is this thing below. It has a big [0] file in it and 7Zip cannot show the actual files. 7Zip cannot open the [0] file either, but the content of [0] is like below.

What type is this set-up, and is there any tool to extract the files? (I hate running installers, because they alters my system.) The image below is the set-up EXE of OpenShot Video Editor.

enter image description here enter image description here


Solution 1:

Some setup executables just literally have an installer executable combined with a generic .zip or .cab archive in the same file – 7-zip will recognize those without needing to do anything special, it just finds the ZIP header and starts from there. (InstallShield has its own specific archive format, but it has an archive format nevertheless.)

However, this is not in any way guaranteed for setup executables – they can store the packaged files in any way they want. They can invent their own packing format (after all, the setup executable comes with the correct unpacker anyway), they can store each file in the "resource" section, they can even store some files in the program code section – there's nothing that strictly defines how a setup executable should work.

For some other setup executables (such as NSIS), 7-zip actually has a special handler just for that kind of installer. But it would need a special handler for InnoSetup, WISE, and others too. And because it can't find a known archive in InnoSetup's setups and doesn't have a custom handler for InnoSetup either, it just opens the file as a generic .exe file (specifically, as a PE/COFF format file).

When you open in 7-zip an executable that doesn't contain an actual archive inside, what you're seeing is the various data "sections" that comprise an *.exe file in general. (For example, the .text section holds the machine code that'll get loaded into memory and executed on the CPU, the .data section holds initial values of all variables in the program, and the .rsrc section contains the program's icon, dialog layouts, translations, etc.) They aren't really files at all, that's only how 7-zip represents them.

So the [0], [1], etc. numbered "files" are just how 7-zip displays various additional, nameless sections in any generic .exe file. In the case of InnoSetup, that's where the "installable" files are stored in some format custom to InnoSetup, but 7-zip doesn't know that.