最近忙的没时间更博, 之前计划的iOS方向也搁置了(没错就是懒), 因为小组转型又要重新拾起Android逆向, 最近可能会写一些Android方面的内容, 之前都是用Eclipse来用Xposed, 今天试一下准备把代码全转到AndroidStudio上, 在这里做个记录吧!
以下内容需要系统ROOT权限
安装Xposed框架
Xposed框架中文站
该网站里有不少Xposed相关的资源
Xposed官网 论坛里帖子可以解决不少你的问题
注意XposedInstaller的版本, 2.7支持4.0, 3.0支持5.0及以上的安卓系统
- 安装激活Xposed框架
依次安装Recovery和Install即可, 每次安装后都需要重启哦
编写Xposed模块
- 添加meta
在AndroidStudio创建一个android应用后, 在AndroidManifest.xml里添加以下内容
1 | <meta-data |
添加api依赖库
把XposedBridgeApi-54.jar复制到工程libs目录后右键 -> Add As Library
- 指定模块的入口
一个模块可以有多个继承IXposedHookLoadPackage的子类,所以要指定一个入口让xposed去执行(指定两个似乎也是可行的,未测试)
1 新建一个类实现IXposedHookLoadPackage接口类, 并重写虚函数handleLoadPackage
要进行代码注入,必须实现接口de.robv.android.xposed.IXposedHookLoadPackage,因为Xposed将其作为回调,在应用程序进程启动时,调用IXposedHookLoadPackage里的handleLoadPackage方法, 这样就能在应用的进程中执行handleLoadPackage()方法中的代码。
2 右键App文件夹创建一个assets目录
3 在assets目录下新建一个名为xposed_init的文件。
4 在xposed_init中写入某个IXposedHookLoadPackage子类的完整类名,如:com.main.mario.HookMain。
Hook任意java层函数
在上面终于搭建好了框架, 现在可以写hook的逻辑代码啦
测试被hook的主角
hook的代码
函数介绍
XposedHelpers.findAndHookMethod([hook目的类的全包名],
[目标类的classloader],
[要hook的方法],
[…不定参的参数类型]
new XC_MethodHook())
XC_MethodHook用于编写注入的代码逻辑;
指定HOOK时机的虚函数:
(beforeHookedMethod) 执行前拦截, 在方法执行前先执行我们自己的代码
(afterHookedMethod) 执行后拦截, 在方法执行后再执行我们自己的代码。
对于回调过来的参数MethodHookParam param:
param.args[0]:得到被拦截方法的第一个参数,返回值是Object
param.getResult():得到被拦截方法的执行结果,返回值是Object
激活插件
把被Hook和hook的程序安装后, 进入XposedInstaller激活该模块, 并重启系统
查看Hook结果
hook前:
hook后:
遇到的一些坑
为什么这个标题这么大的, 因为这个问题坑了我几个小时, 最后还是感谢大佬@DeelMind
使用新版AndroidStudio开发Xposed需要注意一下几点:
1 在添加api依赖库后, Bulid -> Edit Library and … 选择刚刚添加的库把Scope修改为CompileOnly
2 在build.gradle里把
implementation fileTree(include: [‘*.jar’], dir: ‘libs’)
修改为
compileOnly fileTree(include: [‘*.jar’], dir: ‘libs’)
3 在File -> setting > InstantRun 里把 Enble Instant Run to …复选框取消