diff --git a/electric_boogaloo.md b/electric_boogaloo.md index 717de91..817a3e9 100644 --- a/electric_boogaloo.md +++ b/electric_boogaloo.md @@ -342,4 +342,4 @@ result = (data_0f73 ^ data_0f74) ^ data_0f75 print('0x{:04x}'.format(result)) ``` -And with that, we can now programmatically generate every code for any challenge binary! +And with that, we can now [programmatically extract *every single code* given any challenge .tgz!](https://github.com/RunasSudo/synacor.py/blob/master/tools/generate_codes.py) diff --git a/tools/generate_codes.py b/tools/generate_codes.py index 22f0a85..98fd132 100755 --- a/tools/generate_codes.py +++ b/tools/generate_codes.py @@ -15,8 +15,10 @@ # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . +import re import struct import sys +import tarfile IV_LEN = 3 CODE_LEN = 12 @@ -43,19 +45,36 @@ def generate_code(R1, R2, R3, R4): done = True R7 = R2data[R7] code += chr(R7) + return code +def mirror_code(code): + alphabet1 = 'dbqpwuiolxv8WTYUIOAHXVM' + alphabet2 = 'bdpqwuiolxv8WTYUIOAHXVM' + mirrored_code = '' + for letter in reversed(code): + if letter not in alphabet1: + raise Exception('Cannot mirror unknown letter ' + letter) + mirrored_code += alphabet2[alphabet1.index(letter)] + return mirrored_code + # Read code into memory SYN_MEM = [0] * 32768 -with open(sys.argv[1], 'rb') as data: - i = 0 - while True: - byteData = data.read(2) - if len(byteData) < 2: - break - SYN_MEM[i] = struct.unpack('