問題タブ [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.

0 投票する
1 に答える
238 参照

windows - Portable Executable (PE) EXE 内部関数呼び出しのキャプチャ

EXE ファイルのすべてのローカル関数呼び出しをキャプチャ/記録するにはどうすればよいですか?API 監視ツールは、Windows API 関数呼び出しをキャプチャします。たとえば、ユーザーが特定のボタンをクリックしたときに、ローカル関数呼び出しをキャプチャしたいと考えています。

よろしく、

0 投票する
0 に答える
277 参照

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を使用して、不足しているレジストリ キー/ファイルを探しましたが、何も見つかりませんでした
0 投票する
1 に答える
324 参照

c# - Deviare2 は、1 回の書き込みだけで WriteFile API を 2 回フックします。

Deviare2 は、MS Windows 上のプロフェッショナルな API フック ライブラリです。それは使いやすく、強力です。しかしWriteFile、C# ダミー ライターを使用してフックしようとすると、2 回フックされることがわかりましたWriteFile。API Monitor を使用してダミー ライターをフックしようとしましたが、API Monitor はすべての書き込み呼び出しに対して 1 つだけフックすることがわかりました。それは奇妙だ!

フックコード:

ダミー書き込み:

0 投票する
1 に答える
175 参照

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++ の中級者であれば、簡単に私を助けることができると思います。

前もって感謝します!