Xposed振り回すノート(一)

2330 ワード

最近時間をかけてXposedのフレームワークを振り回して、またとても面白くて、ここは学習の過程を記録します
0 x 01 Xposed紹介
XposedはAndroidベースのHookフレームワークで、彼の基本原理はシステムのappを置き換えたのだろう.処理後android.internal.osZygoteInit.main()は、de.robvに置き換えられました.android.xposed.XposedBridge.main()は,以降forkが出すプロセスはすべてHookにされ,その後XposedBridgeを利用する.JArは様々な騒ぎを行うことができます.
0 x 02 Xposedプロジェクトの作成
Step 1.AndroidManifestを修正します.xml
AndroidManifestで空白のプロジェクトを作成します.xmlファイルに次のコードを追加します.
    
    
    

Step 2. xposed依存性の増加
dependencies内で増加
compileOnly 'de.robv.android.xposed:api:82'

Step 3. カスタムエントリポイント
新しいassetsディレクトリを作成し、xposed_を追加します.Initファイル、内容はXposedエントリクラスです.例えばspiders.example.com.myapplication.XposedMain Xposedが実行されるとxposed_InitファイルでXposedエントリを読み込むと、上記のようにXposedMainクラスを実行します.
Step 4. Hook主関数の作成
その前に、Toastで文字列を表示する簡単なMainActivityを書きます.
public class MainActivity extends Activity {
private String show = "unhooked!";
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Toast.makeText(this,this.show,Toast.LENGTH_LONG).show();
}

その後XposedMainを作成する.JAvaは、まずHook MainActivityクラスのonCreate関数を呼び出してから関数を呼び出す前にshow変数をhookedに変更するという考え方です!hookを完了します.コードは次のとおりです.
public class XposedMain implements IXposedHookLoadPackage {
@Override
public void handleLoadPackage(final XC_LoadPackage.LoadPackageParam lpparam) throws Throwable {
    if(lpparam.packageName.equals("spiders.example.com.myapplication")){
        XposedHelpers.findAndHookMethod("spiders.example.com.myapplication.MainActivity", lpparam.classLoader, "onCreate", Bundle.class, new XC_MethodHook() {
            @Override
            protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
                XposedBridge.log("before hook ");
                XposedHelpers.setObjectField(param.thisObject,"show","hooked!");
                super.beforeHookedMethod(param);
            }
        });
    }}}