Air Bandits (game.res)

Extraction and unpacking of game archives and compression, encryption, obfuscation, decoding of unknown files
MotherFucker
Posts: 16
Joined: Mon Feb 02, 2015 7:11 am

Air Bandits (game.res)

Post by MotherFucker »

This relatively unknown game (link) has great music and backgrounds but uses a weird archive format, so I could use some help 8-)
game.res.7z - 7.98 MB
MotherFucker
Posts: 16
Joined: Mon Feb 02, 2015 7:11 am

Re: Air Bandits (game.res)

Post by MotherFucker »

I'm absolutely lost with this one :(

Image
MotherFucker
Posts: 16
Joined: Mon Feb 02, 2015 7:11 am

Re: Air Bandits (game.res)

Post by MotherFucker »

Image
aluigi
Site Admin
Posts: 12984
Joined: Wed Jul 30, 2014 9:32 pm

Re: Air Bandits (game.res)

Post by aluigi »

The game uses a compression algorithm which is not implemented in quickbms and I don't know what it is, it looks like a variant of LZW.

The following script extracts the files but only the non-compressed files are readable while the others are stored in an "unknown_compression" folder:

Code: Select all

comtype uncompress  # wrong!
goto -0x10
idstring "sRBV"
get OFFSET long
get DUMMY long
get DUMMY long
goto OFFSET
idstring "ix50"
get SIZE long
get FILES long

# compression not supported yet ("bogus", seems lzw)
set MEMORY_FILE compressed "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"

for i = 0 < FILES
    get NAMESZ short MEMORY_FILE
    getdstring NAME NAMESZ MEMORY_FILE
    get OFFSET long MEMORY_FILE
    get ZSIZE long MEMORY_FILE
    get SIZE long MEMORY_FILE
    get DUMMY long MEMORY_FILE
    get DUMMY long MEMORY_FILE
    get FLAGS long MEMORY_FILE
    if FLAGS == 0
        log NAME OFFSET SIZE
    else

        #math OFFSET += 4   # "ResJ"
        #math ZSIZE -= 4
        #clog NAME OFFSET ZSIZE SIZE

        string NAME p= "unknown_compression/%s" NAME
        log NAME OFFSET ZSIZE
    endif
next i
Ekey
Posts: 1383
Joined: Sat Aug 09, 2014 2:34 pm

Re: Air Bandits (game.res)

Post by Ekey »

Open source'd HGE Engine
aluigi
Site Admin
Posts: 12984
Joined: Wed Jul 30, 2014 9:32 pm

Re: Air Bandits (game.res)

Post by aluigi »

Unfortunately doesn't help much.
The source code contains only references to zlib, so I tried to use zipcrypto with the password "bogus" using both with and without "1" as ivec (used internally in quickbms) but no results.
Additionally there are no references to "ResJ" or 'R','e','s','J' in the code.
MotherFucker
Posts: 16
Joined: Mon Feb 02, 2015 7:11 am

Re: Air Bandits (game.res)

Post by MotherFucker »

Holy shit, that was a tough nut to crack! Glad I'm finally done with this thing 8-)
:arrow: game.res contents!

P.S. Actual mod dates were manually restored from the archive, but that's a different thread ;)
aluigi
Site Admin
Posts: 12984
Joined: Wed Jul 30, 2014 9:32 pm

Re: Air Bandits (game.res)

Post by aluigi »

Did you found the compression algorithm?
MotherFucker
Posts: 16
Joined: Mon Feb 02, 2015 7:11 am

Re: Air Bandits (game.res)

Post by MotherFucker »

aluigi wrote:Did you found the compression algorithm?

Nah, just injected code to dump the files.