>  기사  >  백엔드 개발  >  파일 저장 없이 메모리 버퍼에서 직접 프로세스를 생성하려면 어떻게 해야 합니까?

파일 저장 없이 메모리 버퍼에서 직접 프로세스를 생성하려면 어떻게 해야 합니까?

DDD
DDD원래의
2024-11-02 00:12:02649검색

How Can Processes Be Created Directly From Memory Buffers Without File Storage?

메모리 버퍼에서 프로세스 생성

이 게시물에서는 별도의 작업 없이 메모리 버퍼에서 직접 프로세스를 생성하는 기술을 살펴보겠습니다. 파일 저장. 이는 제공된 배경 스토리와 같이 코드 삽입 또는 보안 패치와 관련된 유용한 시나리오일 수 있습니다.

기술 분석

Windows는 CreateProcess API에 CREATE_SUSPENDED 플래그를 제공합니다. ResumeThread 함수가 호출될 때까지 프로세스가 일시 중단된 상태로 유지되도록 허용합니다. 이 창은 실행 전에 프로세스 메모리와 컨텍스트를 조작할 수 있는 기회를 제공합니다.

  1. 프로세스 일시 중지 및 검사: CreateProcess(CREATE_SUSPENDED)를 사용하여 프로세스를 일시 중지하고 다음을 사용하여 일시 중지된 스레드의 컨텍스트를 검색합니다. GetThreadContext.
  2. 기본 주소 식별: EBX 레지스터에는 PBE(Process Enviroment Block) 구조에 대한 포인터가 포함됩니다. ImageBaseAddress는 PBE 내의 오프셋 8에서 찾을 수 있습니다.
  3. In-Memory EXE 준비: 일시 중지된 프로세스와 In-Memory EXE의 기본 주소가 일치하고 In-Memory EXE가 일치하는 경우 EXE 크기가 작거나 같으면 WriteProcessMemory를 사용하여 일시 중지된 프로세스의 메모리에 직접 씁니다.
  4. 마법 필요: 3단계의 조건이 충족되지 않으면 원본 이미지의 매핑을 해제합니다( ZwUnmapViewOfSection), VirtualAllocEx를 사용하여 메모리를 할당하고 WriteProcessMemory를 사용하여 메모리 내 EXE를 작성합니다.
  5. PEB 및 스레드 컨텍스트 패치: 일시 중지된 프로세스의 ImageBaseAddress를 메모리 내 EXE의 기본 주소로 업데이트합니다. , 스레드 컨텍스트의 EntryPoint 주소를 패치하고 SetThreadContext를 사용하여 변경된 컨텍스트를 저장합니다.
  6. 실행 재개: ResumeThread를 사용하여 일시 중지된 프로세스를 재개하여 메모리 내 EXE를 실행합니다.

결론

이러한 단계를 따르면 메모리 버퍼에서 프로세스를 생성하여 코드 삽입의 유연성과 보안 패치 시나리오를 제공할 수 있습니다.

위 내용은 파일 저장 없이 메모리 버퍼에서 직접 프로세스를 생성하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.