博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Xposed hook(android)
阅读量:6907 次
发布时间:2019-06-27

本文共 4444 字,大约阅读时间需要 14 分钟。

先写一个测试程序获取 id

public class MainActivity extends AppCompatActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        //控件        TextView test = findViewById(R.id.test);        Context context = getApplicationContext();        //权限        //
if (context.getPackageManager().checkPermission(Manifest.permission.READ_PHONE_STATE, context.getPackageName()) == PackageManager.PERMISSION_GRANTED) { String Imei = ((TelephonyManager) getSystemService(TELEPHONY_SERVICE)).getDeviceId(); Log.e("soho",Imei); test.setText(Imei); } else { Log.e("soho","no permission"); } }}

Xposed hook(android)

开始 hook
新建一个项目
在application中增加模块说明

/

导入 xposed jar

先在 app 中新建 一个文件夹同时必须名为 lib(在 project 视图)
Xposed hook(android)
复制模块进去
Xposed hook(android)
打开模块依赖
Xposed hook(android)
再添加
Xposed hook(android)
修改 scope 为
Xposed hook(android)
Xposed hook(android)
加载下或者运行一下不行重启 as
会出现 3 个目录说明加载成功
Xposed hook(android)
创建一个类 名称必须为Main实现IXposedHookLoadPackage接口
Xposed hook(android)
实现方法
Xposed hook(android)
声明主入口类路径
在 main文件夹内建立 assets文件夹必须名为assets
在assets文件夹内新建一个 xposed_init的文件名称也要一样
在文件中声明入口类名称
Xposed hook(android)
使用 findAndHookMethod

package com.example.liuhailong.hook;import android.telephony.TelephonyManager;import de.robv.android.xposed.IXposedHookLoadPackage;import de.robv.android.xposed.XC_MethodReplacement;import de.robv.android.xposed.XposedBridge;import de.robv.android.xposed.XposedHelpers;import de.robv.android.xposed.callbacks.XC_LoadPackage;public class Main implements IXposedHookLoadPackage {    @Override    public void handleLoadPackage(XC_LoadPackage.LoadPackageParam loadPackageParam) throws Throwable {        //先判断要 hook的包也就是那个 app        if(!loadPackageParam.packageName.equals("com.example.liuhailong")){            //打印日志这个打印在 apk上            XposedBridge.log(loadPackageParam.packageName);            return;        }          //打到对应的方法 进行替换 replaceHookedMethod替换方法        //参数1:名称 参数2:方法名 参数3:实现监听 重写方法        XposedHelpers.findAndHookMethod(        TelephonyManager.class,        "getDeviceId",        new XC_MethodReplacement() {            @Override            protected Object replaceHookedMethod(MethodHookParam argMethodHookParam) throws Throwable {                return "我才是序列号!";            }        }        );    }}

安装 hook 框架

de.robv.android.xposed.installer_v32_de4f0d.apk
Xposed hook(android)
提示要你安装 hook
Xposed hook(android)
点击框架
Xposed hook(android)
点击安装它就会要你重启
重启完后启动 hook

点击模块

Xposed hook(android)
重启就可以了 只要启动 hooktest 就会被 hook(hook不要启动 一般是写没有见面的我是为了调试)
Xposed hook(android)
Main.java 完整代码

package com.bluelesson.xposed24;import android.telephony.TelephonyManager;import de.robv.android.xposed.IXposedHookLoadPackage;import de.robv.android.xposed.XC_MethodHook;import de.robv.android.xposed.XposedBridge;import de.robv.android.xposed.XposedHelpers;import de.robv.android.xposed.callbacks.XC_LoadPackage;public class Main implements IXposedHookLoadPackage {    @Override    public void handleLoadPackage(XC_LoadPackage.LoadPackageParam argLoadPackageParam) throws Throwable {        // 判断是不是要Hook的包,不是直接返回        if(!argLoadPackageParam.packageName.equals("com.bluelesson.testphoneinfo")){            return;        }//        XposedHelpers.findAndHookMethod(//                TelephonyManager.class,//                "getDeviceId",//                new XC_MethodReplacement() {//                    @Override//                    protected Object replaceHookedMethod(MethodHookParam argMethodHookParam) throws Throwable {//                        return "我才是序列号!";//                    }//                }//        );        XposedHelpers.findAndHookMethod(                TelephonyManager.class,                "getDeviceId",                new XC_MethodHook() {                    @Override                    protected void beforeHookedMethod(MethodHookParam param) throws Throwable {                        super.beforeHookedMethod(param);                        XposedBridge.log("beforeHookedMethod");                    }                    @Override                    protected void afterHookedMethod(MethodHookParam param) throws Throwable {                        super.afterHookedMethod(param);                        XposedBridge.log("afterHookedMethod");                        param.setResult("我是序列号");                    }                }        );    }}

转载于:https://blog.51cto.com/haidragon/2137417

你可能感兴趣的文章
GitHub 配置指南
查看>>
swift swift学习笔记--函数和闭包
查看>>
Java 面向对象,封装,继承
查看>>
ISO语言代码
查看>>
一文搞懂List 、List<Object>、List<?>的区别以及<? extends T>与<? super T>的区别
查看>>
Java 读写Properties配置文件
查看>>
17.自定义指令
查看>>
使用Maven构建多模块项目
查看>>
Google Shell Style Guide
查看>>
spring和springMVC的上下文
查看>>
create.c
查看>>
2014 蓝桥杯 预赛 c/c++ 本科B组 第九题:地宫取宝(12') [ dp ]
查看>>
手机尾号猜年龄骗局解密
查看>>
并查集加优先队列
查看>>
es6—变量的解构赋值
查看>>
腾讯app任务集市签名 php实现代码
查看>>
【kubernetes】ubuntu14.04 64位 搭建kubernetes过程
查看>>
一条命令搞定在VMware中的Ubuntu14.04 64 位安装Docker
查看>>
抽屉效果学习
查看>>
(转)Unity3D中常用的数据结构总结与分析
查看>>