먼저 문제를 풀기 위해 사용한 디버거는 immunity Debugger이다.
처음엔 잘 몰라서 F8, F2, F7, F9로 막 들어가 봤다.
메시지 박스를 닫으면 이건 CD-ROM이 아니라는 메시지가 뜬다.
이 문제를 해결하려면 CD-ROM이 맞다는 메세지 창이 출력되어야 한다.
계속 코드 속으로 들어가보다가 아닌 것 같아서 맨 처음 화면을 찬찬히 보기로 했다.
첫 이미지 바로 밑의 코드이다. 오른쪽 부분을 보면 ASCII 코드가 보여서 추측할 수 있다.
어셈블리어 배웠는데 다 까먹어서 다시 찾아서 본 결과
INC : 1증가
DEC : 1감소
CMP : 비교
JE : 같으면 jump
근데 저기 JE 부분을 보고 그 주소로 가봤더니
오른쪽 ASCII 코드를 보니 CD-ROM이 맞다는 메시지가 나온 것으로 봐서 내가 가야할 주소였다.
근데 왜 이동을 안했을까 생각해보니 JE라는 명령어는 같아야 jump 이므로 EAX와 ESI 레지스터 값이 서로 같지 않아 저 주소로 이동하지 않고 실패 메시지 창을 띄운 것이다.
그래서 나는 JE를 JMP(무조건 jump) 명령어로 바꾸어 주었다.
그랬더니 성공 !!
/
+) 다른 라업들을 확인해보니 이 방법 말고도 코드를 추가로 작성해 EAX와 ESI 값을 같게 만들어주는 방법이 있었다.
++) 분석
JE로 EAX, ESI 레지스터 값이 동일한지 검증한 후 같으면 CD-ROM이 맞다는 메시지가 나오는 코드였는데 EAX와 ESI 값이 어디서 가지고 온 값인지 궁금하다.
코드를 보면 호출되는 함수가 GetDriveTypeA, ExitProcess, MessageBoxA로 3개가 있는 것을 볼 수 있다.
각 함수들을 하나씩 호출되는 순서대로 살펴보자
#MessageBoxA
이렇게 첫 메시지 창을 띄워주는 것이 바로 MessageBoxA
문제에서 일단 이 창이 제일 먼저 뜨는데, 이 창을 띄워주는게 MessageBoxA이다.
#GetDriveTypeA
이 함수가 내가 아까 궁금해했던 EAX와 ESI와 관련된 함수인 것을 알 수 있다.
#ExitProcess
함수 명만 봐도 종료 함수인 것을 알 수 있다.
759F410D 부분을 거치면 프로그램이 꺼진다.
'Reversing > Wargame' 카테고리의 다른 글
[CodeEngn] Basic RCE L06 (0) | 2021.02.19 |
---|---|
abex's crackme #2 (0) | 2021.02.18 |
[suninatas] REVERSING 9 (0) | 2021.02.17 |
[XCZ.kr] Prob.9 Easy Reversing (0) | 2021.02.17 |
abex' crackme #3 (0) | 2021.02.16 |
댓글