Xposed Hook App作弊
The following article is from 编码安全 Author 编码安全
Xposed的实现原理
xposed框架是一款可以在不修改APK的情况下影响app运行的框架服务,基于xposed框架可以开发出许多定制的功能模块,而且在功能不冲突的情况下同时运行。
xposed框架是通过修改系统启动并注入到系统zygote进程,然后通过zygote进程的fork模式进行做注入xposed的模块到所有APP中,最后通过xposed的jar包的功能,进行对指定的APP功能hook。
Xposed框架的hook功能主要在于java层函数的hook,在Native层的hook方面相对比较薄弱。
Xposed框架的hook前准备
通过利用jadx工具(也可以用其他反编译工具如:JEB或者androidKiller)分析apk的dex文件,分析定位出需要hook的关键函数。
用xposed框架进行实现hook功能,它必须重点关注的需要进行hook的app包名称,类名称,函数名称,参数类型,参数的个数,返回值类型。
通过上图用jadx分析。要hook的类名为MainActivity类, 函数为getsum,参数为两个int类型的,返回值为int类型的数值。
上图是该app正常的运行情况,就是点击按钮后调用getsum函数,返回结果为14.
Hook关键函数功能编码
因为xposed是全局做注入的,所以需要进行查询比较指定包名称,也就是确定App的包名称。
接着就是通过xposde的findAndHookMethod函数进行查找要进行hook的函数,这个关键函数需要进行传递进去hook的类名称、函数名称、函数的参数类型。
基于hook需要选择hook的时机;
beforeHookedMethod 会在调用原方法前执行,如果使用setResult则跳过原方法,并返回setResult参数中的值。
afterHookedMethod 会在调用原方法后执行,setResult可改变返回值
replaceHookedMethod 会完全替换原方法,即原方法不执行,且返回值可以直接return,setResult不生效。
通过xposed的Hook后打印的结果,读取出了原函数的参数值,修改了函数的返回数值,最终就达到我们要做到改变一个函数的结果。