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.运行效果

  • 相关阅读:
    每日一水 POJ8道水题
    编译和使用 MySQL C++ Connector
    j2ee model1模型完成分页逻辑的实现 详解!
    DB查询分析器访问EXCEL时,要在表名前后加上中括弧或双引号
    指向结构体变量的指针
    EOSS V3.0 企业运营支撑系统(基于RBAC原理的权限管理)
    MybatisGen1.0 Mybatis JavaBean Mapper生成工具
    The table name must be enclosed in double quotation marks or sqare bracket while accessing EXCEL by
    资源-Android:Android
    软件-开发软件:Android Studio
  • 原文地址:https://www.cnblogs.com/zhujiabin/p/10628527.html
Copyright © 2011-2022 走看看