Injustice 2 PC
-
- Posts: 13
- Joined: Fri Jul 28, 2017 11:03 pm
Injustice 2 PC
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
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
-
- Site Admin
- Posts: 12984
- Joined: Wed Jul 30, 2014 9:32 pm
Re: Injustice 2 PC
That's stuff for Gildor's umodel
-
- Posts: 30
- Joined: Wed Aug 03, 2016 10:01 am
Re: Injustice 2 PC
It is, but we need to find someone to break through the denuvo encryption
-
- Posts: 192
- Joined: Sun Oct 04, 2015 2:27 am
Re: Injustice 2 PC
tyrannojones wrote:It is, but we need to find someone to break through the denuvo encryption
use mobile version file it same !!!
-
- Posts: 26
- Joined: Sun Mar 20, 2016 10:25 pm
Re: Injustice 2 PC
It's oodle, relay this to Gildor: https://github.com/dtzxporter/Siren
-
- Posts: 33
- Joined: Fri Dec 11, 2015 3:38 pm
Re: Injustice 2 PC
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.
-
- Posts: 2
- Joined: Sat Nov 11, 2017 12:58 am
Re: Injustice 2 PC
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.
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: Select all
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+"_%03i"%T+".encBlock", "wb")
w.write(Block)
print("Done")
w.close()
Main()
Code: Select all
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
-
- Site Admin
- Posts: 12984
- Joined: Wed Jul 30, 2014 9:32 pm
Re: Injustice 2 PC
Regarding the quickbms script I guess you mean something like the following:
Hope it helps
Code: Select all
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
-
- Posts: 2
- Joined: Sat Nov 11, 2017 12:58 am
Re: Injustice 2 PC
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: Select all
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
-
- Posts: 51
- Joined: Mon Sep 01, 2014 7:19 pm
Re: Injustice 2 PC
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:)