之前有朋友希望能修改Android的gps信息,也就是说让其他应用获取gps信息时,取到修改后的信息。一开始听上去感觉挺不靠谱的,后来网上查了下资料,发现还是有人搞定的,主要都是通过古河发布的注入代码,将自己的内容注入到对应应用的内存。在这里,注入的过程就不叙述了,主要说下为什么能修改内容,用获取gps信息来举例。

首先Android中获取gps信息的话主要通过这种方式:

8679db9bdb0540c95a18f1d247027136.png

关键代码出现了,主要通过getSystemService()方法来获取句柄,中间省略一系列复杂的查找步骤,,,我们最终找到一个地方,文件android.os.ServiceManager.java 中的getService()方法:

4c888f5ccb48039090782e580b95f7a2.png

sCache又是什么呢:

a6ed2e1ec09cadc0e732b11b27087190.png,,,看这里,直接根据名称从HashMap中取,如果有就直接返回了。

关键代码看完了,那么具体怎么做呢,很简单,就是自己写一个类,实现IBinder接口,然后通过反射方式将对应的名称和你自己的IBinder添加到sCache这个HashMap中,那么程序通过getSystemService()方法取到的就是自己实现的IBinder类。接着就是实现自己的IBinder类了,很幸运的,在github上搜到了这个项目:https://github.com/aeoliazhang/android_inject_hook_demo,,这个是修改imei信息的,代码相当全面,测试用的GpsIBinder也是根据这里面的ImeiBinder来修改的。

代码就这么多,不过当时没把具体的编译和运行记录下来,所以就自己搞定吧。坑还是很多的,新手还是多花点时间吧,有空会将编译和运行的过程贴出来的。

原文:http://www.cnblogs.com/chenhn071/p/4767176.html

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐