Yozzang의 해킹일기 💻
article thumbnail
Published 2022. 9. 12. 00:32
Lena Tutorial (Level 15) Wargame/Lena Tutorial
728x90

이번 포스트에서는 레나 튜토리얼의 Level 15 문제에 대해 다루겠다.


문제를 실행하면 다음과 같다.

Level 15

## 문제 해석 : 

해당 프로그램을 실행하면 다음과 같이 2개의 Nag가 출력된다.

Nag 1
Nag 2

2개의 Nag를 제거하면 되는 것으로 보인다.

## 문제 풀이 : 

먼저 Ollydbg를 통해 해당 파일을 열어보겠다.

Level 15

해당 프로그램을 실행하여 Nag가 뜬 상태에서 정지하고 Call stack을 확인해보면 다음과 같다.

Call stack

JMP으로 시작하는 스택이 있다. 해당 스택을 자세히 확인해보겠다.

432C60

해당 위치에 BP를 걸고 실행한 다음에, ESP를 확인해보면 다음과 같다.

42039F

ESP의 바로 윗부분에 CALL 명령어가 있다는 것을 알 수 있다. 해당 명령어는 윈도우를 출력하는 함수로 예상된다. 또한 더 위로 올라가면 JE 분기문이 존재한다는 것도 확인할 수 있다. 이 부분을 수정해서 Nag를 출력하지 않게끔 할 수 있다.

 

Nag는 총 2개가 존재하며, 하나는 프로그램 시작할 때, 나머지 하나는 프로그램을 종료할 때이다. 둘 다 42039A 명령어를 통해서 출력된다. 즉, 420379의 JE부분만 수정하면 두개의 Nag를 없앨 수 있다. 그러나, 프로그램 윈도우를 띄우는 함수도 역시 42039A를 통해서 실행되므로 무작정 없애버리면 안된다.

 

JE 명령어를 확인해보면 EAX의 값애 의해 동작하는데, 프로그램을 맨 처음에 실행할 때 나타난 순서는 시작 Nag - 정상 프로그램 - 종료 Nag이다. 여기서는 함수를 호출할 때마다 EAX 값을 1씩 증가시켜, EAX가 2인 경우에만 해당 함수(42039A)를 호출할 수 있겠끔 하면 된다.

 

빈 공간을 만든 다음에 다음과 같이 작성하면 된다.

인라인 패치 - 코드 작성

원래의 JE 명령어가 4바이트밖에 차지하지 않았기 때문에 인라인 패치를 해야 한다. 코드를 작성한 다음에 원래 코드 위치에 해당 코드를 호출해보겠다.

인라인 패치 - 코드 호출

### 실행 결과 : 

우회 성공

이로써 해당 프로그램의 Crack를 마치겠다.

'Wargame > Lena Tutorial' 카테고리의 다른 글

Lena Tutorial (Level 17)  (1) 2022.09.23
Lena Tutorial (Level 16)  (0) 2022.09.14
Lena Tutorial (Level 14)  (0) 2022.09.05
Lena Tutorial (Level 13)  (0) 2022.09.04
Lena Tutorial (Level 12)  (0) 2022.09.03
profile

Yozzang의 해킹일기 💻

@요짱

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!