# 3ds Max mse scripts decrypter (script 0.1.1)
# support versions 0 and 1
# script for QuickBMS http://quickbms.aluigi.org
math MODE = 1
math KEY = 0xECD6D157
math KEY2 = 0xECD6D157
get EXT extension
if EXT != "mse"
print "Error: you must open an encrypted 3ds Max script with mse extension"
cleanexit
endif
# load whole file in memory
get SIZE asize
log MEMORY_FILE 0 SIZE
# check version
get TMP byte MEMORY_FILE
if TMP == 0x43
# encryption 1
math MODE = 2
math KEY = 0
get MODE long MEMORY_FILE
get KEY long MEMORY_FILE
get TMP long MEMORY_FILE
math KEY += TMP
math KEY ^= TMP
callfunction RAND 1
math SKIP = RET
math SKIP &= 0x7f
for i = 0 < SKIP
get TMP byte MEMORY_FILE
callfunction RAND 1
next i
else
# encryption 0
goto 0 MEMORY_FILE
endif
savepos OFFSET MEMORY_FILE
if MODE == 3
for i = OFFSET < SIZE
callfunction RAND 1
getvarchr TMP MEMORY_FILE i
if KEY & 1
math TMP z= 4
endif
math TMP ^= RET
math TMP &= 0xff
if TMP == 0xff
break
endif
putvarchr MEMORY_FILE i TMP
if TMP & 0x80
math TMP |= -0x100
endif
math KEY += TMP
next i
elif MODE == 0
# do nothing
elif MODE == 2
# do nothing
else
# modes 1 and 4
for i = OFFSET < SIZE
callfunction RAND 1
getvarchr TMP MEMORY_FILE i
math TMP ^= RET
math TMP &= 0xff
if TMP == 0xff
break
endif
putvarchr MEMORY_FILE i TMP
next i
endif
# dump
math SIZE = i
math SIZE -= OFFSET
get NAME basename
string NAME += ".ms"
log NAME OFFSET SIZE MEMORY_FILE
startfunction RAND
if MODE == 0
math RET = 0
elif MODE == 3
math KEY *= 0x4fac51fb
math KEY n= KEY
math KEY += 0x269ec3
math RET = KEY
elif MODE == 4
math KEY2 *= 0x343fd
math KEY2 += 0x269ec3
math RET = KEY2
else
math KEY *= 0x343fd
math KEY += 0x269ec3
math RET = KEY
endif
math RET >>= 0x10
math RET &= 0x7fff
endfunction
- 1
- 2
- 3
- 4
- 5
- 6
前往页