레나의 튜토리얼! 문제를 꼼꼼히 풀어보겠다.!

기타 다른 리버싱문제를 풀고있었지만, 뭔가 조금 부족한 느낌이 들어서 Lena's Tutorial을 먼저 완파하면서 공부를 더해야겠다는 생각이 들었다.

Lena 151 의 첫번째 문제이다. :)



(첫번째 문제)


실행을 하면 아래와 같이 뭔가 문구가 뜬다.




(실행 화면)



새로운 라이센스를 사라고 한다.
여기서 OK 버튼을 누르면 프로그램이 종료된다...

올리디버거를 이용해 프로그램을 확인해 보겠다.



(올리디버거 실행)


시작하자마자 main 함수에서 딱 멈추어 주었다.

실행 코드 중 눈에 띄는 API가 있었다.



(CreateFileA)



기본적으로 CreateFileA API는 파일을 생성하는 함수이다.
그런데 Mode를 보니 OPEN_EXISTING 이 설정되어있다.
이 것이 설정되어있으면 기존에 파일을 찾아서 열고 만약 이 파일이 없다면 에러를 리턴한다.

아.! 일단 여기서 걸렸구나. 계속 한번 진행해본다.


(잘못된 길)



호출 후 EAX를 -1 과 비교한다. 이 때 파일이 없으면 EAX가 FFFFFFFF 로 리턴되는 것을 확인했다.
즉 이 값은 -1이기에 점프하지 않고 바로 문제의 길로 들어선 것이다.

먼저 Keyfiled.dat 파일을 만들자!



(파이썬 이용)



파이썬을 이용해 Keyfile.dat 파일을 생성해주었다.
내용은 그냥 아무값 90을 넣어주었다. 100개정도 (이따 확인하기 위하여)

(같은 경로)



프로그램과 같은 경로로 옮겨준다.

자 이제 다시 실행해본다.



(올바른 점프)



문제의 길로 들어서지 않고 올바른 길로 점프하였다.

그다음은?
ReadFile이 보인다. 해당 파일을 읽어서 뭐 하려나보다.!

확인해본다!



(비교중)



확인해보니 반복하면서 확인하고 있었다.
AL이 Null 이면 종료를 하고 47이면 esi를 하나 올리고 그렇지 않은 경우 ebx를 하나씩 늘리면서 반복한다.

그런데 비교하는 AL은  바로...!



(우리의 파일)



우리가 90을 입력했던 데이터이다.

일단 이 내용과 비교하는 것을 확인했다.
그리고 0x47과 비교하는 문장



(0x47비교)



데이터 한바이트씩 읽어서 비교를 하는데 0x47이면 esi를 하나씩 증가시킨다. 그래서 맨 마지막에 8과 비교해서 크면 올바른 길로 들어선다.

즉! 0x47을 8개 이상! 넣어줘본다.



(넉넉히 9개)



9개를 넣어주었다.

그리고 다시 실행해주니



(축하메세지)



축하메세지를 전달해주는 모습을 볼 수 있었다.

문제 해결!


(문제 해결)

'WarGame > 500 Project' 카테고리의 다른 글

(44/500) - pwnable.kr - collision  (0) 2017.07.05
(43/500) - pwnable.kr - fd  (0) 2017.07.05
(41/500) Wargame.kr - Crypto Crackme Basic  (0) 2017.06.28
(40/500) Wargame.kr - EASY_CrackMe  (0) 2017.06.27
(39/500) Suninatas - Binary(11)  (0) 2017.06.27

+ Recent posts