문제
풀이
우선 파일을 실행시켜 보았다.
그러면 이러한 메시지를 확인할 수 있다.
확인을 누르면 이런 메시지가 출력이 된다.
이 문제는 Ollydbg를 사용하여 풀었다.
Ollydbg로 파일을 열어보았다.
F9를 눌러 실행시켜보았다.
이 부분이 메인인것 같다.
F8을 누르며 한 줄씩 실행하였다.
아까 실행시켰을 때 보았던 메시지가 보인다.
0040101D INC ESI : ESI 값을 1 증가
0040101E DEC EAX : EAX 값을 1 감소
0040101F JMP SHORT abexcm1.00401021 : 00401021 주소값으로 점프
00401021 INC ESI : ESI 값을 1 증가
00401022 INC ESI : ESI 값을 1증가
00401023 DEC EAX : EAX 값을 1 감소
00401024 CMP EAX,ESI : EAX의 값과 ESI의 값을 비교
00401026 JE SHORT abexcm1.0040103D : EAX의 값과 ESI의 값이 같다면 0040103D 주소값으로 점프
하지만 실행해보면 알다시피 0040103D로 이동하지 않는다.
즉, EAX의 값과 ESI의 값이 다르다는 의미이다.
값을 보니 EAX의 값은 1이고 ESI의 값은 3으로 다르다.
그래서 JE SHORT abexcm1.0040103D 을 수정하였다.
JMP : jump
JE : jump if equal
JE를 JMP로 바꾸어 EAX의 값과 ESI의 값에 상관없이 무조건 0030103D 주소값으로 점프하도록 수정해주었다.
이렇게 하고 F8을 눌러 실행하면 0040103D로 점프하는 것을 확인할 수 있으며 우리가 원하던 메시지창이 뜬다.
이 방법 말고도 INC와 DEC를 조정하여 문제를 풀 수도 있다.
아까 EAX의 값이 1, ESI의 값이 3으로 비교를 하였다.
INC ESI가 두 개가 있었는데 이를 NOP으로 바꿔주면 이를 실행하지 않게 된다.
INC를 NOP으로 바꾸어 2를 증가시키지 않았더니 EAX의 값과 ESI의 값이 1로 동일하게 나왔다.
이렇게 실행을 하니 JE SHORT abexcm1.0040103D 를 실행하여 0040103D로 점프하여 원하는 메시지가 나타난다.
'Wargame & CTF > abex' crackme' 카테고리의 다른 글
[abex' crackme] 5번 문제 풀이 (0) | 2020.09.26 |
---|---|
[abex' crackme] 4번 문제 풀이 (0) | 2020.09.26 |
[abex' crackme] 3번 문제 풀이 (0) | 2020.09.26 |
[abex' crackme] 2번 문제 풀이 (1) | 2020.09.20 |