zoukankan      html  css  js  c++  java
  • 轻松搭建Xposed Hook

     0x2.导入xposed库文件XposedBridgeApi-XX.jar,将库文件放在app/lib目录下,自己创建一个lib目录,别放在libs目录下,否则会出错,然后导入库,修改 Scope 为 Provided0x1.打开AS建立一个没有界面的空工程,然后在清单文件中添加如下代码

    <application
        android:allowBackup="true" android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name" android:supportsRtl="true"
        android:theme="@style/AppTheme"
        >
        <!--  使 xposed 模块有效  -->
        <meta-data android:name="xposedmodule" android:value="true"/>
        <!-- xposed 模块名称  -->
        <meta-data android:name="xposeddescription" android:value="Xposed模块示例"/>
        <!-- xposed 模块最低版本  -->
        <meta-data android:name="xposedminversion" android:value="54"/>
    </application>

     0x2.导入xposed库文件XposedBridgeApi-XX.jar,将库文件放在app/lib目录下,自己创建一个lib目录,别放在libs目录下,否则会出错,然后导入库,修改 Scope 为 Provided

    0x3. 创建一个类Main,并在Main中实现 xposed 中的接口 IXposedHookLoadPackage 并重写方法handleLoadPackage

    public class Main implements IXposedHookLoadPackage {
        @Override
        public void handleLoadPackage(XC_LoadPackage.LoadPackageParam loadPackageParam) throws Throwable{
            //  不是需要 Hook 的包直接返回
            if (!loadPackageParam.packageName.equals("com.example.y0n.hookdemo"))
                return;
            XposedBridge.log("Loaded app: " + loadPackageParam.packageName);
        }
    }

    0x4. 声明主入口类路径需要在 main 文件夹下建立 assets 文件夹中新建一个 xposed_init 的文件,并在其中声明主入口类,com.example.y0n.hookdemo.MainActivity,如下图所示:

    0x5.在重载的函数中写入想要hook的函数等

    //  找到对应的方法,进行替换
    //  参数 1 :类名
    //  参数 2:  方法名
    //  参数 3 :实现监听,重写方法
    // replaceHookedMethod  替换方法
    // beforeHookedMethod  方法前执行
    // afterHookedMethod 方法后执行
    XposedHelpers.findAndHookMethod(TelephonyManager.class,
            "getDeviceId", new XC_MethodReplacement() {
                @Override
                protected Object replaceHookedMethod(MethodHookParam param)
                        throws Throwable {
                    return "this is y0n";
                }
            });
    XposedHelpers.findAndHookMethod(TelephonyManager.class,
            "getSubscriberId", new XC_MethodReplacement() {
                @Override
                protected Object replaceHookedMethod(MethodHookParam param)
                        throws Throwable {
                    return "this is y0n";
                }
            });

    0x6.如果hook的是非系统类,而是第三方类,且含有参数,则第一个参数为要hook的类名字符串,同时需要修改第二个参数的classloader 为当前实例的classloader,第三个参数则为hook的方法名,第四个参数为hook函数的参数,具体根据实际hook的函数来写,第5个参数为hook的重写,参考代码如下:

    //  找到对应的方法,进行替换
    //  参数 1 :类名
    //  参数 2:  方法名
    //  参数 3 :实现监听,重写方法
    // replaceHookedMethod  替换方法
    // beforeHookedMethod  方法前执行
    // afterHookedMethod 方法后执行
    XposedHelpers.findAndHookMethod("org.sugram.base.MainActivity",
            loadPackageParam.classLoader,
            "onCreate",
            Bundle.class,
            new XC_MethodReplacement() {
                @Override
                protected Object replaceHookedMethod(MethodHookParam param)
                        throws Throwable {
                    XposedBridge.log("y0n log : onCreate() is hooked!");
                    return 0;
                }
            });

    0x7.编译为apk,并安装,重启激活插件并重启手机,插件即可生效,具体插件安装及工具下载请参考:

    https://www.xda-developers.com/xposed-framework-for-android-oreo-beta/

    0x8.运行效果

  • 相关阅读:
    Java并发编程基本概念
    详解TCP:顺序和丢包问题
    详解TCP:三次握手、四次挥手
    使用DockerFile构建运行GoWeb
    Go之Gorm和BeegoORM简介及配置使用
    Nginx WebUI管理
    Kibana配置nginx反代并本地ca加密nginx
    07 . ELK Stack7.2一键多机部署脚本
    腾讯蓝鲸自动化运维平台简介部署及常见报错解决
    Go操作Redis
  • 原文地址:https://www.cnblogs.com/zhujiabin/p/10628527.html
Copyright © 2011-2022 走看看