I made a quickbms script to fix these for loading with umodel.
#quickbms Script
#by chrrox
filexor 0xB6
set MEMORY_FILE10 binary "\x00\x00\x00\x00"
get BASE basename
set NAME string dec\
string NAME + BASE
string NAME + .upk
get SIZE asize
math SIZE - 4
log MEMORY_FILE 4 SIZE
filexor ""
goto 0x1D MEMORY_FILE
get TMP long MEMORY_FILE
if TMP > 0
math TMP - 4
append
log MEMORY_FILE2 0 TMP MEMORY_FILE
log MEMORY_FILE2 0 4 MEMORY_FILE10
math SIZE - TMP
log MEMORY_FILE2 TMP SIZE MEMORY_FILE
get SIZE asize MEMORY_FILE2
append
log NAME 0 SIZE MEMORY_FILE2
endif
They have a different magic before the standard unreal 3 magic.
That throws off the offsets so I just add 4 bytes at the name table offset to make everything line back up.
the original file also needs to be xored with 0xB6