summaryrefslogtreecommitdiffstats
path: root/meta/recover.py
diff options
context:
space:
mode:
authorLouis Burda <quent.burda@gmail.com>2025-01-17 23:45:10 +0100
committerLouis Burda <quent.burda@gmail.com>2025-01-17 23:45:10 +0100
commitcf5fa862dd80bc1fb5faa525aa6873c5e755dbe8 (patch)
treedb7a3e6a5bf0b3a4eca1b35fe7f0c3244a6690c2 /meta/recover.py
downloadnullcon2023-bmpass-master.tar.gz
nullcon2023-bmpass-master.zip
Add final challenge filesHEADmaster
Diffstat (limited to 'meta/recover.py')
-rw-r--r--meta/recover.py55
1 files changed, 55 insertions, 0 deletions
diff --git a/meta/recover.py b/meta/recover.py
new file mode 100644
index 0000000..72b3a6c
--- /dev/null
+++ b/meta/recover.py
@@ -0,0 +1,55 @@
+#!/usr/bin/env python3
+
+from pyray import *
+import struct
+import sys
+
+img_enc = open(sys.argv[1], "rb").read()
+
+
+blocksize = 16
+
+pix = img_enc[0x480:] # offset needs to be blocksize aligned
+img_off = 0x0a
+
+print(len(pix) - img_off, 1920 * 1080)
+
+blocks = {}
+for i in range(0, len(pix)-blocksize+1, blocksize):
+ block = pix[i:i+blocksize]
+ if block not in blocks:
+ blocks[block] = []
+ blocks[block].append(i)
+blocks_items = [(k,len(v)) for k,v in blocks.items()]
+blocks_sorted = sorted(blocks_items, key=lambda x: x[1], reverse=True)[8:]
+blocks_top = {k:v for k,v in blocks_sorted}
+
+imgbuf = []
+for i in range(0, len(pix)-blocksize+1, blocksize):
+ block = pix[i:i+blocksize]
+ if block not in blocks_top:
+ imgbuf += [Color(255, 255, 255, 255)] * blocksize
+ else:
+ imgbuf += [Color(0, 0, 0, 255)] * blocksize
+
+width = 1920
+init_window(1920, 1080, "bmpass")
+while not window_should_close():
+ while key := get_key_pressed():
+ if key == KEY_LEFT:
+ width -= 1
+ elif key == KEY_RIGHT:
+ width += 1
+ elif key == KEY_UP and img_off > 0:
+ img_off -= 1
+ elif key == KEY_DOWN:
+ img_off += 1
+ begin_drawing()
+ clear_background(GRAY)
+ height = len(imgbuf) // width
+ for y in range(height):
+ for x in range(width):
+ draw_pixel(x, height - 1 - y, imgbuf[img_off + y * width + x])
+ end_drawing()
+close_window()
+