Difference between revisions of "Sims 3:0x073FAA07"
m |
|||
Line 6: | Line 6: | ||
It is probably possible to create new scripts for new custom objects, however. Technical details coming later. | It is probably possible to create new scripts for new custom objects, however. Technical details coming later. | ||
+ | == Data format == | ||
+ | BYTE unknown1 | ||
+ | DWORD unknown2 | ||
+ | BYTE[64] checksum | ||
+ | WORD count | ||
+ | QWORD[count] ''decryption table'' | ||
+ | BYTE[count*512] ''encrypted data'' | ||
+ | == Decryption method == | ||
+ | Initialise the ''decryption seed'' by scanning the ''decryption table'': | ||
+ | foreach(QWORD q in ''decryption table'') ''decryption seed'' += q | ||
+ | |||
+ | Truncate (mask off) the ''decryption seed'' to the length of ''decryption table'': | ||
+ | ''decryption seed'' = ''decryption seed'' & (''decryption table'' Length - 1) | ||
+ | |||
+ | Now process the ''decryption table''. Where an entry has bit 0 set, write 512 zero bytes to the output, otherwise, read 512 bytes into a ''buffer'' from the ''encrypted data'' and process as follows: | ||
+ | foreach(byte b in ''buffer'') | ||
+ | { | ||
+ | byte value = b; | ||
+ | b ^= ''decryption table''[''decryption seed'']; | ||
+ | ''decryption seed'' = (''decryption seed'' + value) % (''decryption table'' Length); | ||
+ | } | ||
+ | Then write out the decrypted ''buffer''. | ||
+ | == Data Content == | ||
+ | The decrypted content is a [http://wikipedia.org/wiki/Common_Language_Runtime Common Language Runtime] signed [http://wikipedia.org/wiki/.NET_assembly assembly]. |
Revision as of 06:15, 9 June 2009
Signed assemblies, encrypted .NET assemblies. They function as the game scripts.
These are the scripts that run when a Sim interacts with an object, or another Sim, or just performs its own inner metabolic processes.
Currently no way is known to get the game to accept piecemeal overrides, so global hacks for a particular assembly as of 6 / 6 / 2009 are having to replace the entire set - meaning that you can only have global hacks for a particular assembly from one creator at a time.
It is probably possible to create new scripts for new custom objects, however. Technical details coming later.
Data format
BYTE unknown1 DWORD unknown2 BYTE[64] checksum WORD count QWORD[count] decryption table BYTE[count*512] encrypted data
Decryption method
Initialise the decryption seed by scanning the decryption table:
foreach(QWORD q in decryption table) decryption seed += q
Truncate (mask off) the decryption seed to the length of decryption table:
decryption seed = decryption seed & (decryption table Length - 1)
Now process the decryption table. Where an entry has bit 0 set, write 512 zero bytes to the output, otherwise, read 512 bytes into a buffer from the encrypted data and process as follows:
foreach(byte b in buffer) { byte value = b; b ^= decryption table[decryption seed]; decryption seed = (decryption seed + value) % (decryption table Length); }
Then write out the decrypted buffer.
Data Content
The decrypted content is a Common Language Runtime signed assembly.