<악성코드 분석공부>/<WinAPIs>

[WinAPI] 리소스를 분석, 해체 해보자

gosoeungduk 2021. 8. 22. 21:54
반응형

#리소스 분석 API #FindResource #LoadResource #LockResource #SizeOfResource


악성코드에 리소스를 심어서 숙주파일을 뽑아내어 실행시키는 악성코드를 분석해보았다.

관련 API가 빈번히 나오는 것 같아서 정리해본다.

1. HRSRC FindResource( HMODULE hModule, LPCSTR lpName, LPCSTR lpType);

#include <winbase.h> 로 불러올 수 있다.

껍데기 파일에서 숙주 파일인 리소스를 찾는 함수이다. 인자들의 조건이 맞아떨어지면 리소스 정보 block 에 대한 핸들 을 리턴한다.

Return value 에 대한 msdn 설명

Type: HRSRC

If the function succeeds, the return value is a handle to the specified resource's information block. To obtain a handle to the resource, pass this handle to the LoadResource function.

[인자설명]

  • hModule : 리소스가 들어가있는 껍데기 파일의 핸들로, 보통 현재 파일의 모듈을 GetModuleHandleA(NULL) 로 가져와서 인자로 전달한다.

  • lpName : 리소스의 이름이다.

  • lpType : 해당 리소스 이름에 대한 타입이다.

2. HGLOBAL LoadResource( HMODULE hModule, HRSRC hResInfo);

반환 값에 대한 설명은 좀 말이 장황한 듯하다. 리소스 정보 block 에 대한 핸들 을 받아오고나서, 리소스 데이터 첫 바이트를 가져오는데에 쓰이는 핸들 을 리턴한다고 한다. LockResource 에 쓰일 인자를 얻기 위해서는 필수라고 생각하면 된다.

Return value 에 대한 msdn 설명

Type: HGLOBAL

Retrieves a handle that can be used to obtain a pointer to the first byte of the specified resource in memory.

If the function succeeds, the return value is a handle to the data associated with the resource.

[인자설명]

  • hModule : 1 번 함수랑 동일한 껍데기 파일의 핸들이다.

  • hResInfo : FindResource 가 리턴한 리소스 핸들이다.

3. DWORD SizeofResource(HMODULE hModule, HRSRC hResInfo);

리소스의 사이즈를 반환한다.

[인자설명]

  • hModule : 1 번 함수랑 동일한 껍데기 파일의 핸들이다.

  • hResInfo : FindResource 에서 나온 리소스 block 핸들이다.

4. LPVOID LockResource( HGLOBAL hResData);

해당 함수가 찐 리소스 데이터에 대한 첫 바이트 포인터를 반환한다.

[인자설명]

  • hResData : LockResource 를 통해 얻어진 권한이 충분히 주어진 리소스 핸들을 인자로 한다.

IDA 로 함수들을 동적분석해보면, 사실상 LoadResourceLockResource 나 같은 값을 반환해서 다른게 거의 없어보이긴 하다.

res

마지막으로, 해당 과정을 거치면 아래와 같이 VirtualAllocmemcpy 로 리소스를 가상메모리에 쓰는 형식으로 리소스가 쓰인다.

반응형

'<악성코드 분석공부> > <WinAPIs>' 카테고리의 다른 글

[WinAPI] 프로세스 순회해보자  (0) 2021.08.13