Decompress a file concatenated in an archive

Extraction and unpacking of game archives and compression, encryption, obfuscation, decoding of unknown files
Garo
Posts: 20
Joined: Wed Nov 18, 2020 5:54 pm

Decompress a file concatenated in an archive

Post by Garo »

I made an archive called GGTX or gtx.

This is the BMS script to decompress it

Code: Select all

comtype lzma2

idstring "GGTX"
get ZSIZE long
get SIZE long
get NAME basename
string NAME + ".amg"
savepos OFFSET
clog NAME OFFSET ZSIZE SIZE


But I made an archive called PTK or UKTP162N, that uses this script

Code: Select all

idstring "UKTP162N"
get FILES long
get NAMESZ long

for i = 0 < FILES
   getdstring NAME NAMESZ
   get OFFSET longlong
   get SIZE longlong
   log NAME OFFSET SIZE


For each subarchive in the archive, I want to specify the idstring "GGTX" and decompress the file with lzma2.
aluigi
Site Admin
Posts: 12984
Joined: Wed Jul 30, 2014 9:32 pm

Re: Decompress a file concatenated in an archive

Post by aluigi »

You can try something like the following:

Code: Select all

idstring "UKTP162N"
get FILES long
get NAMESZ long

for i = 0 < FILES
   getdstring NAME NAMESZ
   get OFFSET longlong
   get SIZE longlong

    savepos TMP
    goto OFFSET
    getdstring SIGN 4
    if SIGN u== "GGTX"
        callfunction ggtx_unpack 1
    else
        log NAME OFFSET SIZE
    endif
    goto TMP
next i

startfunction ggtx_unpack
    comtype lzma2
    #idstring "GGTX"
    get ZSIZE long
    get SIZE long
    savepos OFFSET
    clog NAME OFFSET ZSIZE SIZE
endfunction