The encryption uses the pseudorandom number generator (PRNG), a linear congruential generator. Elements of the PRNG can be described with the recursive function:
X[n+1] = (0x41C64E6D * X[n] + 0x6073) To decrypt the data, given a function rand() which returns the upper 16 bits of consecutive results of the above given function:
Seed the PRNG with the checksum (let X[n] be the checksum).
Sequentially, for each 2-byte word Y from 0x08 to 0x87, apply the transformation: unencryptedByte = Y xor rand()
Unshuffle the blocks using the block shuffling algorithm above.
To encrypt the data:
Shuffle the blocks using the block shuffling algorithm above.
Seed the PRNG with the checksum (let X[n] be the checksum),
Sequentially, for each 2-byte word Y from 0x08 to 0x87, apply the transformation: unencryptedByte = Y xor rand()
^^ From the Wiki^^