ヘルパー exe を呼び出し、コマンド ライン引数を渡して実行を制御する構造になっています。コマンドライン引数が表示されるため、他のアプリケーションから渡すことができます。私たちは、exe を私たちだけが呼び出すようにしたいと考えています。最小限の変更でこれを達成し、コマンドライン引数を渡す現在の構造をそのまま維持するにはどうすればよいでしょうか?
編集 1
発信者は特定できますか?たとえば、ヘルパー exe を子として呼び出し、親を識別します
ヘルパー exe を呼び出し、コマンド ライン引数を渡して実行を制御する構造になっています。コマンドライン引数が表示されるため、他のアプリケーションから渡すことができます。私たちは、exe を私たちだけが呼び出すようにしたいと考えています。最小限の変更でこれを達成し、コマンドライン引数を渡す現在の構造をそのまま維持するにはどうすればよいでしょうか?
編集 1
発信者は特定できますか?たとえば、ヘルパー exe を子として呼び出し、親を識別します
から返されたアドレスに書き込むことGetCommandLineW()
により、アプリケーションの起動後にメモリ内のコマンド ライン パラメータをクリアするハックを使用できますが、その間にそれを読み取るものや、プロセスの作成をフックするものは何も停止しません。
共有メモリを作成してポインタを渡すこともできますが、これではデータが不明瞭になるだけです。
単純な事実は、同じユーザーおよび実行レベルで実行されているものからデータを隠すことはできないということです。それを隠すためにどんな努力をしても、それを再表示することができます。暗号化であっても、キーとメソッドがメモリ内にあり、読み取ることができることを意味します。ランダムなユーザーが実行可能ファイルを実行しようとするのを止めたい場合は、それらをランダムなユーザーに渡さないでください:)
コマンドライン引数を非表示にすることはできません。プロセスコマンドラインをクリアする方法を確認してください。質問して、そこで回答とコメントを参照してください。
コマンド ライン引数を渡すことに固執したい場合は、Raymond Chen がそれを適切に行う方法について非常に優れた投稿をしています。 . 基本的な考え方は、匿名の共有メモリ ブロックを使用して、プロセス間で渡される実際のデータを格納し、それにハンドルの数値を渡すことです。
重い代替手段は、コマンドライン経由で渡されたデータを暗号化/復号化することです。または、生成された「秘密の言葉」を追加して、アプリケーションのいずれかによって呼び出されたかどうかを呼び出し先が検証できるようにします。
アプローチ (および関連するコスト/メリット) の選択はリスクに依存することをお勧めします: 誰が/なぜ/いつヘルパー アプリケーションを操作するのでしょうか?
アプリケーションは、DDE を使用して相互に通信できます。詳細については、「DDE を使用して 2 つの Visual Basic プログラムでデータを交換する」および「Visual Basic で DDE を使用して他の Windows プログラムと通信する方法」を参照してください。
値を変数に設定し、それらの変数を .exe で抽出できますか?