>백엔드 개발 >C++ >CreateProcess를 사용하여 메모리 버퍼에서 EXE를 실행할 수 있습니까?

CreateProcess를 사용하여 메모리 버퍼에서 EXE를 실행할 수 있습니까?

Barbara Streisand
Barbara Streisand원래의
2024-11-02 12:04:30211검색

Can You Run an EXE from a Memory Buffer Using CreateProcess?

CreateProcess를 사용하여 메모리 버퍼에서 EXE 실행

CreateProcess 함수는 일반적으로 파일에 저장된 실행 파일(EXE)을 시작하는 데 사용됩니다. . 그러나 파일에 쓰지 않고 메모리 버퍼에서 직접 EXE를 실행할 수 있습니까? 이 질문은 DRM을 비활성화하지 않고 래핑된 EXE를 업데이트해야 하는 게임 패치와 같은 시나리오에서 발생합니다.

해결책:

예, 다음 단계에 따라 CreateProcess를 사용하여 메모리 버퍼에서 EXE를 실행합니다.

  1. 프로세스 생성 일시 중지: CREATE_SUSPENDED 플래그와 함께 CreateProcess를 호출하여 프로세스를 일시 중지합니다. 이렇게 하면 프로세스 메모리를 수정할 시간이 생깁니다.
  2. 프로세스 컨텍스트 가져오기: GetThreadContext를 사용하여 일시 중지된 스레드의 컨텍스트를 검색합니다. EBX 레지스터에는 PEB(프로세스 환경 블록) 구조에 대한 포인터가 포함되어 있습니다.
  3. 기본 주소 결정: PEB 구조의 [EBX 8]에서 프로세스의 기본 주소를 가져옵니다.
  4. In-Memory EXE 복사: 기본 주소와 이미지 크기가 일치하는 경우 WriteProcessMemory를 사용하여 일시 중지된 프로세스의 메모리 공간에 In-Memory EXE를 씁니다.
  5. 일치하지 않는 조건 조정: 조건이 일치하지 않는 경우 ZwUnmapViewOfSection을 사용하여 원본 이미지 매핑을 해제하고, VirtualAllocEx를 사용하여 메모리를 할당하고, 메모리 내 EXE를 작성하고, PEB->ImageBaseAddress를 패치합니다.
  6. 진입점 설정: 스레드 컨텍스트의 EntryPoint 주소를 메모리 내 EXE의 진입점으로 다시 작성합니다.
  7. 프로세스 재개: 마지막으로 다음을 사용하여 일시 중지된 프로세스를 재개합니다. ResumeThread.

이러한 단계를 따르면 파일에 쓸 필요 없이 메모리 버퍼에서 EXE를 효과적으로 실행할 수 있어 DRM 래퍼를 중단하지 않고 패치를 배포해야 하는 요구 사항을 충족할 수 있습니다.

위 내용은 CreateProcess를 사용하여 메모리 버퍼에서 EXE를 실행할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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