메모리 버퍼에서 프로세스 생성
이 게시물에서는 별도의 작업 없이 메모리 버퍼에서 직접 프로세스를 생성하는 기술을 살펴보겠습니다. 파일 저장. 이는 제공된 배경 스토리와 같이 코드 삽입 또는 보안 패치와 관련된 유용한 시나리오일 수 있습니다.
기술 분석
Windows는 CreateProcess API에 CREATE_SUSPENDED 플래그를 제공합니다. ResumeThread 함수가 호출될 때까지 프로세스가 일시 중단된 상태로 유지되도록 허용합니다. 이 창은 실행 전에 프로세스 메모리와 컨텍스트를 조작할 수 있는 기회를 제공합니다.
-
프로세스 일시 중지 및 검사: CreateProcess(CREATE_SUSPENDED)를 사용하여 프로세스를 일시 중지하고 다음을 사용하여 일시 중지된 스레드의 컨텍스트를 검색합니다. GetThreadContext.
-
기본 주소 식별: EBX 레지스터에는 PBE(Process Enviroment Block) 구조에 대한 포인터가 포함됩니다. ImageBaseAddress는 PBE 내의 오프셋 8에서 찾을 수 있습니다.
-
In-Memory EXE 준비: 일시 중지된 프로세스와 In-Memory EXE의 기본 주소가 일치하고 In-Memory EXE가 일치하는 경우 EXE 크기가 작거나 같으면 WriteProcessMemory를 사용하여 일시 중지된 프로세스의 메모리에 직접 씁니다.
-
마법 필요: 3단계의 조건이 충족되지 않으면 원본 이미지의 매핑을 해제합니다( ZwUnmapViewOfSection), VirtualAllocEx를 사용하여 메모리를 할당하고 WriteProcessMemory를 사용하여 메모리 내 EXE를 작성합니다.
-
PEB 및 스레드 컨텍스트 패치: 일시 중지된 프로세스의 ImageBaseAddress를 메모리 내 EXE의 기본 주소로 업데이트합니다. , 스레드 컨텍스트의 EntryPoint 주소를 패치하고 SetThreadContext를 사용하여 변경된 컨텍스트를 저장합니다.
-
실행 재개: ResumeThread를 사용하여 일시 중지된 프로세스를 재개하여 메모리 내 EXE를 실행합니다.
결론
이러한 단계를 따르면 메모리 버퍼에서 프로세스를 생성하여 코드 삽입의 유연성과 보안 패치 시나리오를 제공할 수 있습니다.
위 내용은 파일 저장 없이 메모리 버퍼에서 직접 프로세스를 생성하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!