It seems that you're using an outdated browser. Some things may not work as they should (or don't work at all).
We suggest you upgrade newer and better browser like: Chrome, Firefox, Internet Explorer or Opera

×
I am also interested in this, and started a project in Python which I am hosting on github: https://github.com/lkraider/innounpy

I am stuck on the right LZMA parameters, I can actually extract setup-0 partially, but still get some decoding errors.
avatar
lkraider: I am stuck on the right LZMA parameters, I can actually extract setup-0 partially, but still get some decoding errors.
More recent versions of InnoSetup are storing packed game data inside .exe resources. I noticed that they're accessed using functionality built into Windows (kernel.dll if I'm not mistaken). So, in order to extract the packed installer data, you first need to find the data resources using some platform independent way. I havent't checked on how to do this.
Yes, I bumped into that issue. Thankfully there's a PE binary resource extractor already available for Python, so it made my job easier :)

I am currently collaborating with Xyem on figuring all the data offsets and such, and to help on that I am creating a parser for the Pascal struct files that will convert them to an easy to read JSON format so we don't have to hardcode too much of that into our scripts, and also to have support to the many Inno Setup versions.
Hi, I also started writing an extractor for Inno Setup installers a few months ago and have finally polished it enough to upload the source code: https://github.com/dscharrer/InnoExtract

It's written in C++ using Boost and liblzma from xz-utils and can list and extract files from any Inno Setup installers i have found so far. I have tested with:
- All installers from http://www.jrsoftware.org/isdl.php
- The extended installer from http://isx.wintax.nl/
- A few gog.com installers: Baldur's Gate, Arx Fatalis, The Witcher

There isn't any advanced functionality yet the way filenames are mapped is completely hardcoded, but it should be enough for packaging.

If you still want to continue with your python- / perl-based unpackers, this should at least help you figure out some of the format oddities.
Cool, I'll definitely take a look at your code. My current effort is on mapping the Pascal structures to an easy parseable format, so the code can adapt to different InnoSetup versions, I have the first output available here: https://github.com/lkraider/innounpy/blob/master/structs/Struct5203.json
Looks like a lot has been going on here!

In the meantime, I wrote my own unpacker in Perl.
It currently supports only a subset of the various Inno releases, namely the one GOG uses (5.2.3). LZMA and zlib decompression are working, bzip2 is untested.

You can find the code on https://github.com/onitake/uninno.
It needs IO-Compress and xz (apt-get install libio-compress-perl xz on Debian/Ubuntu).

Tested games:
Syndicate (works with freesynd)
Ultima VII (works with exult)

Games, for which I only tested extraction:
Broken Sword 1 Director's Cut
Fallout 1
Ultima VIII (should work with pentagram)
Post edited October 16, 2012 by onitake
Since GOG recently switched to Inno Setup 5.5.0, my unpacker wasn't working any more.
So, I wrote a code generator that produces unpacking routines from the original Delphi code. It should now correctly handle IS 5.5.0 and I've tested some GOG installers with success.