之前有朋友希望能修改Android的gps信息,也就是说让其他应用获取gps信息时,取到修改后的信息。一开始听上去感觉挺不靠谱的,后来网上查了下资料,发现还是有人搞定的,主要都是通过古河发布的注入代码,将自己的内容注入到对应应用的内存。在这里,注入的过程就不叙述了,主要说下为什么能修改内容,用获取gps信息来举例。
首先Android中获取gps信息的话主要通过这种方式:
关键代码出现了,主要通过getSystemService()方法来获取句柄,中间省略一系列复杂的查找步骤,,,我们最终找到一个地方,文件android.os.ServiceManager.java 中的getService()方法:
sCache又是什么呢:,,,看这里,直接根据名称从HashMap中取,如果有就直接返回了。
关键代码看完了,那么具体怎么做呢,很简单,就是自己写一个类,实现IBinder接口,然后通过反射方式将对应的名称和你自己的IBinder添加到sCache这个HashMap中,那么程序通过getSystemService()方法取到的就是自己实现的IBinder类。接着就是实现自己的IBinder类了,很幸运的,在github上搜到了这个项目:https://github.com/aeoliazhang/android_inject_hook_demo,,这个是修改imei信息的,代码相当全面,测试用的GpsIBinder也是根据这里面的ImeiBinder来修改的。
代码就这么多,不过当时没把具体的编译和运行记录下来,所以就自己搞定吧。坑还是很多的,新手还是多花点时间吧,有空会将编译和运行的过程贴出来的。
时间: 2024-10-05 06:48:36