CreateProcess를 사용하여 메모리 버퍼에서 EXE 실행
CreateProcess 함수는 일반적으로 파일에 저장된 실행 파일(EXE)을 시작하는 데 사용됩니다. . 그러나 파일에 쓰지 않고 메모리 버퍼에서 직접 EXE를 실행할 수 있습니까? 이 질문은 DRM을 비활성화하지 않고 래핑된 EXE를 업데이트해야 하는 게임 패치와 같은 시나리오에서 발생합니다.
해결책:
예, 다음 단계에 따라 CreateProcess를 사용하여 메모리 버퍼에서 EXE를 실행합니다.
-
프로세스 생성 일시 중지: CREATE_SUSPENDED 플래그와 함께 CreateProcess를 호출하여 프로세스를 일시 중지합니다. 이렇게 하면 프로세스 메모리를 수정할 시간이 생깁니다.
-
프로세스 컨텍스트 가져오기: GetThreadContext를 사용하여 일시 중지된 스레드의 컨텍스트를 검색합니다. EBX 레지스터에는 PEB(프로세스 환경 블록) 구조에 대한 포인터가 포함되어 있습니다.
-
기본 주소 결정: PEB 구조의 [EBX 8]에서 프로세스의 기본 주소를 가져옵니다.
-
In-Memory EXE 복사: 기본 주소와 이미지 크기가 일치하는 경우 WriteProcessMemory를 사용하여 일시 중지된 프로세스의 메모리 공간에 In-Memory EXE를 씁니다.
-
일치하지 않는 조건 조정: 조건이 일치하지 않는 경우 ZwUnmapViewOfSection을 사용하여 원본 이미지 매핑을 해제하고, VirtualAllocEx를 사용하여 메모리를 할당하고, 메모리 내 EXE를 작성하고, PEB->ImageBaseAddress를 패치합니다.
-
진입점 설정: 스레드 컨텍스트의 EntryPoint 주소를 메모리 내 EXE의 진입점으로 다시 작성합니다.
-
프로세스 재개: 마지막으로 다음을 사용하여 일시 중지된 프로세스를 재개합니다. ResumeThread.
이러한 단계를 따르면 파일에 쓸 필요 없이 메모리 버퍼에서 EXE를 효과적으로 실행할 수 있어 DRM 래퍼를 중단하지 않고 패치를 배포해야 하는 요구 사항을 충족할 수 있습니다.
위 내용은 CreateProcess를 사용하여 메모리 버퍼에서 EXE를 실행할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!