XposedHook实例

Hook 获取序列号函数 例子

  1. 建立一个空工程,编写获取序列号的简单例子
  1. 获取手机状态需要设置权限
    android:name="android.permission.READ_PHONE_STATE">
  2. 编写布局文件

 
 

  1. 编写主 Activity 类中的 onCreate 函数
@Override
protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_main);
 TextView tv1 = (TextView) findViewById(R.id.tv1);
 TextView tv2 = (TextView) findViewById(R.id.tv2);
 TelephonyManager tm = (TelephonyManager) 
getSystemService(Context.TELEPHONY_SERVICE);
 tv1.setText("imei: "+tm.getDeviceId());
 tv2.setText("imsi: "+tm.getSubscriberId());
}
  1. 完成安装
  1. 建立一个无 activity 的工程,编写 Xposed 插件
  1. 设置清单文件
    在 application 标签中增加模块说明信息

 
 
 
 
 
 

  1. 导入 xposed 库文件
    将 xposed 库文件 XposedBridgeApi-XX.jar,放入 app/lib 文件夹下
    需要设置包的依赖,在工程文件夹右键,打开模块设置
image.png

选择对应的模块,app,右边选择依赖项,增加依赖

image.png

选择文件,导入对应包

image.png

需要注意的是:修改 Scope 为 Provided

image.png
  1. 创建一个类,Main,实现 xposed 中的接口 IXposedHookLoadPackage 并重写方法
    handleLoadPackage
public class Main implements IXposedHookLoadPackage {
 @Override
 public void handleLoadPackage(XC_LoadPackage.LoadPackageParam 
lpparam) throws Throwable {
 // 不是需要 Hook 的包直接返回
 if (!lpparam.packageName.equals("com.bluesson.test"))
 return;
 XposedBridge.log("Loaded app: " + lpparam.packageName);
}
}
  1. 声明主入口类路径
    需要在 main 文件夹下建立 assets 文件夹中新建一个 xposed_init 的文件,并在其中声明
    主入口类

我们的主类:com.hello.xposdplugin.Main

  1. 以上做完可以做测试了
    在模拟器或者真机中安装 xposedinstall
    最新的稳定版:de.robv.android.xposed.installer_v32_de4f0d.apk
    安装之后,在 xposed 的模块中可以找到我们安装的 apk(其实就是一个 xposed 插件)
image.png

选中重启之后,再安装测试的 apk 进行测试

  1. Hook 类方法 需要在刚才重写的 handleLoadPackage 方法中添加代码
// 找到对应的方法,进行替换
// 参数 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 imei";
 }
});
XposedHelpers.findAndHookMethod(TelephonyManager.class, 
"getSubscriberId", new XC_MethodReplacement() {
 @Override
 protected Object replaceHookedMethod(MethodHookParam param) 
throws Throwable {
 return "this is imsi";

}
});

你可能感兴趣的:(XposedHook实例)