本文共 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(); //权限 //开始 hook新建一个项目在application中增加模块说明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 jar
先在 app 中新建 一个文件夹同时必须名为 lib(在 project 视图)复制模块进去打开模块依赖再添加修改 scope 为加载下或者运行一下不行重启 as会出现 3 个目录说明加载成功创建一个类 名称必须为Main实现IXposedHookLoadPackage接口实现方法声明主入口类路径在 main文件夹内建立 assets文件夹必须名为assets在assets文件夹内新建一个 xposed_init的文件名称也要一样在文件中声明入口类名称使用 findAndHookMethodpackage 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提示要你安装 hook点击框架点击安装它就会要你重启重启完后启动 hook点击模块
重启就可以了 只要启动 hooktest 就会被 hook(hook不要启动 一般是写没有见面的我是为了调试)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