본문 바로가기

Reversing/Lena Reversing

Tutorial 01

reverseMe.exe를 실행하면 다음과 같은 창이 나온다.

즉, 해당 문구가 뜨지 않도록 하는 것이 이번 문제의 목적이다.

 

OllyDbg를 이용해 코드를 확인해 보자.

 

`CreateFileA` API를 사용하여 "keyfile.dat" 파일을 열고자 한다.

`CreateFileA` API는 파일을 열지 못할 때, -1을 반환한다.

 

함수의 반환값과 -1을 비교하여 JNZ 즉, 두 값이 같지 않다면 0040109A 주소로 이동한다.

 

만약 두 값이 같아서, JMP가 되지 않는다면, 처음 실행했을 때 보았던 창이 나오게 된다.

 

따라서, JNZ를 JZ로 변경하여 두 값이 일치할 때 0040109A 주소로 이동하게 해야 한다.

 

다음으로는 `ReadFile` API를 호출한다. 이때, 읽는 파일인 hFile의 인자값이 FFFFFFFF이므로, 오류가 발생하여 0을 반환할 것이다.

 

따라서, TEST EAX, EAX로 ZF가 1로 설정되고 JNZ 조건에 만족하지 않아 004010F7로 이동할 것이다. 이를 우회하기 위해 JNZ를 JZ로 변경하여 ZF가 1일 때, JZ 조건을 통해 004010B4로 이동해야 한다.

 

다음은 004010B4 주소의 코드이다.

 

DS:[402173]과 10을 비교하고, DS:[402173]이 10보다 작다면 004010F7의 주소로 이동한다.

 

Flag를 확인해 보면, SF가 1, OF가 0이므로 조건에 만족하여 004010F7로 이동하게 된다.

 

이를 우회하기 위해 JL을 JG로 변경해야 한다.

 

그 후, ESI와 0을 비교하고, ESI가 0보다 작다면 004010F7로 이동한다.

 

Flag를 확인해 보면, SF가 1, OF가 0이므로 조건에 만족하여 004010F7로 이동하게 된다.

 

따라서, JL을 JG로 변경하여 우회하면 00401205 주소로 이동한다.

해당 주소에는 성공했다는 문자가 들어있어, 최종적으로 모든 우회를 성공했음을 알 수 있다.

 

'Reversing > Lena Reversing' 카테고리의 다른 글

Tutorial 05  (2) 2025.08.17
Tutorial 04  (2) 2025.08.15
Tutorial 03  (3) 2025.08.14
Tutorial 02  (3) 2025.08.14