01. Olly + 어셈블러 + 기본 reverseme 패치
ReverseMe 파일을 실행해보면 평가 기간이 만료되었으니 새 라이센스 구입하라는 메세지 박스가 뜬다.
OllyDbg로 열어보자.
CreateFileA
- 파일 또는 I/O 장치를 만들거나 엽니다. 가장 일반적으로 사용되는 I/O 장치는 파일, 파일 스트림, 디렉토리, 물리적 디스크, 볼륨, 콘솔 버퍼, 테이프 드라이브, 통신 리소스, 메일 슬롯 및 파이프입니다. 이 함수는 파일 또는 장치, 지정된 플래그 및 속성에 따라 다양한 유형의 I/O에 대해 파일 또는 장치에 액세스하는 데 사용할 수 있는 핸들을 반환합니다. (출처: msdn)
- 함수가 성공하면 반환 값은 지정된 파일, 장치, 명명된 파이프 또는 메일 슬롯에 대한 열린 핸들입니다.
- 함수가 실패하면 반환 값은 INVALID_HANDLE_VALUE 입니다.
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
- 지정된 파일 또는 입출력(I/O) 장치에서 데이터를 읽습니다. 장치에서 지원하는 경우 파일 포인터가 지정한 위치에서 읽기가 발생합니다.
- 함수가 성공하면 반환 값은 0이 아닙니다( TRUE ).
- 함수가 실패하거나 비동기적으로 완료되면 반환 값은 0( FALSE )입니다.
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한 파일을 따로 저장할 수 있다.
References
'네트워크 보안 > 보안' 카테고리의 다른 글
📖 해킹 공격의 예술 (0X000) (0) | 2022.05.05 |
---|---|
🐋 Docker 환경구축 (0) | 2022.01.15 |
vmware에서 wlan0 어댑터 설치하기 (0) | 2022.01.10 |
인증우회 (0) | 2021.12.31 |
취약점 (0) | 2021.12.30 |