lena tutorial 3
lena tutorial 3은 잔소리 메시지 창을 제거하는 것이다. 프로그램을 실행하면 Remove the nags to register This will make program fully registered :))
메시지 창을 확인할 수 있다. OK
를 선택하여 메인 프로그램을 확인하고 프로그램을 종료하면 Oops! I am not registered!!
메시지 창을 출력한다. 이 두개의 메시지 창을 제거한 버전을 만들어보자.
먼저 첫 번째 메시지 창을 제거하기 위해서는 GetModuleHandleA 함수의 반환 값이 0이어야 한다.
.text:00401002 call GetModuleHandleA
.text:00401007 mov hInstance, eax
.text:0040100C cmp eax, 0
.text:0040100F jz short loc_401024
그러나 0을 반환한다는 것은 모듈의 핸들을 얻지 못했다는 것이므로 프로그램이 정상 동작하지 않는다. 다시 말해 프로그램이 정상적으로 실행될 경우 반드시 출력되는 메시지 창이라고 이해할 수 있다. 여러 패치 방법이 있지만 여기서는 비교 조건을 변경하는 것으로 (jz -> jnz) 메시지 창 로직을 건너뛰자.
.text:0040100F jnz short loc_401024
메인 프로그램 메시지 박스 호출(MessageBoxA) 후 종료 시 ExitProcess 함수 수행 전에 있는 메시지 창 생성 로직을 건너 뛰기 위해서
.text:00401039 jmp short loc_40104D
로 수정하여 패치된 파일을 저장한다. 패치된 파일 실행 시 안내 메시지 창이 제거된 것을 확인 할 수 있다.