이번 포스트에서는 레나 튜토리얼의 Level 14 문제에 대해 다루겠다.
문제를 실행하면 다음과 같다.
## 문제 해석 :
DVD 메뉴 스튜디어 프로그램이다. 등록(Register)하면 되는 것으로 보인다.
## 문제 풀이 :
먼저 Ollydbg를 통해 해당 파일을 열어보겠다.
해당 프로그램을 실행하여 Register 코드를 아무거나 입력해보면 다음과 같은 에러창이 뜬다.
Ollydbg의 스레드 기능을 통해 다음과 같은 현재 실행 중인 스레드 리스트를 확인할 수 있다.
메인 스레드에 들어가서 커널을 확인해보면 다음과 같이 에러 메시지 박스를 호출하는 부분을 볼 수 있다.
해당 함수를 호출하는 곳으로 가서 확인해보면 다음과 같다.
여기서 BP를 걸고 재실행해보면 스택 영역에 다음과 같은 내용이 담겨있다.
5B5F6E에서 왔다는 사실을 알 수 있다. 해당 위치에 가서 확인해보면 다음과 같다.
해당 함수가 어디에서 호출되었는지를 알기 위해 5B5F4C 줄에 Ollydbg의 Find references to 기능을 사용해보겠다.
해당 모든 레퍼런스 부분에 BP를 걸고 재실행해보겠다.
에러창을 호출하는 함수에 BP 걸린 모습을 확인할 수 있다. 아래 부분을 확인해보면 Thank you for you...로 성공 문구를 호출하는 메시지 박스가 존재한다. 이는 사진 위쪽 부분 4DC1A0의 JNZ 분기문에 의해 결정된다. 0이 아닌 경우에만 성공한다는 것을 확인할 수 있다.
또한 해당 JNZ 명령어의 결과값은 EAX 값에 의해 정해지기 때문에 EAX의 값을 확인해봐야 할 필요가 있다.
위로 계속 이동하면서 조사해본 결과, 4DBD9E 줄에 처음으로 EAX 값이 세팅된 것을 확인할 수 있다. 또한 확인해본 결과, 바로 아래 쪽의 CMP 명령어를 통해 1과 비교하고 있는 부분이 정상 실행 부분이므로 EAX를 1로 변경해보겠다.
그러나 4DBD9E에 있는 코드는 6바이트를 쓰고 있지만, 1로 바뀐 경우 8바이트를 쓰게 되므로 오버플로우가 발생한다. 따라서 인라인 패치 기법을 통해 우회를 해야 한다.
위와 같이 빈 공간을 확보한 다음에 공격 코드를 삽입한다. PUSH EBX와 PUSH ESI를 삽입하는 이유는 해당 부분이 JMP 명령어에 의해 오버플로우되기 때문이다.
다시 올라가서 JMP 명령어를 통해 작성한 공격 코드 주소로 갈 수 있게끔 만들어준다.
### 실행 결과 :
이로써 해당 프로그램의 Crack를 마치겠다.
'Wargame > Lena Tutorial' 카테고리의 다른 글
Lena Tutorial (Level 16) (0) | 2022.09.14 |
---|---|
Lena Tutorial (Level 15) (0) | 2022.09.12 |
Lena Tutorial (Level 13) (0) | 2022.09.04 |
Lena Tutorial (Level 12) (0) | 2022.09.03 |
Lena Tutorial (Level 11) (0) | 2022.09.02 |