본문 바로가기

Reversing

NahamCon CTF 2022 babyrev writeup

반응형

NahamCon CTF 2022 babyrev writeup

1. babyrev Writeup [392 pts] (Author - brosu)

Description

Aw look! Baby is using a disassembler!

NahamCon CTF 2022 rev writeup

문제에서 준 babyrev를 실행하면 다음과 같다. 

 

 

 

babyrev ida

 

먼저 문제를 풀기 위해 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