본문 바로가기

security/crypto

[CryptoHack] Introduction to CryptoHack (2)

XOR Starter

 

 

 

 

 

c = 'label'
e = ''
for i in c:
        i = ord(i)
        e += chr(i^13)
print(e)

 

 

 

 

 

c = 'label'
print("".join(chr(ord(i)^13) for i in c))

 

 

 

 

 

from pwn import *

c = 'label'

print(xor(c, 13))

 

 

 

 

 

앞의 설명과 같이 pwntool 모듈에서 xor()을 사용해 해결할 수도 있습니다. pwntool 모듈을 사용한 경우 결과가 바이트 문자열로 옴을 확인할 수 있습니다. (밑에 결과는 pwntool 모듈을 사용하지 않은 결과 입니다.)

 

 

 

 

 

XOR_Starter flag

 

 

 

 

 

XOR Properties

 

 

 

 

 

from pwn import *

k1 = bytes.fromhex("a6c8b6733c9b22de7bc0253266a3867df55acde8635e19c73313")
k23 = bytes.fromhex("c1545756687e7573db23aa1c3452a098b71a7fbf0fddddde5fc1")
fk123 = bytes.fromhex("04ee9855208a2cd59091d04767ae47963170d1660df7f56f5faf")

print(xor(fk123, k1, k23))

 

 

 

 

 

Favourite byte

 

 

 

 

 

from pwn import *

c = bytes.fromhex("73626960647f6b206821204f21254f7d694f7624662065622127234f726927756d")

for i in range(256):
        print(xor(c,i))

 

 

 

 

 

Favourite byte flag

 

 

 

 

 

single byte이므로 00부터 FF까지 xor 연산을 해주는 코드를 실행하면 위와 같이 결과들이 나열이 됩니다. 이중 flag 형식을 가진 것을 찾으면 위와 같습니다.

 

 

 

 

 

You either know, XOR you don't

 

 

 

 

 

from pwn import *

print(len("0e0b213f26041e480b26217f27342e175d0e070a3c5b103e2526217f27342e175d0e077e263451150104")/2)

e = bytes.fromhex("0e0b213f26041e")
f = str.encode("crypto{")
print(xor(e,f))

e = bytes.fromhex("0e0b213f26041e480b26217f27342e175d0e070a3c5b103e2526217f27342e175d0e077e263451150104")
f = "myXORkey"*5+"my"
f = str.encode(f)
print(xor(e,f))

 

 

 

 

 

문제에서 암호화가 된 암호문과 xor연산으로 생성되었다고 기법을 알려주고 있지만 암호화에 사용된 키는 알려주고 있진 않습니다. 이때 문제 설명처럼 flag 형식을 이용하면 되는데 flag의 내용은 모르므로 내용이 나오기 전 정확하게 아는 부분은 "crypto{" 까지 입니다. 따라서 암호문 일부를 이 부분과 xor연산을 시키면 키의 부분을 알 수 있습니다. "myXORke" 가 생성되므로 "myXORkey"로 예상을 하고 암호문 길이만큼 늘려서 xor 연산을 시키면 flag를 구할 수 있습니다. ( xor()에서 길이가 암호문과 키의 길이가 달라도 자동으로 반복 되어서 늘릴 필요가 없었습니다... )

 

 

 

 

 

You either know, XOR you don't flag

 

 

 

 

 

이렇게 해서 CryptoHack의 첫번째 course를 마쳤습니다. xor 연산과 형변환은 crypto에서 기본으로 보입니다. ( 또한 xor 연산 전 항상 bytes로 변환해줍니다. )

'security > crypto' 카테고리의 다른 글

[Dreamhack] ICM2022 풀이  (0) 2023.12.17
[CryptoHack] Modular Arithmetic (1)  (0) 2023.11.22
[CryptoHack] Introduction to CryptoHack (1)  (0) 2023.11.20
[Dreamhack] Textbook-DSA 풀이  (0) 2023.11.15
[Dreamhack] Textbook-RSA 풀이  (0) 2023.11.13