2017-02-09 3 views
1

AndroidでXposedフレームワークを使用しています。具体的には、潜在的な対策のためにブログ-http://d3adend.org/blog/?p=589を読んで、それらの行にいくつか質問があります。AndroidでXposed Frameworkフックメソッドを使用する方法

したがって、Xposedを使用してメソッドをフックすると、フレームワークはそのメソッドをネイティブにして、フックしたいコードを実行します。それでは、スタックトレースの元のメソッドはどのように呼ばれていますか?

com.example.hookdetection.DoStuff->getSecret //This one 
de.robv.android.xposed.XposedBridge->invokeOriginalMethodNative 
de.robv.android.xposed.XposedBridge->handleHookedMethod 
com.example.hookdetection.DoStuff->getSecret //This one again 
com.example.hookdetection.MainActivity->onCreate 
android.app.Activity->performCreate 
android.app.Instrumentation->callActivityOnCreate 
android.app.ActivityThread->performLaunchActivity 
android.app.ActivityThread->handleLaunchActivity 
android.app.ActivityThread->access$800 
android.app.ActivityThread$H->handleMessage 
android.os.Handler->dispatchMessage 
android.os.Looper->loop 
android.app.ActivityThread->main 
java.lang.reflect.Method->invokeNative 
java.lang.reflect.Method->invoke 
com.android.internal.os.ZygoteInit$MethodAndArgsCaller->run 
com.android.internal.os.ZygoteInit->main 
de.robv.android.xposed.XposedBridge->main 
dalvik.system.NativeStart->main 

なぜスタックトレースに2回表示されますか?私はそれらが実行される順序を理解したい。

実際の方法は実行されていますか?フックされたメソッドコードは実行されるので、理想的には元のメソッドコードを実行しません。それで、どのようにして同じ方法でストラットトレース検出機構を追加することができるのでしょうか?

答えて

7

低レベルコードとアンドロイドカーネルに慣れていないと、内側の動作が分かりにくいです。それを短くするために、あなたがAndroidデバイス上でアプリケーションを開くと、そのプロセスを子プロセスとして起動するZygoteと呼ばれるマスタープロセスがあります。

Xposedの目的は、プロセスが生成されるたびにZygoteを制御して検出できるようにすることで、誰かが呼び出しを行う前にその定義を置き換えてメソッドをフックできるようにすることです。

あなたはXposedを使って多くのコントロールを持っています。メソッド本体全体を置き換えることができるので、元のコードは決して呼び出されません。または、beforeCallとafterCallフックを使用することができます。これは基本的にトランポリン技術以下)

Trampoline Hook Technique (C++)

をメソッドは、それが直接、元のコードではなくなど、誰かが彼が望んでいる何かを行うことができます挿入されたコードブロック(ダンプ、変更パラメータに行かないと呼ばれたとき、あなたが見ることができるように)それは本物のコードに戻るでしょう。また、本物のコードの後に​​これを行うことができますので、メソッド出力を取得します。 Xposedは、beforeHookedMethodおよびafterHookedMethodを使用してこれを実装します。

スタックトレース検出メカニズムを追加することはまったく役に立ちません。 Javaメソッドを呼び出して、実際のスタックトレースを取得します。 getStackTraceメソッドをフックし、有効な本物のスタックトレースを保存し、getStackTraceが呼び出され、Xposedメソッドが含まれている場合は、以前に保存した本物のスタックトレースを返すことで、簡単に無効にすることができます。

ネイティブコードを使用して検出することが最善の方法ですが、デバイスを完全に制御しているハッカーであっても、それを最終的に克服できます。

+0

あなたはこの部分を説明することができます「この拡張起動プロセスは、クラスパスに追加jarファイルを追加し、そこからのメソッドを呼び出します特定の場所 "を解説チュートリアルから削除します。 https://github.com/rovo89/XposedBridge/wiki/Development-tutorial – Suraj

1

あなたはコールバックが可能どちらかXposedHelpers.findAndHookMethodを呼び出す時には、上記の点に追加するには -

  1. XC_MethodHook:メソッドフックのためのコールバッククラス。通常、このクラスの匿名サブクラスは、beforeHookedMethod(XC_MethodHook.MethodHookParam)および/またはafterHookedMethod(XC_MethodHook.MethodHookParam)をオーバーライドして作成されます。
  2. XC_MethodReplacement:元のメソッドを完全に置き換えるXC_MethodHookの特殊なケース。

第1の方法は、元のメソッドの前後にメソッドを実行するフックを提供しています.2番目のメソッドで完全に置き換えられます。例えば ​​- 私が書いた記事のXposed example on github

カップル -

Creating a new Xposed module in Android

Installing Xposed Framework on Android devices

関連する問題