1. 검증 함수 (sub_405730) 핵심 검증 로직:

입력 바이트를 왼쪽으로 4비트 회전 후 피보나치 수열과 XOR 미리 정의된 바이트 배열과 비교하면 플래그를 알아낼 수 있다.

// 검증 알고리즘
v4 = 0, v3 = 1
for i in range(73):
    fib_val = (v4 + v3) & 0xFF
    if (expected[i] != (fib_val ^ ROL(input[i], 4))):
        return false
    v4 = v3
    v3 = v4 + v3
return true

#!/usr/bin/env python3

def rol(byte_val, bits):
    return ((byte_val << bits) | (byte_val >> (8 - bits))) & 0xFF

def ror(byte_val, bits):
    return ((byte_val >> bits) | (byte_val << (8 - bits))) & 0xFF

def generate_fibonacci_sequence(length):
    sequence = []
    v4 = 0
    v3 = 1

    for i in range(length):
        current_val = (v4 + v3) & 0xFF
        sequence.append(current_val)

        v5 = v4 + v3
        v4 = v3
        v3 = v5

    return sequence

def solve():
    expected_bytes = [
        0x37, 0x34, 0x55, 0x26, 0x0b, 0x2e, 0x46, 0x95, 0x24, 0x1f, 0xc3, 0xaf, 0x5f, 0x31, 0xed, 0x1b,
        0x0e, 0x56, 0x5b, 0xa4, 0x39, 0xc2, 0x13, 0x37, 0xb2, 0x51, 0xe0, 0xb6, 0x6b, 0xbe, 0x63, 0xc4,
        0x81, 0xaf, 0xd3, 0x6a, 0x3a, 0xf4, 0xc8, 0x2e, 0xbb, 0xd6, 0xbe, 0xb1, 0x0c, 0x87, 0x73, 0x07,
        0x57, 0xd1, 0xb5, 0x46, 0x6b, 0xcb, 0xa3, 0x84, 0xe4, 0x2a, 0x53, 0x1f, 0xfa, 0xa1, 0xfd, 0x8e,
        0x2b, 0xf6, 0x3e, 0x04, 0x1c, 0x92, 0x63, 0x77, 0x46
    ]

    fib_sequence = generate_fibonacci_sequence(73)

    flag = []
    for i in range(73):
        rotated_byte = expected_bytes[i] ^ fib_sequence[i]
        original_byte = ror(rotated_byte, 4)
        flag.append(chr(original_byte))

    return ''.join(flag)

if __name__ == "__main__":
    flag = solve()
    print(f"Flag: {flag}")
    print(f"Length: {len(flag)}")

image.png