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 

https://docs.microsoft.com/en-us/windows/win32/api/processthreadsapi/nf-processthreadsapi-createprocessa

+ Recent posts