在网络上获取到一个运动模拟器APP,宣称可以支持对市面上所有运动APP的步数的修改,最终快速实现到你设定的目标步数。
Xposed框架(Xposed Framework)是一套应用性非常广的HOOK框架,在Android 高权限模式下运行的框架服务,可以在不修改 APP源码的情况下,修改程序运行(修改系统)的框架服务,基于它可以制作出许多功能强大的模块,且在功能不冲突的情况下同时运作。
Xposed 框架的原理是通过替换系统级别的 /system/bin/app_process 程序控制zygote进程,使得app_process在启动过程中会加载 XposedBridge.jar 这个 jar 包,这个 jar 包里面定义了对系统方法、属性的一系列 Hook操作,同时还提供了Hook API 供我们二次开发 Xposed 模块的使用。
在系统启动时,zygote 进程加载XposedBridge.jar,将需要替换的方法通过JNI中的hookMethodNative指向Native方法xposedCallHandler,xposedCallHandler再调用handleHookedMethod来调用被劫持的方法,进而转入Hook逻辑。
在xposed进行hook操作过程中,必然会跟beforeHookedMethod和afterHookedMethod打交道,其中beforeHookedMethod是在函数运行前劫持HOOK功能,afterHookedMethod是hook后放行功能。
使用此接口创建两种回调方法,以在传感器值或传感器精确度发生变化时接收通知(传感器事件)。
通过APP基本构成分析,该APP没有采用第三方加固进行对代码保护,并且所有功能都集中在java代码上。
com.specher.sm.MainActivity
ComponentName cn = new ComponentName(packageName, className); //第一个参数为包名,第二个参数类名
b类:
这个是xposed模块的关键hook调用类,通过采用beforeHookedMethod(这个方法中的代码逻辑会在hook住的方法调用前执行)进行hook调用操作。
通过响应SensorEvent传感器事件,进行判断传感器的类型,然后实现到对整个系统层面进行作弊修改功能。
//磁力传感器,基于硬件
public static final int TYPE_MAGNETIC_FIELD = 2;
//方向传感器,基于软件
public static final int TYPE_ORIENTATION = 3;
public static final int TYPE_ROTATION_VECTOR = 11;
以上只是对运动模拟器APP的简单分析,这仅仅就是一个xposed的插件,通过hook系统传感器方式实现整个手机系统进行作弊功能。
在目前的情况下,很多APP都对xposed进行对抗,因xposed是开源的,因此由于对抗也衍生了各种定制版本例如lsposed。
【推荐阅读】
原文始发于微信公众号(小道安全):对运动作弊APP的分析