Write-up/Reversing

[Dreamhack] rev-basic-5

mameul 2024. 5. 14. 00:28
728x90

풀이

main 함수를 보자. 이번에는 sub_140001000 함수를 봐야한다. 

함수를 살펴보면 a[i]+a[i+1] 이 byte_140003000의 배열값과 일치하면 된다.

 

여기서 생각해보면 (byte_140003000의 배열값이 data라고 할 때)

data[0] = a[0] + a[1]

data[1] = a[1] + a[2]

...

data[23] = a[23] + a[24]

이다.

 

data[23] = 0 인데 a는 unsigned integer이니까 a[23] = a[24] = 0 이어야 data[23] = 0일 수 있는 것을 알 수 있다.

 

byte_140003000에서의 값을 찾아오자. 

hex_string = "AD D8 CB CB 9D 97 CB C4 92 A1 D2 D7 D2 D6 A8 A5 DC C7 AD A3 A1 98 4C 00 00 00 00 00 00 00 00 00"

hex_values = hex_string.split()[:24]

decimal_values = [int(x, 16) for x in hex_values]

data = decimal_values[::-1]

tmp = [0]

for i in range(24):
    a = data[i]-tmp[i]
    tmp.append(a)

for i in range(24,0,-1):
    print(chr(tmp[i]),end='')

그리고 위의 연산을 반대로 하는 파이썬 코드를 작성했다. 

실행하면 위와 같은 값을 확인할 수 있다.

그리고 확인해보면 맞는 값인 것을 알 수 있다.