본문 바로가기

CTF/SWING CTF 2022

[Rev] Ransomware

prob.zip
0.03MB

 

/dev/urandom 으로 무작위로 시드를 뽑는다.

그걸 이용해 16바이트 키를 가져온다.

xor 해서 flag.png 를 암호화한다.

무작위 rand 라서 rand 값을 유추할 수는 없지만, png 헤더는 값이 일정하기 때문에,

xor 의 특성을 이용해서 원래 png 헤더값과 암호화된 png 헤더값을 xor 하면

원본 키 16바이트를 구할 수 있다.

original ^ key = enc enc ^ original = key

 

...라고는 하는데 파일이 실행되지가 않아서 말이다.

 

original = [0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52]
data = open("./prob/enc_verysecret.png", 'rb').read()
temp = data[:0x10]
key = []
for i in range(0x10):
    key.append(original[i] ^ temp[i])
new = []
for i in range(len(data)):
    new.append(data[i] ^ key[i % 0x10])
new = ''.join(chr(_) for _ in new)
open("./output.png", 'wb').write(new.encode('iso-8859-1'))

아쉬운대로 Write-up에 다 나와있는 solve.py 코드나 분석해볼까 한다.

이게 맞나 싶지만 다른 사람이 짠거라도 읽다보면

일단 문제를 어떤 매커니즘으로 푸는지 감을 잡을 수 있고,

그럼 언젠가 나도 직접 코드를 짜서 문제를 풀게 되겠지.

 

png 사진을 열고 데이터를 읽어 저장한다.

데이터를 16진수로 바꿔서 temp에 저장한다.

key값을 original 값에 temp 제곱해서 추가하는걸 10번 반복한다.

new에 데이터에 key 제곱해서 추가하고,

output.png를 인코딩해서 작성한다.

 

SWING{Secure_rand_ransomware}

 

 

'CTF > SWING CTF 2022' 카테고리의 다른 글

[Web] Baby Sign  (0) 2022.12.04
[Rev] Snail  (0) 2022.12.04
[Rev] OPEN THE DOOR  (0) 2022.12.03
[Misc] QR Discovery  (0) 2022.11.18
[Pwn] SimpleBOF  (0) 2022.11.18