From 1fa656ddc6a251d72aac056b0273ea18530b63fc Mon Sep 17 00:00:00 2001 From: RunasSudo Date: Mon, 6 Feb 2017 22:50:55 +1030 Subject: [PATCH] ALL THE CODES! --- electric_boogaloo.md | 2 +- tools/generate_codes.py | 51 +++++++++++++++++++++++++++++++++-------- 2 files changed, 43 insertions(+), 10 deletions(-) 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('