[PC] Tranformers Online

Extraction and unpacking of game archives and compression, encryption, obfuscation, decoding of unknown files
godskin
Posts: 192
Joined: Sun Oct 04, 2015 2:27 am

[PC] Tranformers Online

Post by godskin »

Website : http://tfol.qq.com/
Request : unpack
Some Games File : http://www.mediafire.com/file/3uo339a4k ... itor_0.rar




//Error Script//
http://image.prntscr.com/image/daae822b ... 1aae6.jpeg

//Use This Script //

Code: Select all

# Unreal Engine 4 - Unreal Tournament 4 (*WindowsNoEditor.pak) (script 0.4.3)
# script for QuickBMS http://quickbms.aluigi.org

# set your AES_KEY here as text or C string ("\x11\x22...")
set AES_KEY binary ""
putarray 10 -1 "KIWIKIWIKIWIKIWIKIWIKIWIKIWIKIWI"   # first beta of Street Fighter V
putarray 10 -1 "_aS4mfZK8M5s5KWC2Lz2VsFnGKI7azgl"   # current version of Street Fighter V
putarray 10 -1 "bR!@nbR0wnc@rychR!$d@nd@v3d3R3kj!mj0$hk3v!nm!ch@3lm!k3s3@nst3v3t!m" # Victory: The Culling
putarray 10 -1 "casd#55@#$%323!$^#b%05sa5W|hhaf4365s52ss51|55m!|{55s^@@36f233|-|0w@%3g8hssDk35/!Nm|_|%ds23%a32d5&23as3%12p|-|y$t3ds562d23fav3c@dyw38#49" # Victory: The Culling
putarray 10 -1 ""
math AES_KEY_IS_SET = 0

# 1 = HIT
math WORKAROUND = 0

goto -0x2c
get MAGIC long  #idstring "\xe1\x12\x6f\x5a" # 0x5a6f12e1
if MAGIC == 0x5a6f12e1
    # ok
elif MAGIC == 0xe1126f5a
    endian big
else
    # HIT game 0x1233a
    math WORKAROUND = 1
endif
get VERSION long
get OFFSET longlong
get SIZE longlong
getdstring HASH 20
if WORKAROUND == 1
    math VERSION = 3
endif

goto OFFSET
callfunction GET_NAME 1
get FILES long

for i = 0 < FILES
    callfunction GET_NAME 1
    savepos TMP_OFF

    get OFFSET longlong
    get ZSIZE longlong
    get SIZE longlong
    get ZIP long
    if WORKAROUND == 1
        getdstring HASH 20
    elif VERSION <= 1
        get TSTAMP longlong
    endif
    getdstring HASH 20
    math CHUNKS = 0
    math ENCRYPTED = 0
    if VERSION >= 3
        if ZIP != 0
            get CHUNKS long
            for x = 0 < CHUNKS
                get CHUNK_OFFSET longlong
                get CHUNK_END_OFFSET longlong
                putarray 0 x CHUNK_OFFSET
                putarray 1 x CHUNK_END_OFFSET
            next x
        endif
        get ENCRYPTED_ byte
        get CHUNK_SIZE long
    endif
    if WORKAROUND == 1
        math ENCRYPTED = 0
    endif

    comtype copy    # for AES
    if ZIP & 1
        comtype zlib
    elif ZIP & 2
        comtype gzip
    elif ZIP & 4
        comtype snappy
    endif

    if CHUNKS > 0
        putvarchr MEMORY_FILE SIZE 0
        log MEMORY_FILE 0 0
        append
        for x = 0 < CHUNKS
            getarray CHUNK_OFFSET 0 x
            getarray CHUNK_END_OFFSET 1 x
            math CHUNK_ZSIZE = CHUNK_END_OFFSET
            math CHUNK_ZSIZE - CHUNK_OFFSET
            if ENCRYPTED != 0
                callfunction SET_AES_KEY 1
                math CHUNK_ZSIZE x 16
            endif
            clog MEMORY_FILE CHUNK_OFFSET CHUNK_ZSIZE CHUNK_SIZE
        next x
        append
        encryption "" ""
        log NAME 0 SIZE MEMORY_FILE
    else
        # the file offset points to an entry containing
        # the "same" OFFSET ZSIZE SIZE ZIP HASH ZERO fields,
        # just an additional backup... so let's skip them
        savepos BASE_OFF
        math BASE_OFF - TMP_OFF
        math OFFSET += BASE_OFF
        if ENCRYPTED != 0
            callfunction SET_AES_KEY 1
            math ZSIZE x 16
        endif
        clog NAME OFFSET ZSIZE SIZE
        encryption "" ""
    endif
next i

startfunction SET_AES_KEY_ASK
    math AES_KEY_IS_SET = 1
    print "The archive is encrypted, select the number of the key to use or type yours:"
    for z = 0
        getarray KEY 10 z
        if KEY == ""
            break
        endif
        print "%z%: %KEY%"
    next z
    set KEY unknown "???"
    strlen TMP KEY
    if TMP <= 2
        getarray AES_KEY 10 KEY
    else
        set AES_KEY binary KEY
    endif
    print "KEY: %AES_KEY%"
endfunction

startfunction SET_AES_KEY
    if AES_KEY_IS_SET == 0
        callfunction SET_AES_KEY_ASK 1
    endif
    encryption aes AES_KEY "" 0 32
endfunction

startfunction GET_NAME
    get NAMESZ signed_long
    if NAMESZ >= 0
        getdstring NAME NAMESZ
    else
        math NAMESZ n NAMESZ
        math NAMESZ * 2
        getdstring NAME NAMESZ
        set NAME unicode NAME
    endif
endfunction
aluigi
Site Admin
Posts: 12984
Joined: Wed Jul 30, 2014 9:32 pm

Re: [PC] Tranformers Online

Post by aluigi »

You can ignore that error because the archive has been correctly extracted.
Basically the archives says that there are 0x462 files while there are only 0x3fe references... I don't know why.
Does this happen with all the archives of this game?