Skip to content
View in the app

A better way to browse. Learn more.

ResHax

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.
Help us keep the site running.

Real Racing Next. Decrypted format.

Featured Replies

  • Author
  • Localization

Vitalik, posted Sun Sep 26, 2021 10:28 am (66666)


Who can help decrypted format .pack from Real Racing Next ?
Thank.
  • Author
  • Localization

aluigi, posted Sun Sep 26, 2021 8:20 pm (66676)


This format is horrible.
There is no encryption, the complex index table is just a gzip at the beginning with the "ZBDS" magic.
I can see the entries containing the relative offset and size of each file but they are mixed with other messy data, the names are referenced easily but they are part of the directory/asset structure.
Very boring to do anything.

Anyway I leave here my work-in-progress script that parses some fields of the index table (it's for debugging, DO NOT USE IT!!!):
Code:
comtype gzip
idstring "PACK"
get INFO_SIZE long
get DATA_OFF long
savepos HEADER_SIZE

idstring "ZBDS"
get SIZE long
savepos OFFSET
xmath ZSIZE "(HEADER_SIZE INFO_SIZE) - OFFSET"
clog MEMORY_FILE OFFSET ZSIZE SIZE

idstring MEMORY_FILE "SBIN"
get DUMMY long MEMORY_FILE  # ever 4
get MEM_SIZE asize MEMORY_FILE
for MEM_OFF = 0 != MEM_SIZE
    getdstring TYPE_NAME 4 MEMORY_FILE
    get TYPE_SIZE long MEMORY_FILE
    get TYPE_CRC long MEMORY_FILE
    savepos MEM_OFF MEMORY_FILE

    # for debugging
    #getdstring DUMMY TYPE_SIZE MEMORY_FILE

      if TYPE_NAME == "STRU"

    elif TYPE_NAME == "FIEL"

    elif TYPE_NAME == "OHDR"
        get DUMMY long MEMORY_FILE
        get DUMMY long MEMORY_FILE
        get DUMMY long MEMORY_FILE
        get DUMMY long MEMORY_FILE
        get DUMMY long MEMORY_FILE

    elif TYPE_NAME == "DATA"

        # messy stuff here
        # OFFSET ( DATA_OFF), SIZE, ZERO

    elif TYPE_NAME == "CHDR"
        xmath NAMES "TYPE_SIZE / (4 4)"
        for i = 0 < NAMES
            get NAME_OFF[i] long MEMORY_FILE
            get NAME_SIZE[i] long MEMORY_FILE
        next i

    elif TYPE_NAME == "CDAT"
        for i = 0 < NAMES
            math NAME_OFF[i] MEM_OFF MEMORY_FILE
            goto NAME_OFF[i] MEMORY_FILE
            getdstring NAME NAME_SIZE[i] MEMORY_FILE
        next i

    endif

    math MEM_OFF TYPE_SIZE
    goto MEM_OFF MEMORY_FILE
next
  • Author
  • Localization

Vitalik, posted Tue Sep 28, 2021 3:34 pm (66708)


aluigi wrote:
This format is horrible.
There is no encryption, the complex index table is just a gzip at the beginning with the "ZBDS" magic.
I can see the entries containing the relative offset and size of each file but they are mixed with other messy data, the names are referenced easily but they are part of the directory/asset structure.
Very boring to do anything.

Anyway I leave here my work-in-progress script that parses some fields of the index table (it's for debugging, DO NOT USE IT!!!):
Code:
comtype gzip
idstring "PACK"
get INFO_SIZE long
get DATA_OFF long
savepos HEADER_SIZE

idstring "ZBDS"
get SIZE long
savepos OFFSET
xmath ZSIZE "(HEADER_SIZE INFO_SIZE) - OFFSET"
clog MEMORY_FILE OFFSET ZSIZE SIZE

idstring MEMORY_FILE "SBIN"
get DUMMY long MEMORY_FILE  # ever 4
get MEM_SIZE asize MEMORY_FILE
for MEM_OFF = 0 != MEM_SIZE
    getdstring TYPE_NAME 4 MEMORY_FILE
    get TYPE_SIZE long MEMORY_FILE
    get TYPE_CRC long MEMORY_FILE
    savepos MEM_OFF MEMORY_FILE

    # for debugging
    #getdstring DUMMY TYPE_SIZE MEMORY_FILE

      if TYPE_NAME == "STRU"

    elif TYPE_NAME == "FIEL"

    elif TYPE_NAME == "OHDR"
        get DUMMY long MEMORY_FILE
        get DUMMY long MEMORY_FILE
        get DUMMY long MEMORY_FILE
        get DUMMY long MEMORY_FILE
        get DUMMY long MEMORY_FILE

    elif TYPE_NAME == "DATA"

        # messy stuff here
        # OFFSET ( DATA_OFF), SIZE, ZERO

    elif TYPE_NAME == "CHDR"
        xmath NAMES "TYPE_SIZE / (4 4)"
        for i = 0 < NAMES
            get NAME_OFF[i] long MEMORY_FILE
            get NAME_SIZE[i] long MEMORY_FILE
        next i

    elif TYPE_NAME == "CDAT"
        for i = 0 < NAMES
            math NAME_OFF[i] MEM_OFF MEMORY_FILE
            goto NAME_OFF[i] MEMORY_FILE
            getdstring NAME NAME_SIZE[i] MEMORY_FILE
        next i

    endif

    math MEM_OFF TYPE_SIZE
    goto MEM_OFF MEMORY_FILE
next

Thank you very much for your help and time spent on this... Maybe in future some man do final script for this.
Guest
This topic is now closed to further replies.

Account

Navigation

Search

Search

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.