Yozzang의 해킹일기 💻
article thumbnail
Published 2022. 8. 18. 00:09
Lena Tutorial (Level 1) Wargame/Lena Tutorial
728x90

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


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

Level 1

## 문제 해석 : 

기간이 지나서 라이센스를 새로 구매하라는 알림이 나와 있다. 이를 우회해서 프로그램을 실행하면 되는 것으로 보인다.

## 문제 풀이 : 

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

Level 1

프로그램을 계속 실행하다 보면 401073에서 "CreateFileA"라는 함수를 만나게 된다.

CreateFileA

해당 함수를 파일을 만드는 함수이며 파라미터 중 Mode = OPEN_EXISTING으로 되어 있다. 즉 FileName에 나와 있는 Keyfile.dat가 존재할 때만 실행한다는 의미이다. 여기서 Keyfile.dat가 존재하지 않으므로 FFFFFFFF라는 값을 반환해주었다.

 

이어서 바로 아래의 40107B를 살펴보면 JNZ라는 명령어가 나와있다. 즉, Zero가 아닌 경우에 실행된다는 것이다.

JNZ

우측의 레지스터를 보면 Z가 1로 세팅되어 있으므로 이를 0으로 바꾼 다음에 계속 실행을 해보겠다. (더블 클릭)

ReadFile

계속 실행하다 보면 위와 같이 ReadFile라는 함수를 만나게 된다. ReadFile는 말그대로 파일을 읽는 함수인데, 파라미터를 보면 hFile(핸들의 정보, ID)이 비어있다는 것을 알 수 있다. 즉 파일을 읽는데에 실패한다는 의미이다. 또한 우측 레지스터의 EAX값을 확인하면 0인 것을 알 수 있다.

 

ReadFile함수 바로 밑에 EAX값이 0인지 아닌지를 확인하는 명령어와 JNZ 명령어가 있다. 여기서 또한 위에 했던 방식대로 우회하면 된다.

JL

JNZ 명령어를 우회해서 실행하다 보면 위와 같이 JL 명령어와 만나게 된다. 해당 명령어는 값이 작을 때(Less) 실행하는 명령어이다. 우측 레지스터의 S를 확인하면 1로 세팅되어 있는데, 이는 Short를 의미한다.

 

먼저 4010F7 영역의 코드를 살펴보겠다.

4010F7

에러 메시지를 출력하고 종료하는 코드이다. 즉 우리는 JL명령어를 우회해야 한다. 레지스터의 S를 변경하는 법은 위에서 했던 것과 같이 더블클릭하면 된다.

 

총 2번의 JL명령어를 만나게 되는데 둘 다 S값 변경을 통해 우회하면 아래와 같이 성공하는 코드를 만나게 된다.

성공 코드
성공 알림

 또한 해당 문제는 간단하게 40107B의 코드를 JMP 401205로 수정하므로써 항상 성공하게 만들 수 있다.

### 수정할 코드 : 40107B -> JMP 401205

코드 변경

### 실행 결과 :

reverseMe_crack.exe

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

Lena Tutorial (Level 6)  (0) 2022.08.23
Lena Tutorial (Level 5)  (0) 2022.08.22
Lena Tutorial (Level 4)  (0) 2022.08.21
Lena Tutorial (Level 3)  (0) 2022.08.20
Lena Tutorial (Level 2)  (0) 2022.08.19
profile

Yozzang의 해킹일기 💻

@요짱

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