GooCrypter - Decrypted Goo Goodness

You are viewing a static copy of the old 2DBoy forum, which closed in 2010. It is preserved here for historical interest, but it is not possible to reply to topics. For more recent discussion about World of Goo, visit our new forum.
GooCrypter - Decrypted Goo Goodnessltworek10/26/2008 - 08:17

There it is, I know some people are going to be mad at me for releasing this but it was inevitable.  If you use this to cheat the leaderboard you just suck.  Hopefully in the next patch they will have some kind of level checksum to stop cheaters.

Let the modding commence!

Edit:  Not tested with the new patch, I can't get it off steam yet :(

Also, you can't encrypt a map that you currently have open in game, have to exit the game first.

Last modified Sun, 10/26/2008 - 08:19 by ltworek
Re: GooCrypter - Decrypted Goo GoodnessTry_lee10/26/2008 - 10:02

I <3 U


Re: GooCrypter - Decrypted Goo GoodnessSoultaker10/26/2008 - 10:24

For what is worth, I used this Python script. Run from the main World of Goo directory to decode all .bin files to .txt, or back again. (Requires Python Cryptography Toolkit)
#!/usr/bin/env python                                                                                                                            <br /><br /># Uses the Python Cryptography Toolkit<br /># for Windows dummies:<br /><br />from Crypto.Cipher import AES<br />import sys                  <br />import os                    <br /><br /># AES encryption key used (192 bits)<br />key = "\x0D\x06\x07\x07\x0C\x01\x08\x05\x06\x09\x09\x04\x06\x0D\x03\x0F\x03\x06\x0E\x01\x0E\x02\x07\x0B"<br /><br />def decrypt(input):<br />    aes =, AES.MODE_CBC)<br />    output = aes.decrypt(input)    <br />    eof = output.find("\xfd")      <br />    if eof >= 0: output = output[:eof]<br />    return output                    <br /><br />def encrypt(input):<br />    input += "\xfd\xfd"<br />    padding = (16 - len(input)%16)%16<br />    input += padding*"\0"            <br />    aes =, AES.MODE_CBC) <br />    return aes.encrypt(input)        <br /><br />if len(sys.argv) <> 2 or sys.argv[1] not in ('-e','-d'):<br />    print 'Usage: goocrypt -d  (decrypt files)'<br />    print '      goocrypt -e  (encrypt files)'<br />    sys.exit(1)<br />if sys.argv[1] == '-d': what, ext_in, ext_out = 'decrypting', '.bin', '.txt'<br />if sys.argv[1] == '-e': what, ext_in, ext_out = 'encrypting', '.txt', '.bin'<br /><br />found = 0<br />for dirname in [ 'properties', 'res' ]:<br />    for (path, dirs, files) in os.walk(dirname):<br />        for name in files:<br />            if name.endswith(ext_in):<br />                found += 1<br />                path_in  = os.path.join(path, name)<br />                path_out = os.path.join(path, name[:-len(ext_in)]) + ext_out<br />                input = file(path_in, "rb").read()<br />                print "%s %s\n => %s"% (what, path_in, path_out)<br />                if what == 'decrypting': output = decrypt(input)<br />                if what == 'encrypting': output = encrypt(input)<br />                file(path_out, "wb").write(output)<br /><br />if not found:<br />    print 'No files found! (Did you run from the World Of Goo directory?)'<br />else:<br />    print found, 'files processed'<br />

Re: GooCrypter - Decrypted Goo Goodnesstasker10/26/2008 - 18:27

How'd you find out the AES key?

Re: GooCrypter - Decrypted Goo GoodnessMarius10/26/2008 - 18:28

Epic skills :P

Re: GooCrypter - Decrypted Goo GoodnessMacatttack10/26/2008 - 21:43

I doesn't recompile right for me.  :-[
WOG crashes hen I open the level I edited.  :-\

Re: GooCrypter - Decrypted Goo Goodnessltworek10/26/2008 - 21:48

Please post the xml file, WoG is very sensitive to typos and things like that.  Iv been editing lots of levels and have had a fair share of crashes.  Working on a simple map editor now.