Pavel Roskin
2009-07-16 21:44:21 UTC
Hello!
I was trying to unpack the driver for abit WLP-01 downloaded from
http://file.abit.com.tw/pub/download/driver2/airpace/wifi_U1011_20070511.zip
I tries unshield 0.5.1 first, then version 0.6. Both dumped core.
Debugging showed that header->major_version was determined as 0, which
lead to self->file_group_count being read from a wrong location.
self->file_group_count was more than MAX_FILE_GROUP_COUNT, which lead to
unshield_component_new() calling abort().
This is what the debugging output shows:
$ unshield -D3 x data1.cab
[unshield_read_headers:226] Reading header from .hdr file 1.
[unshield_read_headers:281] Version 0x020004b0 handled as major version 0
[unshield_get_cab_descriptor:81] Cabinet descriptor: 00003162 0000146f 0000146f 0000000c
[unshield_get_cab_descriptor:83] Directory count: 3
[unshield_get_cab_descriptor:84] File count: 53
Aborted (core dumped)
The major version is read from this digit:
0x020004b0
^
If I change the sources to assume version 9, I can successfully unpack
the archive.
It looks like the actual version of the software is 12 (the version of
the archive format may be different)
$ strings setup.exe |grep -i shield
http://www.installshield.com/isetup/ProErrorCentral.asp?ErrorCode=%d : 0x%x&ErrorInfo=%s
InstallShield.OCISetupPlayer12.12
InstallShield.OCISetupPlayer12
InstallShield
InstallShield Silent
InstallShield\ISEngine12.0
SOFTWARE\InstallShield\Cryptography\Trust
(c) Copyright 2004 InstallShield Software Corporation (All Rights Reserved)
InstallShieldPendingOperation
InstallShield Setup Player
name="InstallShield.Setup"
<description>InstallShield.Setup</description>
I suggest applying this patch as a workaround.
--- lib/libunshield.c
+++ lib/libunshield.c
@@ -271,6 +271,9 @@ static bool unshield_read_headers(Unshie
header->major_version = (header->common.version >> 12) & 0xf;
+ if (header->common.version == 0x020004b0)
+ header->major_version = 9;
+
#if 0
if (header->major_version < 5)
header->major_version = 5;
I was trying to unpack the driver for abit WLP-01 downloaded from
http://file.abit.com.tw/pub/download/driver2/airpace/wifi_U1011_20070511.zip
I tries unshield 0.5.1 first, then version 0.6. Both dumped core.
Debugging showed that header->major_version was determined as 0, which
lead to self->file_group_count being read from a wrong location.
self->file_group_count was more than MAX_FILE_GROUP_COUNT, which lead to
unshield_component_new() calling abort().
This is what the debugging output shows:
$ unshield -D3 x data1.cab
[unshield_read_headers:226] Reading header from .hdr file 1.
[unshield_read_headers:281] Version 0x020004b0 handled as major version 0
[unshield_get_cab_descriptor:81] Cabinet descriptor: 00003162 0000146f 0000146f 0000000c
[unshield_get_cab_descriptor:83] Directory count: 3
[unshield_get_cab_descriptor:84] File count: 53
Aborted (core dumped)
The major version is read from this digit:
0x020004b0
^
If I change the sources to assume version 9, I can successfully unpack
the archive.
It looks like the actual version of the software is 12 (the version of
the archive format may be different)
$ strings setup.exe |grep -i shield
http://www.installshield.com/isetup/ProErrorCentral.asp?ErrorCode=%d : 0x%x&ErrorInfo=%s
InstallShield.OCISetupPlayer12.12
InstallShield.OCISetupPlayer12
InstallShield
InstallShield Silent
InstallShield\ISEngine12.0
SOFTWARE\InstallShield\Cryptography\Trust
(c) Copyright 2004 InstallShield Software Corporation (All Rights Reserved)
InstallShieldPendingOperation
InstallShield Setup Player
name="InstallShield.Setup"
<description>InstallShield.Setup</description>
I suggest applying this patch as a workaround.
--- lib/libunshield.c
+++ lib/libunshield.c
@@ -271,6 +271,9 @@ static bool unshield_read_headers(Unshie
header->major_version = (header->common.version >> 12) & 0xf;
+ if (header->common.version == 0x020004b0)
+ header->major_version = 9;
+
#if 0
if (header->major_version < 5)
header->major_version = 5;
--
Regards,
Pavel Roskin
Regards,
Pavel Roskin