質問

私は正常に動作している自分のLSPを書きました。ただし、DNSクエリをキャッチすることはできません。たとえば、wspgethostbynameやwspgetaddrinfoのような関数はありません。

私のLSPはUDPプロトコルもサポートしていますが、機能していません。コンソール(cmd.exe)からnslookupを実行した場合、機能しているようですが、gethostbynameをキャッチすることはできません。誰かがそれをする方法を知っていますか? NSP(名前サービスプロバイダー)を書くことは解決策だとは思わない。しかし、私は間違っているかもしれません。

ありがとう

役に立ちましたか?

解決

DNSクエリを「傍受」できるLSPを開発しました。それを行う唯一の方法は、すべてのDNS関数に接続することです。解決する必要があるいくつかの課題があることに留意してください。

  1. 32ビットコードと64ビットコードの両方をサポートする優れたフックライブラリを使用する必要があります。
  2. 図書館ライセンスは申請に適している必要があります。無料のライブラリがいくつかありますが、無料のプロジェクトでのみ自由に使用できます。
  3. 関数をフックするとき、IPベースではない特定の値を変更しないようにし、クエリを実際の関数に延期する必要があります。

クエリがMS DNSクライアントから出ているため、UDPの傍受は機能しません。したがって、TDI、NDIS、またはWFPのような低レベルのドライバーを書いていない限り、関数をフック(またはNSPを書く)が必要です。 nslookupは、DNSクエリ自体を作成するため、あなたのために機能します。

他のヒント

私の解決策は次のとおりです。

  1. よく知られているWebブラウザを取ります:Firefox.exe

  2. それを新しい名前にコピーします:icefoxy.exe

  3. exeを変更して、カスタムDLLをロードします。

私は数ヶ月前にすでにこれを行っていますが、Firefoxは絶えず更新を受けているので、それは次のことを意味します。

どちらか:1つのバージョンを保持し、更新しないでください(自分の責任で、セキュリティの問題を引き起こす可能性があります。

または:firefox.exeが変更されるたびに変更を更新します。

DLLは、Delphiを使用して簡単に記述できます。

Firefoxの変更にはアセンブリ言語が必要です。必要なファイルをすべてダウンロードしてFirefoxを自分でコンパイルする方法を知らない限り、C/C ++コンパイラ(MINGW-GCCの可能性が高い)にアクセスし、2つの相互に排他的な基準があるという事実を準備してくださいC ++、そしてG ++(GCCスイートの一部)がFirefoxソースと互換性がない場合、試みは失敗します。

私は自分自身がC ++の専門家ではないので、マシン言語を使用して(少なくとも私にとっては)より簡単なルートを取りました。

いくつかの相対ポイント:

  1. DNSサーバーへのすべてのFirefoxのアクセスを傍受するために、どの機能をフックする必要がありますか?

  2. Delphi DLLをIcefoxy.exe(firefox.exeの改名されたコピー)にロードすると、Delphiフォームの色が欠落していることに気付きました。設定した場合(Object ispectorまたはcodeで):

label1.color:= cllime;

ライムの背景色のないラベルがまだ表示されます。私は正確な理由を知りませんが、Delphi VCLはexeで使用されることに依存しているようです。また、exeの代わりにDLL内でDelphi VCLコンポーネントを使用する場合、いくつかのもの(色など)は意図したとおりに機能しません。

コード(Assembly Language Modificationations to FirefoxとDelphi DLLソースコードの両方)を投稿させていただきますが、どのように/どこに投稿できますか?

Delphi 7を使用してDLLを作成しました。

Delphi 2009以降を使用する場合は、Delphi 2009およびすべての新しいバージョンではタイプ文字列で、Delphiコードと非Delphiコードの間に渡された文字列データが正しいエンコードを持っていることに特に注意する必要があります。 Unicodestringのエイリアスであり、古いDelphiバージョンでは、タイプ文字列はAnsistringのエイリアスです。

私がこれを行った時点で、Firefoxに自分のdllを強制的にロードするように強制してプロセスアドレス空間を読むことができるかどうかを調べるのは小さな実験でした。

もう1つの興味深いアイデアは、Delphi DLLからFirefoxのDOM(ドキュメントオブジェクトモデル)にアクセスできるようにすることです。これは、Twebbrowserを使用するための実用的な代替手段を提供します(MicrosoftのInternet ExplorerのActiveXバージョンに基づく)。

Firefoxに基づいたTwebbrowserのようなコンポーネントがあったことは知っていますが、彼らの問題は、誰も非常に長い間更新することを気にしていないということです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top