使用Xposed Installer實現Android Hook


使用Xposed Installer來實現Android hook,文章參考官方教程,有修改。

1、安裝Xposed Installer框架apk到手機,手機必須root;

2、代碼編寫;

在manifest文件中聲明:

<application
  android:allowBackup="true"
  android:icon="@drawable/ic_launcher"
  android:label="@string/app_name"
  android:theme="@style/AppTheme" >
  <meta-data
    android:name="xposedmodule"
    android:value="true" />
  <meta-data
    android:name="xposeddescription"
    android:value="Easy example which changes the color of all app" />
  <meta-data
    android:name="xposedminversion"
    android:value="30" />
</application>

添加xposed庫文件到libs目下;新建Main.java類,代碼如下:

public class Main implements IXposedHookLoadPackage,IXposedHookZygoteInit{

    @Override
    public void initZygote(StartupParam startupParam) throws Throwable {
        hookResColor();
    }

    void hookResColor(){
        XposedHelpers.findAndHookMethod(Resources.class,
                "getColor", Integer.TYPE,
                new XC_MethodReplacement() {
                    
                    @Override
                    protected Object replaceHookedMethod(MethodHookParam param)
                            throws Throwable {
                        Object color = XposedBridge.invokeOriginalMethod(param.method, param.thisObject, param.args);
                        if (color instanceof Integer) {
                            Integer new_name = (Integer) color;
                            return new_name & ~0x0000ff00 | 0x00ff0000;
                        }
                        return null ;
                    }
                });
    }
    
    @Override
    public void handleLoadPackage(LoadPackageParam lpparam) throws Throwable {
        hookClock(lpparam);
    }

    void hookClock(LoadPackageParam lpparam){
        if (!lpparam.packageName.equals("com.android.systemui"))
            return;

        XposedHelpers.findAndHookMethod(
                "com.android.systemui.statusbar.policy.Clock",
                lpparam.classLoader, "updateClock", new XC_MethodHook() {
                    @Override
                    protected void afterHookedMethod(MethodHookParam param)
                            throws Throwable {
                        System.out.println("replaceHookedMethod---updateClock");
                        XposedBridge.log("replaceHookedMethod---updateClock-->>");
                        TextView tv = (TextView) param.thisObject;
                        String text = tv.getText().toString();
                        tv.setText(text + " :)-->");
                        tv.setTextColor(Color.RED);
                    }
                });
    }

添加名稱為xposed_init的文件到assets目錄下,文件內容為“com.app.xposed.example.Main”,就是上面Main類的完整包名。

右鍵工程選擇properties,在Java Build Path里去掉勾選的選項(這里有點坑,必須去掉勾選,不然運行之后沒效果,不知道是不是和開發環境有關),如圖:

運行工程,效果如下:

這么看來Xposed也和Cydia Substrate一樣,需要依賴於Java反射,如果做了代碼混淆或者加密之后,此框架還有用嗎?


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM