对运动作弊APP的分析

2023-05-31 16,948


背景

在网络上获取到一个运动模拟器APP,宣称可以支持对市面上所有运动APP的步数的修改,最终快速实现到你设定的目标步数。

下面就开始对运动模拟器APP功能进行分析,解析下该APP如何实现修改步数功能原来,达到最终的作弊效果。
在进行解析功能之前先需要了解下xposed基础知识点和传感器知识点。
xposed基础

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后放行功能。 

传感器基础
android 平台支持三大类传感器:
1、动态传感器:这类传感器测量三个轴向上的加速力和旋转力。这个类别中包含加速度计、重力传感器、陀螺仪和旋转矢量传感器。
2、环境传感器:这类传感器测量各种环境参数,如环境气温、气压、照度和湿度。这个类别中包含气压计、光度计和温度计。
3、位置传感器:这类传感器测量设备的物理位置。这个类别中包含屏幕方向传感器和磁力计。
android中传感器实现调用需要涉及到以下几个关键类和接口:
1、SensorManager
使用这个类来创建传感器服务的实例。该类提供了各种方法来访问和列出传感器,注册和取消注册传感器事件监听器,以及获取屏幕方向信息。它还提供了几个传感器常量,用于报告传感器精确度,设置数据采集频率和校准传感器。
2、Sensor
使用这个类来创建特定传感器的实例。该类提供了各种方法来确定传感器的特性。
3、SensorEvent
使用这个类来创建传感器事件对象,该对象提供有关传感器事件的信息。传感器事件对象中包含以下信息:原始传感器数据、生成事件的传感器类型、数据的准确度和事件的时间戳。
4、SensorEventListener

使用此接口创建两种回调方法,以在传感器值或传感器精确度发生变化时接收通知(传感器事件)。


 

功能分析

通过APP基本构成分析,该APP没有采用第三方加固进行对代码保护,并且所有功能都集中在java代码上。

允许振动功能:
android.permission.VIBRATE
允许程序写入外部存储:
android.permission.WRITE_EXTERNAL_STORAGE
允许程序可以读取设备外部存储空间:
android.permission.READ_EXTERNAL_STORAGE
程序的主入口:

com.specher.sm.MainActivity

通过ComponentName类可以实现打开启动另一个APP应用程序,通过这种方式判断当前运行环境是否安装了xposed框架。

ComponentName cn = new ComponentName(packageName, className);   //第一个参数为包名,第二个参数类名

经过对整个APP代码的分析,这个app的主要核心功能在下图的3个类中,分别为:MainActivity、HookSensor、b,其中MainActivity类上面已分析主要是通过判断是否有安装xposed框架还有读取界面上的设置功能。

HookSensor类
这个是xposed模块的主要入口,通过xposed提供的接口函数进行对系统函数进行hook,从而达到改变修改流程作弊的功能。
android.hardware.SystemSensorManager$SensorEventQueue这个类是用于读取传感器数据的一个类。
android.hardware.SensorManager 获取物理传感器
这个类主要功能通过查找传感器相关的类,然后通过要进行hook的方法进行hook。

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_GYROSCOPE = 4;
//光线感应传感器
public static final int TYPE_LIGHT = 5;
//距离传感器,基于硬件
public static final int TYPE_PROXIMITY = 8;
//重力传感器,基于硬件或软件
public static final int TYPE_GRAVITY = 9;
//旋转矢量传感器,基于硬件或软件

public static final int TYPE_ROTATION_VECTOR = 11;

 

小结

以上只是对运动模拟器APP的简单分析,这仅仅就是一个xposed的插件,通过hook系统传感器方式实现整个手机系统进行作弊功能。

在目前的情况下,很多APP都对xposed进行对抗,因xposed是开源的,因此由于对抗也衍生了各种定制版本例如lsposed。

结束

 

本文作者:小道安全

本文为安全脉搏专栏作者发布,转载请注明:https://www.secpulse.com/archives/201215.html

Tags:
评论  (0)
快来写下你的想法吧!

小道安全

文章数:31 积分: 0

安全问答社区

安全问答社区

脉搏官方公众号

脉搏公众号