ホームページ  >  記事  >  バックエンド開発  >  CreateProcess を使用してインメモリ EXE を実行するにはどうすればよいですか?

CreateProcess を使用してインメモリ EXE を実行するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-11-02 14:15:02884ブラウズ

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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。