본문 바로가기

리버싱/Lena Tutorial

level 3

프로그램을 실행하면 나타나는 초기화면이다. nags창을 제거하라는 것을 볼 수 있다. OK버튼을 누르면 아래의 화면을 볼 수 있다.
register를 하려면 Nags창을 제거하라고 한다. 위의 창을 닫으면 아래의 화면을 볼 수 있다.
초기의 Nag창과 마지막 Nag창을 제거해야한다.
"GetModuleHandleA" 함수의 CALL 명령어를 통해 EAX로 나온 값을 보면 400000인 것을 확인할 수 있다(모듈에 대한 핸들 값을 얻으면 400000번지가 나온다.)
dump창에서 400000번지로 이동하면 MZ해더가 위치해 있다는 것을 알 수 있다.

1. EAX가 0이 되는 일은 절대로 없기 때문에 수정하지 않으면 JE조건문에서 분기가 일어나지 않는다. 하지만 분기가 일어나지 않으면 nag가 발생하기 때문에 수정이 필요하다.

2. 수정하는 방법은 다양하다. JE를 JMP로 수정하거나, ZF를 1로 수정하거나, "MessageBoxA" 함수 부분을 NOP로 채우거나, 401000번지로 되어있는 EP를 401024로 변경하면 프로그램이 401024번지로부터 시작하기에 nag창이 열리지 않는다.

"401052" 함수를 호출하는데, 넘어가는 인자의 첫번째 값은 400000이다. 앞에서 "GetModuleHandleA" 함수의 리턴값과 같다. 그래서 이 프로그램을 동작시키기 위한 함수라고 추측할 수 있다.
마지막 nag창이 발생하는 "MessageBoxA" 함수이다.
"MessageBoxA" 함수를 건너뛰는 조건문이 없기 때문에 위 사진의 범위 전체를 NOP으로 패치한다
패치 후 결과창

프로그램을 실행하면 nag창들이 나타나지 않는다.

 

PE구조를 알면 풀 수 있는 방법도 있으므로 추후 내용을 추가하도록 하겠습니다

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

level 8  (0) 2019.08.16
level 5  (0) 2019.05.23
level 4  (0) 2019.05.21
level 2  (0) 2019.05.17
level 1  (0) 2019.05.16