# Marvel Ultimate Alliance (script 0.1.1) # script for QuickBMS http://quickbms.aluigi.org idstring "\x6e\xca\x9a\xb1" get VER short get ZIP short get FILES long get INFO_ZSIZE long get NAMES_SIZE long get NAMES_ZSIZE long get DUMMY long savepos OFFSET math dwSize = INFO_ZSIZE callfunction SET_DECRYPT 1 xmath TMP "FILES * 0x28" clog MEMORY_FILE OFFSET INFO_ZSIZE TMP math OFFSET + dwSize math dwSize = NAMES_ZSIZE callfunction SET_DECRYPT 1 clog MEMORY_FILE2 OFFSET NAMES_ZSIZE NAMES_SIZE math OFFSET + dwSize math BASE_OFF = OFFSET for i = 0 < FILES get DUMMY longlong MEMORY_FILE get NAME_OFF longlong MEMORY_FILE get OFFSET longlong MEMORY_FILE get ZSIZE longlong MEMORY_FILE get SIZE longlong MEMORY_FILE goto NAME_OFF MEMORY_FILE2 get NAME string MEMORY_FILE2 math OFFSET + BASE_OFF math dwSize = ZSIZE callfunction SET_DECRYPT 1 clog NAME OFFSET ZSIZE SIZE next i # build a key so that reimporting is possible startfunction SET_DECRYPT if VER >= 1 math TMP = dwSize math TMP + 85 math TMP & 0xffff if TMP & 0x8000 # signed int16! math TMP | 0xffff0000 endif xmath m_Key "((TMP | (TMP << 16)) ^ 0x3B9A1D9) & 0x0FFFFFFF" set KEY alloc dwSize math TMP_SIZE = dwSize math TMP_SIZE y 4 for x = 0 < TMP_SIZE # math is faster than xmath #xmath m_Key "((0x3FD * m_Key) + 1) & 0x0FFFFFFF" math m_Key * 0x3fd math m_Key + 1 math m_Key & 0x0FFFFFFF putvarchr KEY x m_Key long next x + 4 encryption xor KEY "" 0 dwSize else encryption "" "" endif endfunction