[cryptohack] Encoding Challenge

ShinboTinBBO·2025년 2월 11일

cryptography

목록 보기
7/10


레코드샵에서 한 솔로 사운드트랙을 찾았다... 돈 벌어서 사러 가야지..

풀이

암호학보다는 문자 인코딩 포멧 익히기에 가깝다.

100번의 쿼리에 대해서 제대로 복호화를 해내면 된다.

당연히 문제에서 어떠한 방식으로 인코딩한 것인지 알려준다.

from pwn import * # pip install pwntools
import json
import base64
import codecs
from Crypto.Util.number import bytes_to_long, long_to_bytes
r = remote('socket.cryptohack.org', 13377, level = 'debug')

def json_recv():
    line = r.recvline()
    return json.loads(line.decode())

def json_send(hsh):
    request = json.dumps(hsh).encode()
    r.sendline(request)

for i in range(100):
    received = json_recv()
    '''
    print("Received type: ")
    print(received["type"])
    print("Received encoded value: ")
    print(received["encoded"])
    '''
    typeGet = received["type"]
    encoded = received["encoded"]
    if(typeGet == "base64"):
        decoded = base64.b64decode(encoded).decode()
    elif(typeGet == "hex"):
        decoded = bytes.fromhex(encoded).decode()
    elif(typeGet == "rot13"):
        decoded = codecs.decode(encoded, 'rot13')
    elif(typeGet == "bigint"):
        decoded = long_to_bytes(int(encoded, 16)).decode()
    else:
        decoded = "".join(chr(i) for i in encoded)
    to_send = {
        "decoded": decoded
    }
        
    json_send(to_send)

json_recv()
profile
지상 최강의 해적

0개의 댓글