이런 바이너리가 주어진다.
WINAPI에 BreakPoint를 설치해보면 다음과 같이 나온다.
0040106C의 JMP를 따라가면 다음 코드가 나오는데,
00401071로 다시 점프함을 알수있다.
F9으로 쭉 실행시키면 예외가 발생되는데, [eax]주소에 nop을 설치하려다 예외가 발생되어서 실행이 멈추어진것이다.
정리해보면, 00401071주소의 Jmp를 nop으로 만들어서 Correct문자열을 출력시키면 되는것이다.
eax의 값를 보면 다음과 같이 나왔다.
입력은 1234였고, inc명령을 통해서 + 1이 진행되는걸 알고있다.
0을 기준으로 계산하면 어떤식으로 계산하는지 빠르게 알수있을것같다.
-1을 넣어야하는데, 음수를 받지않으니 16진수로 FFFFFFFF -> 4294967295를 넣는다.
+1을 진행하면 0이 나온다.
601605CA가 나왔다.
정리해보면 다음과 같다.
1234 -> 1235 -> 6016A9D
-1 -> 0 -> 601605CA
계산은 다음과 같이 진행되었다는걸 유추할수있다.
-1 + 1 + 601605CA
따라서 다음 식이 나온다
input + 1 + 601605CA = eax
임으로, 다음과 같이 생각할수 있다.
(n = 1, m = 0x601605CA)
(x + n) + m = y
(y - n) - m = -x
다음 식에 0x401071을 넣는다면..
401071 - 1 - 601605CA = - (FFFFFFFFA02A0AA6)
마이너스 부호가 한번 더 들어가있음으로 FF를 지워주면 A02A0AA6가 나온다.
A02A0AA6 -> 2687109798
2687109798가 정답이다.
'리버싱' 카테고리의 다른 글
해킹의 방어에 대한 개인적인 생각 (1) | 2020.09.02 |
---|---|
64비트 프로세스 은닉 (3) | 2020.04.09 |
reversing.kr (Music_Player.exe) (0) | 2020.03.27 |
reversing.kr (Easy_UnpackMe.exe) (0) | 2020.03.27 |
reversing.kr (Easy_KeygenMe.exe) (0) | 2020.03.27 |