Cydia Substrate 初尝试:刷计步软件数据
Cydia
Cydia Substrate是一个代码修改工具,可以修改IOS、Android系统代码,从而实现自己的奇思妙想。Cydia的使用方法教程不再赘述,下面直接进入实战。
设备准备
一台Root过得Android设备,Android系统版本2.3-4.3。我当初不信邪,以为Android4.4肯定也可以,结果搞了半天发现是真的不行,所以还是谨遵官网指导,版本最高4.3,不能再高了。不知道怎么准备手机,可以看我的这篇文章如何搞机。
探索
现在比较流行的是微信运动。微信做的真的很完善了,本希望反编译它的apk来找一个切入点,结果有两大难点让我无法进行下去:
- 代码量大:里面用了很多工具包,加上腾讯自己开发的代码,代码量着实不小。但是我们关注的点很明确,所以可以根据包名、类名来寻找,所以还是可以克服的。
- 代码名称混淆:里面好多类名和方法名反编译不出来,只能边看边猜,阅读难度略大。还有一些类直接反编译失败,所以我也是无能为力了,看的云里雾里,没找到正确的切入点。
这两点着实让我心灰意冷,如果哪位仁兄研究过,还请你赐教。还有,我不太清楚微信怎么自己统计步数的。
最后我找了一款比较流行的计步软件,是哪一款我就不说了,这个APP通过加速度传感器数据来计算步数。
我同样也是先反编译这个APP,结果问题和微信一样,暂时无法解决。最后,我选择了不Hook应用,而是Hook Android的API。这款软件采用了加速计数据统计步数,我则着眼于系统的加速计事件的产生过程,从中选择可以Hook的点。
思路
Android系统事件的收发机制很有意思,下面我们来研究一下一个系统事件,从注册监听到接收事件的过程。这里我只关注加速计事件。
监听器注册
Android应用开发,想要利用系统事件,则需要构造一个Listener,这里就是SensorEventListener。首先,你需要得到系统的SensorManager
,然后从中获得想要的传感器,然后让SensorManager将该传感器注册入自己的Listener。
//获得传感器管理器
SensorManager mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
//获得加速度传感器
Sensor mAccelerometer = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
//注册监听器
mSensorManager.registerListener(this, mAccelerometer, SensorManager.SENSOR_DELAY_NORMAL);
我写的代码里的this
就是这个Activity,我让Activity实现了SensorEventListener接口,监听器需要实现的方法如下:
@Override
public void onSensorChanged(SensorEvent event) {
if (event.sensor.getType()==Sensor.TYPE_ACCELEROMETER){
double ax=event.values[0];
double ay=event.values[1];
double az=event.values[2];
Log.d("YOULOG", ax+" "+ay+" "+az);
}
}
@Override