> 백엔드 개발 > C++ > CreateProcess를 사용하여 메모리 내 EXE를 어떻게 실행할 수 있나요?

CreateProcess를 사용하여 메모리 내 EXE를 어떻게 실행할 수 있나요?

Barbara Streisand
풀어 주다: 2024-11-02 14:15:02
원래의
943명이 탐색했습니다.

How Can I Execute an In-Memory EXE using CreateProcess?

CreateProcess를 사용하여 메모리 내 EXE 실행

소개:

다음에서 프로세스 생성 CreateProcess의 메모리 버퍼는 독특한 문제를 제시합니다. 이 기사에서는 실행 전에 파일에 실행 파일을 작성할 필요 없이 이를 수행할 수 있는 방법을 살펴봅니다.

배경:

게임 산업에서는 암호화되지 않은 실행 파일을 배포하면 DRM 우회로 이어질 수 있습니다. 이러한 문제를 해결하기 위해 게임 개발자는 암호화된 EXE를 플레이어에게 출시하기 전에 독점 DRM으로 포장한 배포자에게 보내는 경우가 많습니다.

패칭 솔루션 만들기:

EXE에서 충돌이 발생하면 DRM 채널을 통해 패치를 배포하는 데 며칠 또는 몇 주가 걸릴 수 있습니다. 패치 프로세스를 신속하게 진행하기 위해 개발자는 암호화된 데이터 파일에 원본 EXE를 포함시킬 수 있습니다. 이를 통해 DRM에 영향을 주지 않고 쉽게 패치를 적용할 수 있습니다.

구현:

해결책에는 CREATE_SUSPENDED와 함께 CreateProcess를 사용하여 메모리 내 EXE에서 프로세스를 생성하는 작업이 포함됩니다. 깃발. 이 플래그를 사용하면 실행 전에 일시 중지된 프로세스를 수정할 수 있습니다.

프로세스 정보 검색:

중단된 프로세스의 스레드 컨텍스트를 획득하면 프로세스 환경에 액세스할 수 있습니다. 블록(PBE) 구조. PBE에는 추가 조작에 중요한 이미지의 기본 주소가 포함되어 있습니다.

인메모리 EXE 로드:

기본 주소가 있으면 WriteProcessMemory를 사용하여 메모리 내 EXE를 일시 중단된 프로세스의 메모리 공간에 로드할 수 있습니다. 다만, 크기 및 정렬 차이에 따라 정렬 조정이나 추가 메모리 할당이 필요할 수 있습니다.

패치 및 실행:

프로세스를 완료하려면 베이스를 패치하세요. 메모리 내 EXE의 주소를 일시 중단된 프로세스의 PBE에 추가하고 스레드 컨텍스트를 새 진입점으로 업데이트합니다. 마지막으로 ResumeThread를 사용하여 메모리 내 EXE에서 수정된 프로세스의 실행을 재개합니다.

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

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿