使用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 Installer实现Android Hook

运行工程,效果如下:

使用Xposed Installer实现Android Hook使用Xposed Installer实现Android Hook使用Xposed Installer实现Android Hook

这么看来Xposed也和Cydia Substrate一样,需要依赖于Java反射,如果做了代码混淆或者加密之后,此框架还有用吗?

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2022-02-14
  • 2021-08-30
  • 2022-12-23
  • 2021-10-22
  • 2021-04-27
  • 2021-12-30
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2021-11-17
  • 2022-12-23
  • 2021-08-16
  • 2022-12-23
  • 2021-10-06
相关资源
相似解决方案