{"id":23831902,"url":"https://github.com/onitake/uninno","last_synced_at":"2025-04-11T21:18:53.996Z","repository":{"id":4843684,"uuid":"5997920","full_name":"onitake/uninno","owner":"onitake","description":"Unpacking tool for Inno Setup installers","archived":false,"fork":false,"pushed_at":"2024-03-09T13:17:16.000Z","size":257,"stargazers_count":35,"open_issues_count":3,"forks_count":23,"subscribers_count":8,"default_branch":"master","last_synced_at":"2025-04-11T21:18:48.910Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Perl","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":"prerender/prerender","license":"bsd-2-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/onitake.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2012-09-28T13:50:31.000Z","updated_at":"2025-04-09T12:06:05.000Z","dependencies_parsed_at":"2025-01-02T17:00:23.356Z","dependency_job_id":null,"html_url":"https://github.com/onitake/uninno","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/onitake%2Funinno","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/onitake%2Funinno/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/onitake%2Funinno/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/onitake%2Funinno/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/onitake","download_url":"https://codeload.github.com/onitake/uninno/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248480439,"owners_count":21110939,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-01-02T14:10:28.714Z","updated_at":"2025-04-11T21:18:53.969Z","avatar_url":"https://github.com/onitake.png","language":"Perl","funding_links":[],"categories":[],"sub_categories":[],"readme":"# uninno\n\n## Introduction\n\nuninno is a portable unpacking tool for Inno Setup (IS) installers.\nIt was originally conceived as a means to extract the data files from\n[GOG.com (Good Old Games)](https://www.gog.com/) installer packages.\n\nBack in 2008, when GOG launched, they only offered repackaged versions\nof older DOS and Windows games for modern Windows systems.\nMany of these games can be played with emulators or engine rewrites on\na wide variety of systems, but this requires the game data in raw form.\n\nWith the help of uninno, GOG customers can play such games without\nrequiring access to a Windows system or Windows emulator.\n\nRecently, GOG also started supporting Linux and MacOS, and some games that\ncome packaged with an emulator (such as ScummVM) can also be downloaded\nfor non-Windows systems now.\n\nWhen new InnoSetup versions are released, support for them will\noccasionally be added to uninno. Note that uninno does not implement all\nfeatures that installers may use. In particular, more recent GOG.com\ninstallers no longer work, because they incorporate custom code to\nprocess the unpacked files.\n\n## Usage\n\nTo just use uninno as a Inno Setup extractor, run the uninno.pl utility.\n\n    $ ./uninno.pl setup.exe\n\nIt will extract all files from the application part of the installer archvive\nand put them into ./app\n\nVarious Perl modules are required. You can either install them from CPAN or\nusing your package manager (if available).\n\nThese are:\n* Switch\n* DateTime\n* Digest::CRC\n* IO::Uncompress::AnyInflate\n* IO::Uncompress::Bunzip2\n* Compress::Raw::Lzma\n* Crypt::RC4\n\nOn Debian/Ubuntu Linux, use the following command to install all dependencies:\n\n    $ sudo apt install libswitch-perl libdatetime-perl libdigest-crc-perl libcompress-raw-lzma-perl libtext-glob-perl libio-stringy-perl libcrypt-rc4-perl\n\n## Code\n\nuninno consists of a bunch of Perl packages that handle different stages of the\nanalysis and extractiong process. Dissection of the installer executable is\nprovided by Win::Exe, which has some submodules for each of the PE's parts.\nSetup::Inno provides a frontend for parsing the setup.0 (metadata) and setup.1\n(compressed files) parts of the Inno Setup installer.\n\nTo improve code reuse and facilitate handling of all the installer versions,\nall version-specific code is represented by a class hierarchy, starting with\na base class containing mostly stubs, continuing with support for the first\nopen source Inno Setup release (2.0.8), and going up to the most recent version.\nEach class in the hierarchy has override points that implement headers,\ndecompression and custom handling required for this version or its descendants.\n\nSecondary to that is a set of data structure parsers for each exact Inno Setup\nversion. These can be generated from the Inno source code, as outlined below.\n\nVersion numbers are coded in 4 digits: x.y.z -\u003e xyzz. The last version part has\ntwo digits and is zero padded. Example: 2.0.8 -\u003e 2008\n\nInno Setup has used many different compression algorithms in the course of its\nhistory, with varying degrees of compatibility with standard software.\nzlib, bzip2, LZMA and LZMA2 compression are supported by uninno, using\ncorresponding Perl modules.\nLZMA compression uses a lot of memory currently and performance is poor, as\nthe API of Compress::Raw::Lzma is very low-level and hard to use in a\nstraight-forward way. A better implementation may be written in the future.\n\nStarting with support for Inno Setup 5.5.0, a new approach is used to create the\nvarious structure parsers. Using a custom Delphi grammar based on an old edition\nof the Delphi Language Guide, Projects/Struct.pas from the Inno source code\nis processed and dissected. Then, a Perl module is generated that can parse\nbinary data represented by the data structures in that file. The grammar can be\nfound in DelphiGrammar.pm, the code for the generator is in ParserGenerator.pm.\n\nTo generate a new parser, you need the Perl module Marpa::R2. You also need the\nspecific Inno Setup Struct.pas you would like to implement support for.\nThe makeissrc.pl utility can clone the official git repository for you and\noptionally download and patch in older versions from their respective source\nfiles. It will put the repository into ./innosetup by default.\nThe tool needs the tools wget, unzip and git to do its work.\n\nmakestruct.pl can then be used to access this repository and to generate a\nnew parser for a specific Inno Setup version.\n\nFor example:\n\n    $ ./makestruct.pl --src ./innosetup --version 5.5.0u\n\nVersions with a u at the end are Unicode versions, which means that all strings\nare interpreted as UTF-16. Non-Unicode installers used to have their strings\nstored in Windows code page 1252, but more recent installer may also specify\nthe used code page in the data structures. Support for this has not been\nimplemented yet.\nIt is recommended to always generate Unicode and non-Unicode versions\nwhen creating a parser for a new version.\nOutput will go to Struct5500u.pm in this case, which needs to be put into\nSetup/Inno/ to make Inno.pm find it.\n\n## Links\n\n* Inno Setup: http://www.jrsoftware.org/isinfo.php\n* innounp: http://innounp.sourceforge.net/\n* GOG.com: http://www.gog.com\n* Object Pascal Language Guide for Delphi: https://web.archive.org/web/20160313055504/http://portal.aauj.edu/portal_resources/downloads/programming/delphi_object_pascal_language_guide.pdf\n\n## Copyright\n\nuninno and all its components are\n\n    Copyright © 2012-2024 by Gregor Riepl \u003conitake@gmail.com\u003e\n    All rights reserved.\n    \n    Redistribution and use in source and binary forms, with or without modification,\n    are permitted provided that the following conditions are met:\n    \n        Redistributions of source code must retain the above copyright notice,\n        this list of conditions and the following disclaimer.\n        \n        Redistributions in binary form must reproduce the above copyright notice,\n        this list of conditions and the following disclaimer in the documentation\n        and/or other materials provided with the distribution.\n    \n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n    ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\n    ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n    (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n    ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n    (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n    SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\nThe data extraction routines are generated based on the Inno Setup source code,\nwhile the rest of the software was developed independently.\nSee http://www.jrsoftware.org/files/is/license.txt for the Inno Setup license.\n\nNo part of the project is affiliated with Inno Setup or its authors.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fonitake%2Funinno","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fonitake%2Funinno","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fonitake%2Funinno/lists"}