incomplete

This commit is contained in:
Maxime Vorwerk
2024-09-20 11:16:38 +01:00
parent e7c1ad648a
commit 63e5b75f0f
5 changed files with 156 additions and 0 deletions

108
clouds/clouds.py Executable file
View File

@@ -0,0 +1,108 @@
#!python2.7
import binascii
ROUNDS = 5
BLOCK_LEN = 8
HEX_BLOCK_LEN = BLOCK_LEN * 2
MAX_NOTES = 2048
MAX_NOTE_LEN = 512
def pad(p):
if len(p) % BLOCK_LEN != 0:
return p + "\0" * (BLOCK_LEN - (len(p) % BLOCK_LEN))
else:
return p
def g(i):
b = bin(i).lstrip("0b").rstrip("L").rjust(BLOCK_LEN * 8, "0")
return int(b[::-1], 2)
def encrypt_block(b):
k = open("./key").read().rstrip()
assert (len(b) * ROUNDS) == len(k)
result = int(binascii.hexlify(b), 16)
for i in range(ROUNDS):
key = int(binascii.hexlify(k[i * BLOCK_LEN:(i + 1) * BLOCK_LEN]), 16)
key_odd = key | 1
result ^= key
result = g(result)
result = (result * key_odd) % (1 << 64)
return hex(result).lstrip("0x").rstrip("L").rjust(HEX_BLOCK_LEN, "0")
def encrypt(msg):
plain = pad(msg)
result = ""
for i in range(0, len(plain), BLOCK_LEN):
result += encrypt_block(plain[i:i + BLOCK_LEN])
return result
def menu(n):
notes = n
print("""
1) Store
2) Retrieve
Anything else to quit
""")
ui = raw_input("Selection? ").rstrip()
if ui == "1":
if len(notes) >= MAX_NOTES:
print("Max capacity")
return notes
ui = raw_input("Give me a note to encrypt: ").rstrip()
try:
msg = binascii.unhexlify(ui)
except:
print("Invalid input.")
return notes
if len(msg) > MAX_NOTE_LEN:
print("Invalid input.")
else:
notes.append(encrypt(msg))
elif ui == "2":
ui = raw_input("What index would you like to read? ").rstrip()
try:
index = int(ui)
except:
print("Invalid index.")
return notes
if index >= 0 and index < len(notes):
print(notes[index])
else:
print("Invalid index.")
else:
return None
return notes
art = """
.
|
. /
\ I
/
\ ,g88R_
d888(` ). _
- --== 888( ).=-- .+(` )`.
) Y8P( '`. :( . )
.+(`( . ) .-- `. ( ) )
(( (..__.:'-' .=( ) ` _` ) )
`. `( ) ) ( . ) ( ) ._
) ` __.:' ) ( ( )) `-'.:(` )
) ) ( ) --' `- __.' :( ))
.-' (_.' .') `( ) ))
(_ ) ` __.:'
--..,___.--,--'`,---..-.--+--.,,-,,..._.--..-._.-a:f--.
"""
print(art)
print("I love cloud watching, so I made a place to store all my notes about them.")
flag = open("./flag").read().rstrip()
notes = [encrypt(flag)]
notes = menu(notes)
while notes:
notes = menu(notes)

1
clouds/flag Normal file
View File

@@ -0,0 +1 @@
picoCTF{flagFLAG}

1
clouds/key Normal file
View File

@@ -0,0 +1 @@
12345678abcdefgh1a2b3c4d5e6f7g8hffffffff

40
clouds/sol.py Executable file
View File

@@ -0,0 +1,40 @@
#!python3
from sage.all import *
from pwn import *
conn = remote("mercury.picoctf.net", 24402)
conn.recvuntil(b"? ")
def store(msg):
conn.sendline(b"1")
conn.recvuntil(b": ")
conn.sendline(msg)
conn.recvuntil(b"? ")
def retrieve(i):
conn.sendline(b"2")
conn.recvuntil(b"? ")
conn.sendline(str(i).encode())
msg = conn.recvline().strip()
conn.recvuntil(b"? ")
return msg
def sbox(input):
output = Integer("".join(reversed(input.binary())))
return output
def sbox_inv(output):
pass
def mixin_pre(input, key):
pass
def mixin_pre_inv(output, result):
pass
def mixin_post(input, key):
pass
def mixin_post_inv(output, result):
pass