1

Windows マシンで発信 http 接続 (システム プロキシを使用しない) をリダイレクトしようとしています。

バックグラウンド:

現在は機能していない Web サービスとやり取りするレガシー ソフトウェアがいくつかあります。私は単純なデスクトップ アプリケーションでそのサービスをエミュレートし、発信 http 要求をこのアプリケーションに再ルーティングしたいと考えています。

実験的に、Windows ホスト ファイルを使用して localhost に正常にリダイレクトしましたが、デフォルトの http ポート 80 でリッスンする必要がある他のサービスがあり、このためだけに別の物理サーバーをセットアップしたくないため、これは実用的ではありません。

レガシー ソフトウェアはシステム プロキシを使用しないため、FiddlerCore のようなソリューションは機能しません (残念ながら、これはすばらしいことです!)。

Winsock と組み合わせて、同様の質問で EasyHook が言及されていることに気付きましたが、低レベルのプログラミングの経験は非常に限られています。

では、システム プロキシを使用しない送信 http トラフィックを傍受してリダイレクトすることは理論的に可能ですか?

単純なはい/いいえの答えで問題ありません。何らかの理由、またはより良いドキュメントがあれば素晴らしいでしょう。

4

1 に答える 1

1

何度もやっているので絶対に可能です。開始するには、次の手順を使用します。

  1. プログラムでターゲット アプリケーションを起動し、引数CreateProcessに渡します。これにより、ターゲット アプリケーションが開始されますが、実行は開始されません。CREATE_SUSPENDEDdwCreationFlags
  2. 「トランポリン」関数を含む DLL を挿入します。
  3. Winsock 関数をフックしますgethostbyname
  4. ResumeThreadターゲット プロセスのメイン スレッドで呼び出して、実行を開始します。
  5. フック関数で、実際の gethostbynameWinsock 関数が構造体への有効なポインターを返すときに呼び出し、hostentアドレス データを変更してループバック デバイス (localhost) を指すようにします。

ターゲット アプリケーションの動作によっては、追加の Winsock 関数をフックする必要がある場合がありますがgethostbyname、通常、このシナリオではフックで十分です。

DLL にあるフック関数を C++ または C で記述します。C# を使用することは、おそらくここではオプションではなく、ターゲット アプリケーションとの競合を引き起こす可能性のある多くの依存関係を取り込むことになります。

于 2013-06-03T14:47:30.843 に答える