BOOL CreateProcessA(
[in, optional] LPCSTR lpApplicationName,
[in, out, optional] LPSTR lpCommandLine,
[in, optional] LPSECURITY_ATTRIBUTES lpProcessAttributes,
[in, optional] LPSECURITY_ATTRIBUTES lpThreadAttributes,
[in] BOOL bInheritHandles,
[in] DWORD dwCreationFlags,
[in, optional] LPVOID lpEnvironment,
[in, optional] LPCSTR lpCurrentDirectory,
[in] LPSTARTUPINFOA lpStartupInfo,
[out] LPPROCESS_INFORMATION lpProcessInformation
);
dwCreationFlags
: 프로세스를 어떤 목적으로 생성할지 결정하는 플래그 (or로 다수 선택 가능.)
dwCreationFlags에는 다양한 플래그가 있는데, 그 중에서도 자식 프로세스를 생성할 수 있는 악성행위가 가능한 CREATE_SUSPENDED 플래그를 살펴볼 것임.
CREATE_SUSPENDED
: 프로세스가 중지 상태로 생성
중지 상태로 생성되기 때문에 스레드 우선순위를 변경하거나, 주소 공간 내 메모리를 변경하거나(INJECTION) 프로세스를 잡에 추가하는 등의 코드를 수행할 수 있다.
자식 프로세스 생성
CREATE_SUSPENDED 값을 인자로 하여 대기 상태의 프로세스를 생성한다.
-------------------
9. LPPROCESS_INFORMATION lpProcessInformation (OUT Param)
- 프로세스가 초기화되기 전에 이 구조체에 정보를 넣는다

- CreateProcess 동작이 완료되고 TRUE를 리턴하기 직전에 PROCESS_INFORMATION 구조체를 채움
- hProcess와 hThread 멤버에 커널 오브젝트 핸들 값들을 각각 넣음
- 마찬가지로 ProcessID, ThreadID도 채워줌
Reference : https://wonjayk.tistory.com/277