728x90
728x90
728x90

파일 링크: https://tuts4you.com/e107_plugins/download/download.php?list.17

 

Downloads / Lenas Reversing for Newbies - Tuts 4 You

 

tuts4you.com

Tutorials Index: 03. Basic nag removal + header problems 

사용도구: 올리디버거 2.01, Detect It Easy 2.04

 

Lena's Reversing for Newbie 03(이하 원본파일) 분석해보자.

 

원본파일을 실행하면 다음과 같은 창들이 뜬다.

[사진 1]
[사진 2]
[사진 3]

[사진 1], [사진 3] 메시지 박스가 뜨지 않도록 해보자.

 

 

[사진 4]

올리디버거로 원본파일을 열어보면 위와 같은 코드를 볼 수 있다. GetModuleHandleA 함수를 호출하고 반환 값이 0이면 첫 번째 Nag 메시지 박스를 무시하고 점프한다. GetModuleHandleA 함수는 전달된 모듈의 핸들을 반환하는데 만약 전달할 모듈이 NULL이라면 GetModuleHandleA 함수를 실행한 파일의 핸들을 반환한다. 즉, 무조건 핸들이 반환되는 것이다.

 

참고: https://jade9reen.tistory.com/15

 

GetModuleHandleA Function

출처: https://docs.microsoft.com/en-us/windows/desktop/api/libloaderapi/nf-libloaderapi-getmodulehandlea GetModuleHandleA function (libloaderapi.h) Retrieves a module handle for the specified module..

jade9reen.tistory.com

 

첫 번째 Nag 메시지 박스를 지우기 위한 방법이 두 가지 있다.

 

 

[사진 5]

첫 번째는 40100F 주소의 JE 명령어를 JMP 명령어로 패치하여 401024 주소로 점프하는 것이다. 이렇게 할 시 첫 번째 Nag 메시지 박스를 무시할 수 있다.

 

 

[사진 6]

두 번째는 PE 헤더에서 EntryPoint 값을 조정하는 것이다. 현재 원본파일을 실행하면 주소 401000부터 디버깅을 시작하는데, EntryPoint 값을 401024로 바꿔서 GetModuleHandleA 함수와 첫 번째 Nag 메시지 박스를 무시하는 것이다.

두 번째 방법으로 진행해보자.

 

 

[사진 7]

두 번째 방법으로 EntryPoint 값을 조정하면 위와 같이 원본파일을 실행하면 401024 주소부터 진행된다.

첫 번째 Nag 메시지 박스를 지웠다. 다음으로 401034 주소의 함수를 호출하고 401047 주소에서 두 번째 Nag 메시지 박스를 호출하는 것으로 보아 401034 주소의 함수 실행 시 [사진 2]의 박스가 뜰 것이다.

 

 

[사진 8]

위와 같이 401034 주소의 함수를 실행하자 [사진 2]의 박스가 뜬 것을 확인할 수 있다. 그리고 해당 박스를 종료하면 다음과 같이 두 번째 Nag 메시지 박스 코드로 돌아온다.

 

 

[사진 9]

위와 같이 두 번째 Nag 메시지 박스를 지우는 방법으로 많은 방법이 있겠지만 다음과 같이 단순하게 해당 명령어들을 NOP 명령어로 모두 패치했다.

 

 

[사진 10]

이제 원본파일을 실행하면 [사진 2]의 박스만 뜨는 것을 확인할 수 있다.

728x90
728x90

+ Recent posts