Abex crackme # 3

728x90

1. CreateFileA를 호출한다. 아마 저 파일이 키 파일인거 같다.

2. GetFileSize를 호출하여 파일의 사이즈를 가져오고

3. eax와 12를 비교해서 같으면 키파일이 맞다는 상자가 뜨고 아니면 분기로 점프한다.

 

수정했을때 정확히 나오는것을 확인할 수 있다.

 

분석

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
);

CreateFileA의 원형은 다음과 같고, 0x401013~0x401025의 어셈블리를 해석하면 다음과 같다.

CreateFileA("abex.l2c", 0x80000000, 0, 0, 3, 80, 0)이고, 이 함수는 다음과 같이 동작한다.

"abex.l2c"파일을 생성하는데 쓰기 권한을 가지고 모든 프로세스의 접근을 차단한다. 또한 파일이 존재할 경우 파일을 열고, 모든 속성을 지정하지 않는다. 그렇기 때문에 abex.l2c라는 파일을 미리 생성해두어야 프로세스의 접근을 할 수 있다.

 

EAX = 0xFFFFFFFF

abex.l2c라는 파일을 만들고 다음 단계로 넘어가면 파일의 size를 구하는 부분이 나온다. 이때의 ret값은 eax에 들어가며, eax가 0x12(18)이랑 같아야 분기문으로 넘어가지 않고 key file found라는 부분이 뜰 것이다.

 

그래서 txt파일로 파일을 만들고, 안에 aaaaaaaaaaaaaaaaaa를 써준다음 저장 -> abex.l2c로 바꾼 후 파일을 실행시키면 정상적으로 jne분기문을 넘어 keyfile found라는 창을 볼 수 있다.

 

728x90

'리버싱공부' 카테고리의 다른 글

Lena's Reversing # 1  (0) 2022.01.16
Abex crackme # 5  (0) 2022.01.16
Abex crackme # 4  (0) 2022.01.16
Abex crackme # 2  (0) 2022.01.15
Abex crackme # 1  (0) 2022.01.15