반응형
NahamCon CTF 2022 babyrev writeup
1. babyrev Writeup [392 pts] (Author - brosu)
Description
Aw look! Baby is using a disassembler!
문제에서 준 babyrev를 실행하면 다음과 같다.
먼저 문제를 풀기 위해 IDA에서 프로그램을 실행해보자. 첫 scanf에서는 bossbaby를 입력해야 한다.
이후 두 번째 scanf에서는 sub_12B2에 입력값을 넣어서 return값이 0x26이 되면 문제가 해결된다.
solution
import struct
# Data from Ghidra
data = b'\x66\x00\x00\x00\xd9\x00\x00\x00\x88\x01\x00\x00\x41\x03\x00\x00\xc0\x07\x00\x00\xf9\x06\x00\x00\xa4\x18\x00\x00\x95\x00\x00\x00\x0a\x01\x00\x00\xd5\x01\x00\x00\x7c\x03\x00\x00\xa9\x03\x00\x00\xb0\x07\x00\x00\x69\x19\x00\x00\x27\x01\x00\x00\xa3\x01\x00\x00\xc4\x01\x00\x00\xb9\x02\x00\x00\x54\x07\x00\x00\x89\x08\x00\x00\x50\x0f\x00\x00\xf0\x01\x00\x00\x54\x02\x00\x00\xd9\x02\x00\x00\x58\x05\x00\x00\x71\x05\x00\x00\x24\x09\x00\x00\x19\x10\x00\x00\x42\x03\x00\x00\xad\x03\x00\x00\x08\x05\x00\x00\xe9\x06\x00\x00\x30\x0a\x00\x00\xe1\x10\x00\x00\x84\x12\x00\x00\x00\x05\x00\x00\xd2\x05\x00\x00\x4d\x07\x00\x00'
# Unpack data into integers (4 bytes)
encrypted_values = [unpacked[0] for unpacked in struct.iter_unpack('<I', data)]
flag = b""
for i in range(len(encrypted_values)): # For every character
for c in range(256): # For every possible character
# *(int *)(param_2 + (long)i * 4) = i * i + ((int)param_1[i] << ((char)i + (char)(i / 7) * -7 & 0x1fU));
value = i * i + (c << (i + (i // 7) * -7 & 0x1f))
if value == encrypted_values[i]: # If the value matches the encrypted value
flag += bytes([c])
break
print(flag)
728x90
'Reversing' 카테고리의 다른 글
KnightCTF 2023 Rev - Help Jimmy Writeup (0) | 2023.01.27 |
---|---|
Knight CTF 2022 Reversing Droid Flag Wrteup (0) | 2023.01.22 |
KnightCTF 2022 Baby Shark writeup (0) | 2023.01.19 |
irisCTF 2023 baby reversing writeup (0) | 2023.01.11 |
2013 RoboAuth 리버싱 문제 풀이 (0) | 2022.08.10 |