rev-basic-3
문제
문제는 다음과 같다.

해당 파일을 실행했을 때, Input에 틀린 답을 입력했는지 Wrong이 출력된다.
Correct를 출력하기 위해 올바른 답을 찾아보자.

풀이
값을 입력받는 곳까지 실행해준다. 그럼 Call chall3.7FF6992C1120에서 멈추게 되는데 호출되는 이 함수 안으로 들어가보자.

들어가보면 Correct와 Wrong을 볼 수가 있다.
Correct 직전에 호출되는 함수에서 입력받은 값과 메모리 값을 비교할 것이기 때문에 Call chall3.7FF6992C1000으로 들어가보자.

들어가서 어셈블리어를 확인해보면 반복문을 통해 입력받은 값과 메모리 값을 비교한다는 것을 알 수 있다.

어떤 반복문인지 확인해보기 위해 편리하게... IDA를 이용했다.
A와 B가 같지 않아야 return 0을 실행하고 이를 총 24번 반복하는 반복문이었다.

다시 x64dbg로 돌아가서 어셈블리어를 확인해봤더니
lea rcx, qword prt ds:[7FF6992C3000]을 보면
7FF6992C3000 주소에 rcx 값이 저장되어 있다는 것을 알 수 있다.
rcx에 값이 저장되어 있다는 것을 알게 됐으니 해당 주소로 따라갔다.

해당 주소로 가보면 24개의 문자들이 있는 것을 확인해볼 수 있고, 여기 이 문자들로 우리가 입력한 값을 비교한다는 것을 알았다. 하지만 우리가 입력한 값을 그대로 비교하는 것이 아니라 xor 연산을 통해 바꾸어 rcx 값과 비교한다.
그렇기 때문에 이 값들을 역연산해야 한다.
24개의 문자들은 우리가 알기 때문에 코드 짜는 데엔 문제가 없을 것이다.



답: I_am_X0_xo_Xor_eXcit1ng
'CTF > Reversing' 카테고리의 다른 글
| [DreamHack] rev-basic-2 문제 풀이 (0) | 2022.02.13 |
|---|---|
| [DreamHack] rev-basic-1 문제 풀이 (0) | 2022.02.10 |
| [DreamHack] rev-basic-0 문제 풀이 (0) | 2022.02.10 |

















