問題タブ [apimonitor]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
windows - Portable Executable (PE) EXE 内部関数呼び出しのキャプチャ
EXE ファイルのすべてのローカル関数呼び出しをキャプチャ/記録するにはどうすればよいですか?API 監視ツールは、Windows API 関数呼び出しをキャプチャします。たとえば、ユーザーが特定のボタンをクリックしたときに、ローカル関数呼び出しをキャプチャしたいと考えています。
よろしく、
c++ - winspool!EnumPorts が誤って 0 ポートを返す根本原因を特定するテクニック
すべてのネットワーク プリンターで [ポート] タブが空になっている Windows 環境を用意しますが、一部の win7 クライアントでのみです。これらのクライアントからの他のすべての印刷機能は、これらのプリント サーバー上のプリンターに対して機能します。環境のセットアップ方法が原因で、これらの vSphere 仮想マシンにカーネル デバッガーを簡単にアタッチできません。
- Server 2008 R2 マシン - OK
- Win7 マシンのクリーニング - OK
- Win7 マシン + 多くのサードパーティ製ソフトウェア (サードパーティ製デバイス ドライバ、複数の API フック ソフトウェアなどを含む) - BROKEN
すべてのマシンが同じドメインに参加し、同じユーザーとしてログインしています。Explorer.exe でRohitab API Monitorを使用すると、winspool EnumPortsが成功していることが確認されましたが、失敗したマシンでは 0 ポートが返されましたが、同じユーザー アカウント/同じネットワークと同じパラメーターの下では、動作している両方のマシンで 600 以上のポートが返されました。
EnumPorts を単独でテストするためのテスト C++ プログラムを作成しました。Visual Studio 2015 プロジェクト + バイナリはこちら
このプログラムの重要な部分は次のとおりです。
pPortInfo からの作業マシンの出力は次のとおりです。
壊れたマシンで:
これまでに特定/試したこと
- SysInternals AutoRunsを使用してマシンを比較すると、両方のマシンの Windows サービス構成/ドライバー/フック DLL の間に何百もの違いがあります。これらのアイテムをすべて削除/無効にすることなく、これを潜在的な原因に絞り込む手法を見つけたい
- AppInit_DLLsキーの名前を変更し、これらの DLL がプロセスで読み込まれなくなったことを確認して、すべてのフック DLL を無効にしようとしましたが、壊れたままです
- キャプチャされた WireSharkトレース - 動作中のマシンでは、EnumPorts が呼び出されると、ネットワーク トラフィックがプリント サーバーに送受信されます。壊れたマシンでは、プリント サーバーに送信されるネットワーク トラフィックはまったくありません。ただし、壊れたマシンでも net view /all \ などのコマンドを実行して、リモート プリント サーバーのプリンター/ドライブにマップすることができます。
- Microsoft Message Analyzer RPC トレースを使用すると、RPC 呼び出しがログに記録されますが、このデータを解釈する方法がわかりません。どの呼び出しも失敗していないようです。
- winspool!EnumPorts を詳しく調べると、 NdrClientCall2を使用してプリント サーバーと通信しますが、これらの呼び出しは失敗しません。
- ローカルファイアウォールを無効にしてみました
- netsh winsock のリセットと再起動を試みました
- ウイルス対策を無効にしてテスト済み
- Windows イベント ビューアーにフィルターを作成して、テストの実行中にすべての Windows イベント ログ エントリを確認し、一見関連するエラーが見つからないようにしました。
- WinDbg を介してテスト ツールを実行すると、初回例外やその他のエラーは発生しません
- EnumPort 関数の完了時にブレークポイントを設定しようとした後、 NotMyFaultを使用して完全なメモリ dmp を作成しましたが、何も見つかりませんでした。そもそも何を探していたのかわかりませんでした。
- Process Monitorを使用して、不足しているレジストリ キー/ファイルを探しましたが、何も見つかりませんでした
c# - Deviare2 は、1 回の書き込みだけで WriteFile API を 2 回フックします。
Deviare2 は、MS Windows 上のプロフェッショナルな API フック ライブラリです。それは使いやすく、強力です。しかしWriteFile
、C# ダミー ライターを使用してフックしようとすると、2 回フックされることがわかりましたWriteFile
。API Monitor を使用してダミー ライターをフックしようとしましたが、API Monitor はすべての書き込み呼び出しに対して 1 つだけフックすることがわかりました。それは奇妙だ!
フックコード:
ダミー書き込み:
c++ - API Monitor タイプ定義 (XML) から C++ コードへ
私は C# プログラマーで、リバース エンジニアリング作業を行っていますが、問題が発生しています。
私がやろうとしているのは、ライブラリ関数をリモート プロセスにフックし、データをログに記録することです。
不明なライブラリ (libcef.dll) のカスタム タイプおよび関数定義でAPI Monitorを使用しましたが、定義されている関数をインターセプトできます。
これらの関数をフックする独自のアプリケーションを作成したいと考えています。マネージ EasyHook ライブラリを使用して C# で多くのマーシャリングを行うよりも簡単に思えるので、C++ で EasyHook を使用することにしました。
EasyHook では、フックする関数を正しい関数呼び出し規則、識別子、およびパラメーターで定義する必要があります。
ただし、私が持っている C++ の知識は限られているため、API Monitor 用に (XML ファイルで) 持っている型定義を C++ コードに変換することができます。これを、フックする関数を定義するときに使用できます (これは cef_parse_url です)。
問題は、以下の API モニター型定義 (XML) を C++ コードに変換するにはどうすればよいかということです。
誰かが私を助けることができれば、それは私にとって世界を意味します. C++ の中級者であれば、簡単に私を助けることができると思います。
前もって感謝します!