Menu

#19 Unshield: treat version 0x020004b0 as major 6 instead of 0

open
nobody
None
5
2009-01-01
2009-01-01
erAck
No

A dirty hack to treat some specific version 0x020004b0
as major 6 (and above) instead of major 0, that
effectively would be treated as major 5, which is wrong
in this case and would lead to an abort.

See data1.{cab,hdr} unzipped from epson321902eu.exe
downloaded from
http://esupport.epson-europe.com/Redirect.aspx?lng=en-GB&url=ftp%3a%2f%2fdownload.epson-europe.com%2fpub%2fdownload%2f3219%2fepson321902eu.exe&id=321902&ct=1&data=YZnBT5wk60ZdJVJ+U002FqpOSsgN3bTG2DXH
via
http://esupport.epson-europe.com/FileDetails.aspx?lng=en-GB&data=YZnBT5wk60ZdJVJ+U002FqpOSsgN3bTG2DXH&id=321902

TODO: identify proper versioning, I have no knowledge of
the IS file format.

Discussion

  • erAck

    erAck - 2009-01-01

    Patch to treat IS version 0x020004b0 as major 6

     
  • Martin Unsal

    Martin Unsal - 2009-05-03

    I concur, I separately arrived at the same conclusion with a different cab file.
    This may not be the correct fix but it would certainly have resolved my problem.
    Perhaps best fix is to simply default to highest known version number rather than lowest when the version number cannot be parsed. That's more likely to be robust.

     
  • Max Horn

    Max Horn - 2009-05-25

    On the other hand, the data files for the game "The Feeble Files" contains as version "0x01000004", which is treated as major version 0, and needs to be handled as version 5....

    Of course these two versions obviously differ in the topmost byte. Maybe the version check just needs to be extended by a really_major_version? ;) Or rather, unshield_read_headers() maybe should look at the value of
    (header->common.version >> 24) & 0xf;
    instead of just doing
    header->major_version = (header->common.version >> 12) & 0xf;

     
  • Ignaz Forster

    Ignaz Forster - 2009-12-13

    I also stumbled over a file with a new header, 0x02000578 in my case. Manually setting major number 9 for that header worked as expected.

    When viewing the corresponding setup.exe it claims to be a "InstallShield ProductVersion 14.0 Internal Build Number 62562" file (http://www.looki.de/downloads/the_whispered_world_demo_v2_file_f38019.html for reference), while the file from above claims to be an "InstallShield ProductVersion 12.0" file.

    It definitely seems a new handling for these new header types is required. While two files definitely don't qualify as a representative sample it seems quite sure that "0x02" starts the new header :-)

    I haven't found any further InstallShield archives with the new header yet. In the meantime it probably would be a good idea to either set the highest known version number as the default value as Martin suggested, or to introduce a new command line switch so set the version manually.

     
  • Ignaz Forster

    Ignaz Forster - 2010-01-06

    InstallShield Version 11 seems to be the last version with the old header format (detected as version 9 by unshield).

    The file mentioned in http://sourceforge.net/tracker/?func=detail&aid=1924929&group_id=30550&atid=399601 (InstallShield 12) also has 0x020004b0 in the version field.

     
  • David Eriksson

    David Eriksson - 2011-01-22

    Please try the latest unshield from the Subversion repository!

     

Log in to post a comment.