問題タブ [detours]

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 に答える
379 参照

c++ - MS Detours 2.1 - スタックから飛び出す

マインスイーパ内の PlaySoundW 関数を迂回することはありません。PlaySoundW 関数を呼び出すとすぐにゲームがクラッシュします。コード内の Beep のコメントを外すと、ゲームのビープ音が鳴り、クラッシュします。

現在、コードはフックされた関数から元の関数を呼び出しているため、何もしないでください。しかし、とにかくクラッシュしています。

何が悪いのか教えていただけますか?

Olly でアプリをデバッグした後、回り道がアクティブな場合、すべてのゴミがスタックから飛び出すわけではないことがわかりました。修正方法は?

これは私のコードです:

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

c++ - DLL のソース コード内の C++ 関数フック

C++ DLL のソース コードがあります。この DLL はアプリケーションの一部です。別の DLL によってメモリにロードされた関数をフックして、フックされた関数が元の関数ではなく他のすべての DLL によって呼び出されるようにします。このコードをコードに入れました:

問題は、1 つの DLL でオフセットを検索し、このオフセットで関数にパッチを適用するのは間違っているのではないでしょうか (別の DLL にいて、すべての DLL の関数をフックしたいので、より複雑だと思います)。ところで、IDA PRO で標準 (fex. 0x0100344C) オフセットを取得する方法を知っている人はいますか?

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

c++ - C++ 欠落している型指定子: 構文エラー

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

c++ - C++ 関数フック (dll、asm)

私はdllをプログラムします。この dll で、メモリにロードされた別の dll の関数をフックしたいと考えています。これは、何時間もの作業の結果です。

どうやら、私のフックが機能していないようです。コードにいくつかの論理エラーを入れたと思いますが、私は初心者であり、助けが必要です!

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

c - __userpurge funcを__stdcallまたは__cdeclにフック/変換する方法は?

__userpurge関数のフックタイプについて誰か知っていますか?フックに成功し__thiscallました__stdcall、、、。__cdecl__usercall

__stdcallまたはへの変換を使用してこのタイプの関数をフックする方法は__cdecl

私が最初にフックしなければならない関数は次のとおりです。

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

c++ - Microsoft Detour - アセンブラーの "call" 命令を使用したフック関数

この掲示板での最初の質問で、すでにかなり長い質問です。申し訳ありません (そして、このプラットフォームから得た素晴らしいヒントに感謝します)。

Microsoft Detours を使用して複数の関数をフックしようとしています (多かれ少なかれプラグイン コードであるため、フックしたい関数は記述されていません/変更できませんが、同じプロセス/スレッドで直接アクセスできます)。

フックされるすべての関数は、C スタイルのコンパイラによって生成され、常に次のアセンブラ「スタートアップ」コードを持ちます。

いくつかのレジスタがスタックにプッシュされ、call 命令が次の行に呼び出されるのがわかります (既に述べたように、この生成されたコードにアクセスできないため、これを変更しないでください)。call 命令はスタックを変更します - このスタックの変更は eax レジスタに保存され、以降の処理に使用されます (!!!)

このメソッドは以下にフックされます。

フッキング関数は、トランポリン関数にジャンプするだけのネイキッド関数として定義されています。

次のトランポリン機能を使用:

主な問題は、トランポリン アセンブラ コードの call 命令が 1) スタックに間違った値を追加することです (この場合は 045A1A89 ではなく 031f0064 に) --> eax でさらに処理すると間違った結果が返されます 2) 多かれ少なかれ破棄されます次の「ret」が「031F0069」に戻るため、スタック フレーム ==> 同じ処理が 2 回行われます。ret は再び呼び出され、間違った機能につながります..

フックしたいすべての関数が上記のプリアンブルで始まることが保証されていないことを理解してください..したがって、フック関数を書き直すことはできず、トランポリンメソッドを無視することはできません...

したがって、このすべてのテキストの後の基本的な質問: Microsoft Detour を使用して関数をフックすることは可能ですか?関数の最初の 5 バイトで呼び出し命令が呼び出されますか? (そうでない場合、代替手段はありますか?)

読んでいただきありがとうございます(そして、うまくいけばあなたの助けに)

0 投票する
3 に答える
901 参照

c++ - 外部プロセスの関数に sleep() を注入する

実行中のプロセスにDLLを挿入する方法と、プロセスによって内部的に使用される関数を利用する方法を知っています。

今、実行中のプロセスの既存のメソッドに sleep() を追加したいと思います。これはプログラムのメインループであり、1 秒も停止せず、すべての処理能力を使い果たします。

回り道のようなフレームワークを使用すると、関数を呼び出してから元の関数を呼び出すトランポリン関数を作成できることはわかっていますが、while(1) ループが外部プロセスの関数内のどこかにあるという問題があります。だから私はループが始まるオフセットを知っています - そしてその後、最初に sleep() を呼び出してから、ループの通常のルートを続けたいと思います。

これまでに見た唯一の代替手段は、プログラムをバイナリ編集することですが、これは良い解決策ではありません。

なにか提案を?ありがとう

0 投票する
2 に答える
1440 参照

c++ - 「空」関数の外部プロセスの迂回フックが機能しない

関数オフセットを介して外部プロセスに関数をフックしています。これは、これまでフックしている関数ではうまく機能しますが、バイナリにはまだ存在するが印刷を行わない「debugLog(char...)」関数が見つかりました。次のようになります。

このように呼ばれます

デバッグ メッセージが明らかに無効になりました。既にバイナリで同様の func(char..) に簡単にフックできたので、これにフックしたかったのです。

これはコードです:

同様のアプローチは、これまでにこのバイナリにフックした他のすべての関数で機能します。また、 debugMessage がデバッガーで呼び出されることも確認しました。

このフックがまったく機能しない理由はありますか? 関数が var args を持つ可能性があるためでしょうか? 私はすでにconst char *で試しました...)。

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

c++ - 迂回したコードがNOPでクラッシュするのはなぜですか

こんにちは、これは私の最初の質問ですので、優しく扱ってください。MS迂回とVisual Studio 2005を使用して、exeを迂回していますが、dllが読み込まれ、フックが処理されますが、フックコードを拡張しようとすると、問題が発生します。すべてがクラッシュし、メッセージボックスの連絡先サポートをポップアップするexeファイルで例外が発生すると思います。

これは例外なく動作し、ログファイルは「動作中」でいっぱいになりますが、Real_GenterateStrings()呼び出しの後にEAXをキャプチャする必要があります。これには、Unicode文字列へのポインタが含まれているためです。

しかし、Real_GenterateStrings呼び出しの後にコードを配置すると、フックされるとすぐにクラッシュが発生します。ただのNOPでも

何か案は?

私がフックしている機能は

私はそれが値を返すとは思わないのですか?