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
반응형
'Reversing > DreamHack' 카테고리의 다른 글
드림핵 Quiz: x86 Assembly 2 풀이 (0) | 2023.11.29 |
---|---|
드림핵 Quiz: x86 Assembly 3 풀이 (2) | 2023.11.29 |