Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # Monster Hunter 4 Ultimate
- # Script to re-encrypt save file data
- #
- # Based on information from mhef by Seth VanHeulen
- # https://github.com/svanheulen/mhef
- #
- # Written by HenryEx
- #
- # script for QuickBMS http://quickbms.aluigi.org
- ################################################
- # Preparations
- print "Setup..."
- # set up virtual memory file for save data
- math TMP = 0x13E00
- log MEMORY_FILE 0 0
- putvarchr MEMORY_FILE TMP 0 # improves the speed with pre-allocation
- log MEMORY_FILE 0 0 # reset the position and size of the file
- # Set up default values and keys
- get FILENAME filename 0
- get FILESIZE asize 0
- set SAV_MH4U string "blowfish key iorajegqmrna4itjeangmb agmwgtobjteowhv9mope"
- set DLC_MH4U_EU string "AgK2DYheaCjyHGPB"
- set DLC_MH4U_JP string "AgK2DYheaCjyHGP8"
- set DLC_MH4U_KR string "AgK2DYheaOjyHGP8"
- set DLC_MH4U_TW string "Capcom123 "
- set KEY_MUL short 0xB0
- set KEY_MOD short 0xFF53
- set SUM long 0
- # set up savedata in memory for encryption
- put 16 short MEMORY_FILE
- put 0 short MEMORY_FILE # space for xor key
- put 0 long MEMORY_FILE # space for checksum
- append # Append ON
- log MEMORY_FILE FILESTART FILESIZE 0 # MEMORY_FILE = decrypted save data
- append # Append OFF
- math FILESTART = 8
- ################################################
- # Encrypt save
- print "Encrypting save"
- print "-> Calculating save checksum..."
- for i = 0 < FILESIZE
- get SBYTE byte 0
- math SUM + SBYTE
- next i
- math SUM u& 0xFFFFFFFF
- print "Calculated checksum: %SUM%"
- putvarchr MEMORY_FILE 4 SUM long
- math FILESIZE + 4
- math FILESTART - 4
- print "-> XORing with random key..." # Well, not REALLY random...
- # make pseudo-random KEY
- xmath KEY "SUM & 0xFFFF"
- xmath KEY "((KEY < 7) & 0xFFFF) | (KEY > 9)" # 16bit rotated left 7x
- math KEY ^ 0x484D # xor with "MH"
- putvarchr MEMORY_FILE 2 KEY short
- # advance key and XOR 16b block of the file with it
- xmath XORNUM "FILESIZE / 2"
- for i = 0 < XORNUM
- xmath POS "(i * 2) + FILESTART" # get current file position
- if KEY == 0
- math KEY = 1
- endif
- math KEY * KEY_MUL
- math KEY % KEY_MOD
- getvarchr DATA MEMORY_FILE POS short
- math DATA u^ KEY
- putvarchr MEMORY_FILE POS DATA short
- next i
- math FILESIZE + 4
- math FILESTART - 4
- print "-> Blowfish Encryption..."
- # encrypt via blowfish
- Encryption blowfish SAV_MH4U "" 1
- log MEMORY_FILE FILESTART FILESIZE MEMORY_FILE
- Encryption "" ""
- ################################################
- # Save files to disk
- print "Exporting encrypted save to %FILENAME%"
- log FILENAME FILESTART FILESIZE MEMORY_FILE
- CleanExit
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement