#리소스 분석 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 로 함수들을 동적분석해보면, 사실상 LoadResource
나 LockResource
나 같은 값을 반환해서 다른게 거의 없어보이긴 하다.
마지막으로, 해당 과정을 거치면 아래와 같이 VirtualAlloc
과 memcpy
로 리소스를 가상메모리에 쓰는 형식으로 리소스가 쓰인다.
'<악성코드 분석공부> > <WinAPIs>' 카테고리의 다른 글
[WinAPI] 프로세스 순회해보자 (0) | 2021.08.13 |
---|