Reversing/DreamHack

드림핵 rev-basic-3 풀이

프레딕 2023. 12. 1. 20:22
728x90

Input 값에 알맞은 값을 넣어 Correct 값이 나오게 하면 되는 문제이다.

먼저 IDA에 프로그램을 넣고 main함수를 찾아보겠다.

Strings 항목에서 Correct 부분을 더블클릭해준후 F5를 통해 디컴파일 해주면 main함수를 찾을 수 있다.

딱봐도 sub_7FF677621000에 true가 반환되게 하면은 Correct를 얻을 수 있다. 

보면은 byte_7FF677623000[i]의 값이 i xor (a1+i) + 2*i랑 같아야 통과할 수 있다.

byte_7FF677623000값을 hex view에서 보면은 아래와 같다.

우리가 필요한 값은 0x18까지 즉, 24자리이므로 49부터 45까지의 값을 긁어와 파이썬을 이용해 플래그를 확인해보겠다.

by = [0x49, 0x60, 0x67, 0x74, 0x63, 0x67, 0x42, 0x66, 0x80, 0x78, 0x69, 0x69, 0x7B, 0x99, 0x6D, 0x88, 0x68, 0x94, 0x9F, 0x8D, 0x4D, 0xA5, 0x9D, 0x45]

for i in range(0, 24):
    print(chr((by[i]-2*i)^i),end="")
# i^a = by[i]-2*i
# a = (by[i]-2*i)^i

 

hex값을 by 리스트에 넣어뒀다.

그리고 방정식을 풀어야 하는데 a1이 우리가 구해야 할 값이다. (^ = xor)

by[i] = (i^(a1+i))+2*i

(i^(a1+i)) = by[i] - 2*i

i^a1 + i^i = by[i] - 2*i  # i^i = 0이 된다.

i^a1 = by[i]-2*i

i^(i^a1) = i^(by[i]-2*i) # i xor 을 양변에 하여 a1만 남게함

a1 = i^(by[i]-2*i)

이 a1값을 24번 반복문 돌려 주면은 I_am_X0_xo_Xor_eXcit1ng 이 나오게 된다.

728x90
반응형