Crypto

simple otp

import random

encoded_with_xor = b'\\x81Nx\\x9b\\xea)\\xe4\\x11\\xc5 e\\xbb\\xcdR\\xb7\\x8f:\\xf8\\x8bJ\\x15\\x0e.n\\\\-/4\\x91\\xdcN\\x8a'

random.seed(0)
key = random.randbytes(32)
#print(key ^ encoded_with_xor)

print(bytes(a ^ b for a, b in zip(key, encoded_with_xor)))

privatekey

e がデカい RSA

import owiener
from Crypto.Util.number import *

e = ...
n = ...
c = ...
d = owiener.attack(e, n)

print("d={}".format(d))

plain = pow(c, d, n)
print(long_to_bytes(plain).strip())

pope shuffle

s = "࠴࠱࠼ࠫ࠼࠮ࡣࡋࡍࠨ࡛ࡍ࡚ࡇ࡛ࠩࡔࡉࡌࡥ"
s2 = "LITCTF{"

for i in range(len(s)):
    print(chr(ord(s[i]) - 2024), end='')

print('')

for i in range(len(s2)):
    print(ord(s2[i]), end=',')

symmetric RSAPermalink

#!/usr/bin/env python3
from Crypto.Util.number import long_to_bytes as ltb, bytes_to_long as btl, getPrime

p = getPrime(1024)
q = getPrime(1024)

n = p*q

e = p

with open("flag.txt", "rb") as f:
    PT = btl(f.read())

CT = pow(PT, e, n)
print(f"{CT = }")

for _ in range(4):
    CT = pow(int(input("Plaintext: ")), e, n)
    print(f"{CT = }")

e の使い方が変.複数の暗号文が得られる.

Misc

geoguessr1

google photo に入れたら中国の橋が見つかったので,google map で頑張って緯度経度を入れる

geoguessr2

墓の写真を得る. google map では墓地に入れなかったので上空写真からなんとなく場所をつかむ必要がある

a little bit of tomcroppery

cropped な PNG の写真を得る. binwalk で見るといくつか PNG が入っていることが分かる.

binwalk -D '.*' image.png

endless