이는 다음과 같은 Numer of trilas를 보여주는 메세지 창이 생성되는 경로를 따라서 가다가 비교문이 나온 구절을 보면된다.
entry point이다. 여기서 F8을 누르면서 trials 메세지 창을 띄우는 함수 호출을 찾으면 된다. 수동적으로 f8을 눌러도 가능하지만, ctrl + f8을 누르면 함수 호출이 이루어 진 곳에서 디버깅이 멈춘다. 디버깅이 멈춘 곳에 f2(브레이크 포인트)를 걸고 f7을 눌러서 함수 안으로 들어가서 trilas을 비교하는 구문이 있는지 찾는다. 아래 사진들은 ctrl+f8 -> f2브레이크 포인트 -> f2(재실행) -> f9 를 반복적으로 수행한 사진이다.
그러다 보면 아래 사진과 같은 곳에 도달하게 된다. 아래 사진은 윈도우 메세지 창 구조를 만드는 부분이다. 이는 peekmessageA, updatewindow, sendmessageA 등의 함수가 호출 된것을 보고 파악할 수 있다. mfc 프로그래밍, 각각의 함수들을 찾아보면 알 수 있다.
즉, 이전에 비교하는 구문이 있단 소리이다. 참고로 현재 53~ 주소는 우리 실행시킨 프로그램 주소가 아니라 라이브러리 주소임으로 우리 실행시킨 프로그램 안에 있는 비교문을 찾아봐야한다.
돌아가다 보면, jle라는 비교문이 있다.
아래 사진에 브레이크 포인트를 걸고 실행시키면 eax가 6이라고 나온다.우리의 trial도 6이다.
한번 프로그램을 실행시키고 다시 실행시켜보았다. 우리의 trial은 5로 감소하였고,
eax도 5로 감소되었다.
제로 플래그를 변경시켜서 실행시켰고, 아래 사진처럼 구매하라는 메세지가 생성되었다. 현재 비교문은 trial이 0이상인지 파악하는 구문이다.
je 구문에서 제로 플래그를 변경시키서 실행해보았다. 그러니 프로그램이 바로 종료되었다. 아마도 프로그램이 정상인지 파악하는 구문이다.
다음에 있는 jne구문을 제로플래그를 변경시켜서 실행해 보았고, trial메세지가 생성되지 않고 바로 본 프로그램이 실행되었다. 여기가 바로 유료버전인지 무료버전인지 확인하는 구문이다.
여기를 jmp로 패치하였다.
파일을 실행한 뒤, 종료시킨다. 이때 광고가 만들어진다. 호출 스택에 들어가서 main함수에 실행된 호출로 가본다.
아래 사진처럼 call 스택에 브레이크 포인트를 건다.
그 후 다시 광고를 뛰울려고 하면 호출 스택에 브레이크 포인트가 걸리고, 이르 f8로 실행시키면 광고가 발생된다.
이를 nop으로 변경시킨다.
패치하면 다음부터 광고가 발생하지 않는다.