시작하기 전:
x32dbg로 진행했습니다. x64dbg는 실행파일 문제인지 디버깅이 되지 않음.
당연히.... 32비트에서 굴러가는 실행파일을 64비트 전용 디버거로 돌리려 하면 돌아가겠습니까(...)
첫번째 call 함수를 확인하기 위해 F8로 진행.
첫번째 call로 호출한 MessageBoxA 함수에 도달하면 위와 같은 메세지 창이 뜬다.
다시 F9를 이용하여 createfileA 함수를 call 하는 곳 까지 이동한다.
https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/nf-fileapi-createfilea
HANDLE CreateFileA(
LPCSTR lpFileName,
DWORD dwDesiredAccess,
DWORD dwShareMode,
LPSECURITY_ATTRIBUTES lpSecurityAttributes,
DWORD dwCreationDisposition,
DWORD dwFlagsAndAttributes,
HANDLE hTemplateFile
);
위와 같이 파라미터는 총 7개를 받는다. 이 중, 모드를 정하는 dwShareMode를 push 한 값을 위 디거에서 찾아보면 3으로 받아진 것을 알 수 있다.
위와 같이 파일이 존재해야만 파일을 오픈하는 모드라는 것을 알 수 있다. 이 call문 바로 아래에 있는 CMP까지 바로 도달하면 아래와 같은 에러문을 출력하는 것을 알 수 있다.
CMP문에서 파일 포인터 위치를 eax에 지정하고(여기는 확신이 아님니다..), 없을 경우(FFFFFF) 위와 같은 에러문을 낸다. 이 CMP문을 피하기 위해 jne 등으로 값을 바꿔도, 이후에 나올 CMP문에 의해 정상적으로 실행할 수 없다.
결국 정답은 이 실행파일에서 요구하는 제목의 실행파일을 만드는 것이다.
위와 같이 abex.l2c 라는 파일을 abexcm3.exe가 들어있는 폴더에 넣어준다.
이 상태로 F9를 눌러 쭉 실행해보면 아래와 같은 에러문이 뜬다.
바로 아래에 있는 CMP문을 비교해보면, 위에서 만든 파일 사이즈를 받아 12와 비교하게 된다.
이 파일도 총 세가지의 해결 법이 있다
1. 12에 맞게 파일 크기 수정
여기서 12는 hex값이므로, 실제로는 18바이트에 맞게 파일 크기를 수정해준다. 텍스트로 18자 입력하면 됨.(한글 제외)
이와 같이 파일을 수정해주면 CMP문을 넘길 수 있다.
2. je -> jne로 수정
3. CMP문에서 eax를 비교하기 전 eax를 12로 강제 수정
이렇게 총 세가지 방법이 있고, 이 방법으로 CMP문을 넘기면 아래와 같은 메세지를 받을 수 있다.
'Write-Up > Reversing' 카테고리의 다른 글
[disass] structure.c (0) | 2019.10.02 |
---|---|
disassembly 실습_190925 (0) | 2019.09.25 |
Abexcm1.exe (0) | 2019.03.23 |