ReverseMe 파일을 실행해보면 평가 기간이 만료되었으니 새 라이센스 구입하라는 메세지 박스가 뜬다.

OllyDbg로 열어보자.

CreateFileA
HANDLE CreateFileA(
[in] LPCSTR lpFileName,
[in] DWORD dwDesiredAccess,
[in] DWORD dwShareMode,
[in, optional] LPSECURITY_ATTRIBUTES lpSecurityAttributes,
[in] DWORD dwCreationDisposition,
[in] DWORD dwFlagsAndAttributes,
[in, optional] HANDLE hTemplateFile
);

- READONLY: 읽기모드
- OPEN_EXISTING: 파일이나 장치가 있는 경우에만 엽니다. (Keyfile.dat 파일이 없기 때문에 실패)
그 다음 실행결과를 -1(실패했을때)과 비교해서 다를 경우, 즉 성공했을 때 40109A 주소로 점프하고 실패했을 때 메세지 박스 호출 부분으로 점프한다.

ReadFile
BOOL ReadFile(
[in] HANDLE hFile,
[out] LPVOID lpBuffer,
[in] DWORD nNumberOfBytesToRead,
[out, optional] LPDWORD lpNumberOfBytesRead,
[in, out, optional] LPOVERLAPPED lpOverlapped
);

- hFile
- 장치에 대한 핸들
- 매개변수 는 읽기 액세스 권한으로 생성되어야 합니다.
- 비동기 읽기 작업의 경우 CreateFile 함수에 의해 FILE_FLAG_OVERLAPPED 플래그로 열린 핸들이거나 소켓이거나 accept 함수에서 반환된 소켓 핸들일 수 있습니다.
그 다음 ReadFile의 결과를 검사하는데 eax가 0일 경우, 즉 실패했을 때 4010F7로 이동한다.

"Keyfile is not valid. Sorry."라는 키 파일이 정상적이지 않다는 메세지 박스를 띄운다.

OllyDbg에서 우클릭후 Search for > all referenced text strings를 클릭하면 문자열들을 볼 수 있다.

401205에서 성공 메세지를 발견할 수 있다.

401205까지 가려면 ReadFile을 수행한 후 쭉 내려와야된다.

간단히 점프하는 부분을 수정해서 401205까지 가도록 만들어보자.(빨간 색이 수정한 부분)

수정한 부분을 드래그한 뒤 copy to executable > selection > 우클릭 > save file 하면 crack한 파일을 따로 저장할 수 있다.
