在网络上获取到一个运动模拟器APP,宣称可以支持对市面上所有运动APP的步数的修改,最终快速实现到你设定的目标步数。
下面就开始对运动模拟器APP功能进行分析,解析下该APP如何实现修改步数功能原来,达到最终的作弊效果。在进行解析功能之前先需要了解下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后放行功能。
1、动态传感器:这类传感器测量三个轴向上的加速力和旋转力。这个类别中包含加速度计、重力传感器、陀螺仪和旋转矢量传感器。2、环境传感器:这类传感器测量各种环境参数,如环境气温、气压、照度和湿度。这个类别中包含气压计、光度计和温度计。3、位置传感器:这类传感器测量设备的物理位置。这个类别中包含屏幕方向传感器和磁力计。android中传感器实现调用需要涉及到以下几个关键类和接口:使用这个类来创建传感器服务的实例。该类提供了各种方法来访问和列出传感器,注册和取消注册传感器事件监听器,以及获取屏幕方向信息。它还提供了几个传感器常量,用于报告传感器精确度,设置数据采集频率和校准传感器。使用这个类来创建特定传感器的实例。该类提供了各种方法来确定传感器的特性。使用这个类来创建传感器事件对象,该对象提供有关传感器事件的信息。传感器事件对象中包含以下信息:原始传感器数据、生成事件的传感器类型、数据的准确度和事件的时间戳。使用此接口创建两种回调方法,以在传感器值或传感器精确度发生变化时接收通知(传感器事件)。
通过APP基本构成分析,该APP没有采用第三方加固进行对代码保护,并且所有功能都集中在java代码上。
android.permission.VIBRATEandroid.permission.WRITE_EXTERNAL_STORAGEandroid.permission.READ_EXTERNAL_STORAGEcom.specher.sm.MainActivity
通过ComponentName类可以实现打开启动另一个APP应用程序,通过这种方式判断当前运行环境是否安装了xposed框架。ComponentName cn = new ComponentName(packageName, className); //第一个参数为包名,第二个参数类名
经过对整个APP代码的分析,这个app的主要核心功能在下图的3个类中,分别为:MainActivity、HookSensor、b,其中MainActivity类上面已分析主要是通过判断是否有安装xposed框架还有读取界面上的设置功能。这个是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。
【推荐阅读】
对端口扫描的CS木马样本的分析
一起来逆向分析某黑产APP
这个假微信软件有点套路
文章来源: http://mp.weixin.qq.com/s?__biz=MzUxODkyODE0Mg==&mid=2247490497&idx=1&sn=8c5ac86ca742e1b082a80883cc3d64bd&chksm=f98039a0cef7b0b61dba8c3c71c27fb6b08d8a5067b007fc4bb9207355ed63a65230963f2858#rd
如有侵权请联系:admin#unsafe.sh