6

マシン上で複数のインスタンスを実行したいサードパーティのネイティブアプリケーション (CI で書かれたもの) があります。

ただし、アプリケーションは、構成ファイルの場所を見つけるために、1 つの特定のレジストリ キーから読み書きします。実行中にこの場所を継続的に読み取ります。レジストリ キーは HKLM にあります。これは、構成ファイルの 2 つの異なる場所でアプリの 2 つの異なるインスタンスを実行しようとすると、プロセスが互いに足を踏み入れることを意味します。

プロセスが使用しているレジストリを「仮想化」する (またはサンドボックスで各プロセスを実行する) ことは可能ですか?お互いのつま先を踏まない?

4

4 に答える 4

5

プログラムを仮想化するには、いくつかのオプションがあります:
https://en.wikipedia.org/wiki/Portable_application_creators

独自の仮想化ソフトウェアを作成することは、はるかに複雑であり、Windows SDK を使用してプログラミングとフック ライブラリ呼び出しに大まかな作業が必要になります。

ただし、プログラムのコピーごとに追加のソフトウェアをセットアップして実行する必要がない簡単なオプションとして、プログラムの複数のコピーを作成し、各実行可能ファイルを 16 進数で編集することをお勧めします。

実行に必要な数のアプリケーションのコピーを作成し、アプリケーション ファイルを 16 進エディターで開き、レジストリ キーの名前を検索します。例:
HKLM\System\CurrentControlSet\Control\Session Manager

次に、最後のバイトを各バージョンの数字 (1 バイト、0 ~ 9) に変更します (例:
HKLM\System\CurrentControlSet\Control\Session Manage1
HKLM\System\CurrentControlSet\Control\Session Manage2
HKLM\System\CurrentControlSet\Control\ )。セッション管理3

10 を超える差異 (2 バイト、00-99) の場合は、最後の 2 バイトを使用

ます


于 2013-07-16T05:28:00.593 に答える
3

Joshua のソリューションはこの特定のアプリケーションでは機能しますが、他のアプリケーションでは機能しない可能性があります (レジストリ パスがコードで構築されている場合や、アプリケーションが署名されている場合)。

したがって、DLL インジェクションRegOpenKey(Ex)を使用して、、などの呼び出しをインターセプトすることをお勧めしますRegCreateKey(Ex)。そうすれば、呼び出しを実際の Windows に渡す前に、レジストリ パスをいじることができますAdvapi32.dll

API フックに関する優れた記事:

Windows での API フックと DLL インジェクション

MS Detours による API フッキング

于 2013-07-19T10:49:45.553 に答える
1

はい、アプリケーションを仮想化できます。このテクノロジーはアプリケーション仮想化と呼ばれます。http://www.cameyo.com/を試してみてください。Cameyo は、仮想アプリケーションの構築に使用されるソフトウェアです。

仮想アプリケーションは、ファイル、DLL、およびレジストリを含むアプリケーション全体を保持する単一の EXE ファイルです。仮想アプリはシステムから分離されており、インストールせずにあるコンピューターから別のコンピューターにコピーおよび移動できます。

于 2013-07-19T10:33:15.857 に答える