❓ 문제
Greetings, mere mortal! Are you ready to embark on a journey to unveil the flag and gain the wisdom of the floating Viking head? Harness the power of the oracle's gaze and use his words to guide you towards victory.
올바른 값을 입력하면 그 값이 플래그인 것 같다
💡 풀이
먼저 ida에 바이너리를 올려 내용을 파악한다.
입력값을 받고 encrypt 함수로 암호화한 후 ciphertext와 암호화된 입력값과 0x1B 길이만큼 비교를 하게 된다.
encrpyt함수를 확인해보면
인자로 받은 문자열을 0x5D와 XOR연산을 하는 것을 확인 할 수 있었다.
ciphertext를 알아내서 0x5D와 XOR 연산을 하면 flag값이 나온다는 것을 알 수 있다.
ciphertext를 알아내기 위해 gdb로 확인을 해보았다.
먼저 memcmp에 브레이크포인트를 걸어 인자로 들어가는 값을 확인한다.
RSI값은 암호화된 입력값이고, RDI에는 암호화된 ciphertext 주소가 들어가 있어 ciphertext의 값을 확인한다.
6008 주소부터 0x1Bbyte값을 모두 빅엔디안 값으로 바꾸어서 0x5D와 XOR하고 문자로 변환하여 출력하는 코드를 짜면 다음과 같다
def encrypt(s):
for i in range(len(s)):
s[i] ^= 0x5D
cipher_str = "2B3436381E091B26336D02686A0F6C336468021B6D2F02046D28200000000000"
#연산을 위해 16진수로 두글자씩 분리
cipher = [ int(cipher_str[i:i+2],16) for i in range(0,len(cipher_str),2)]
#역연산
encrypt(cipher)
#역연산한 값을 문자로 변환
cipher = [ chr(x) for x in cipher ]
#문자 리스트를 문자열로 변환
print(''.join(cipher))
=================================================================================
#결과
vikeCTF{n0_57R1n95_F0r_Y0u}]]]]]
'해킹 > CTF Write-Ups' 카테고리의 다른 글
HACKTHEON SEJONG 2025 Preliminaries Write-up (0) | 2025.04.27 |
---|---|
DEF CON CTF Qualifier 2025 Write-Up (0) | 2025.04.14 |
R3CTF/YUANHENGCTF 2024 Write-Up (1) | 2024.06.11 |
N0PSctf 2024 Write-Up (0) | 2024.06.03 |
[WolvCTF Write-up] child-re (0) | 2023.04.10 |