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='')
그리고 위의 연산을 반대로 하는 파이썬 코드를 작성했다.
실행하면 위와 같은 값을 확인할 수 있다.
그리고 확인해보면 맞는 값인 것을 알 수 있다.