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.

Injustice 2 PC

Featured Replies

  • Author
  • Localization

george_sears, posted Mon Nov 06, 2017 10:01 pm (29830)


Game's beta is out now.
Files has strange extensions like .xxx and .tfc
Umodel fails to see through encryption probably.
Uploaded some samples, 619 MB.
I'm not sure if i have to drop .exe too

https://mega.nz/#!moJFWALB!wESFpvtcSezM9XYbrnaQ1NCCpAWa8dCbn1ps68tPC9Q

I hope that we could push through it while beta is up, client must include all dlc characters, cus i saw their files.

Here's executable...
https://mega.nz/#!m5wQyLAI!NCy5NTpiSltFllfDT39qcgBSfiRQ5FVoAI7vXyj7yL8
  • Author
  • Localization

aluigi, posted Tue Nov 07, 2017 12:28 pm (29840)


That's stuff for Gildor's umodel
  • Author
  • Localization

tyrannojones, posted Tue Nov 07, 2017 1:06 pm (29841)


It is, but we need to find someone to break through the denuvo encryption
  • Author
  • Localization

godskin, posted Tue Nov 07, 2017 4:20 pm (29844)


tyrannojones wrote:
It is, but we need to find someone to break through the denuvo encryption


use mobile version file it same !!!
  • Author
  • Localization

UncleFestor, posted Fri Nov 10, 2017 1:55 am (29925)


george_sears wrote:
Game's beta is out now.
Files has strange extensions like .xxx and .tfc
Umodel fails to see through encryption probably.
Uploaded some samples, 619 MB.
I'm not sure if i have to drop .exe too

https://mega.nz/#!moJFWALB!wESFpvtcSezM9XYbrnaQ1NCCpAWa8dCbn1ps68tPC9Q

I hope that we could push through it while beta is up, client must include all dlc characters, cus i saw their files.

Here's executable...
https://mega.nz/#!m5wQyLAI!NCy5NTpiSltFllfDT39qcgBSfiRQ5FVoAI7vXyj7yL8


Those are normal UE extensions. NRS uses xxx packaging for all their recent games, MK9, Injustice, MKX/L.

The xxx files will contain the Mesh, animations, tables, Textures Etc., and they're structured pretty much the same way a .upk/pak file is. .tfc are Texture File Checker files. And the MKscriptbinary files, which I think this game also uses, will have the Fight Scripts & tweakvars.

I'm not certain how much of a factor Denuvo is in the encryption of the xxx files. I can reasonably presume, based off of the previous games, that they're all compressed.
  • Author
  • Localization

MrDude007, posted Sat Nov 11, 2017 1:36 am (29956)


I think I figured this out. I'm not very good at explaining but...
The compressed parts of the archive are in chunks with sub-chunks in them. The amount of chunks is defined @0x64 and the true size of the header is @0x68 which is the start of a table for each chunk . The table is 0x18 long and contains the total file size until this chunk (QWord), the uncompressed size of a chunk (Word), the offset of the chunk (QWord) and the compressed size of the chunk (Word). The next 0x18 bytes are padding until the string count of what I assume is the true name of the package. Basically the real header is everything but the table.

For each chunk there is the familiar UnrealMagic (QWord), something (QWord), the size of the chunk (QWord) and the uncompressed size of the chunk (QWord). Where it gets dicey is there can be a couple of "sub-chunks" in there (math can figure out how many). Each sub-chunk has a size (QWord) and uncompressed size (QWord).

I wrote a (terrible) python script to extract these chunks and my first BMS script to un-compress them. I then reassembled HQ_MSTR.xxx manually (I don't know if I can share). I'm sure someone whos better than me can write a better BMS script to do this.

Code:
import operator
import array
import string
import sys
import os
import zlib
import struct

def Main():
    dir_path = os.path.dirname(os.path.realpath(__file__))
    print(dir_path "\_EXT")
    File = "Init"
    f = open(File ".xxx", "rb")
    Top = f.read(100)
    BlockCount1 = f.read(4)
    BlockCount = struct.unpack('I', BlockCount1)[0]
    BlockStuff = []

   
    for X in range(0, BlockCount):
        FileSizeBegin = struct.unpack('Q', f.read(8))[0]
        BlockRealSize = struct.unpack('I', f.read(4))[0]
        BlockStart = struct.unpack('Q', f.read(8))[0]
        BlockSize = struct.unpack('I', f.read(4))[0]
        BlockStuff.append([FileSizeBegin, BlockRealSize, BlockStart, BlockSize])
    print(BlockStuff, f.tell())
    Blank = f.read(24)
    PackageChar = f.read(4)
    PacChar = struct.unpack('I', PackageChar)[0]
    PackageName = f.read(PacChar)
    PackageName1 = PackageName.decode("ASCII").rstrip("\0")
    if not os.path.exists(dir_path "\\_EXT\\" str(PackageName1)):
        os.makedirs(dir_path "\\_EXT\\" str(PackageName1))

    p = open(dir_path "\\_EXT\\" str(PackageName1) "\\" File "_Top", "wb")
    p.write(Top)
    p.write(BlockCount1)
    p.write(Blank)
    p.write(PackageChar)
    p.write(PackageName)
    p.close()
    for T in range(0, BlockCount):
        Q = BlockStuff[T]
        f.seek(Q[2], 0)
        Block = f.read(Q[3])
        w = open(dir_path "\\_EXT\\" str(PackageName1) "\\" File "_i"%T ".encBlock", "wb")
        w.write(Block)
    print("Done")
    w.close()
   
Main()


Code:
comtype oodle

get EXT extension
if EXT == "encBlock"
   get NAME BASENAME
   get ZSIZE long
   get SIZE ASIZE
   math SIZE - 4
   set OFFSET 4
   clog NAME OFFSET SIZE ZSIZE
  • Author
  • Localization

aluigi, posted Sat Nov 11, 2017 9:10 am (29960)


Regarding the quickbms script I guess you mean something like the following:
Code:
comtype oodle
get EXT extension
if EXT == "encBlock"
   get NAME basename
   get SIZE long
   savepos OFFSET
   get ZSIZE asize
   math ZSIZE - OFFSET
   clog NAME OFFSET ZSIZE SIZE
endif
Hope it helps
  • Author
  • Localization

MrDude007, posted Sun Nov 12, 2017 12:58 am (29981)


Actually I needed something like this. I tested this a few times. It will spit out a fixed header and un-compressed data so you still need to mash the 2 together. I could probably rewrite it to spit out one complete file but... This won't make the files comparable with umodel but it should help someone else who knows unreal stuff to make their own extractor.

Code:
comtype oodle
get EXT extension
if EXT == "xxx"
   log MEMORY_FILE 0 0
   log MEMORY_FILE 0 0x64
   append
   getdstring TOP 0x64
   get NAME BASENAME
   string NAME ".header"
   log MEMORY_FILE 0x64 0x04
   get COUNT long
   
   savepos RET
   set SKIP 24
   math SKIP * COUNT
   print %SKIP%
   goto SKIP 0 SEEK_CUR
   savepos TOPCUR
   log MEMORY_FILE TOPCUR 0x18
   getdstring TEMP 0x18
   savepos TOPCUR
   log MEMORY_FILE TOPCUR 0x04
   get CCOUNT long
   savepos TOPCUR
   log MEMORY_FILE TOPCUR CCOUNT
   getdstring PACKAGENAME CCOUNT
   set Temp 0x84
   math Temp CCOUNT
   log NAME 0 Temp MEMORY_FILE
   set Temp 0x84
   
   goto RET
   append
   get NAME BASENAME
   string NAME ".bin"
   for i = 0 < COUNT
      print %COUNT%
      print %i%
      goto RET
      get OGSIZE longlong
      get ADDSIZE long
      get OFFSET longlong
      get SIZE long
      savepos RET
      
      goto OFFSET
      getdstring TMP 0x10
      get BSIZE longlong
      get RSIZE longlong
      set TMP1 BSIZE
      set TMP2 SIZE
      math TMP2 - TMP1
      math TMP2 - 32
      savepos TMP3
      math TMP3 TMP2
      math TMP2 / 16
      set COUNT2 TMP2
      append
      for t = 0 < COUNT2
         get ZSIZE2 longlong
         get SIZE2 longlong
         savepos ret3
         goto TMP3
         clog NAME TMP3 ZSIZE2 SIZE2
         math TMP3 ZSIZE2
         goto ret3
         next t
      append
      
      next i
      
  • Author
  • Localization

zaramot, posted Tue Nov 14, 2017 6:37 pm (30050)


Damn, I wasted some time yesterday to get uncompressed data out. And here's your script! Thousand time I told myself check zenhax firts lol What a great forum we all have people. If anyone will make similiar script to get files out, smaller files for easier work, we are all saved:)
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.