最近关于微信中,朋友之间发送原图就可能暴露你的位置信息,其实这个问题不在于微信,因为它是为了更好的体验效果,才有发送原图功能,而对于拍照,发送普通图片微信后台都会过滤图片的exif信息,这样就不会携带位置信息了。我们本身用手机自带的相机拍摄照片默认都是会在图片中添加位置信息的。当然我们也可以手动的关闭这个功能。这一点个人觉得不能怪微信。
因为更好的逆向学习,和用户体验,本文将开发一套更加好用的插件,就是选择图片直接利用微信自带的地图功能,定位图片位置。这个过程会很麻烦。但是本文会逐一详细介绍的。在介绍这个插件之前,必须了解我之前介绍的一款插件功能:如何转发小视频到朋友圈插件,本文的插件是基于这个插件的基础之上操作的。所以必须看懂这个插件原理才能继续阅读本文。
下面来开始操作了,首先不多说了,先给大家看看插件的效果,这样会有一个感官认识:
我们在聊天中,点击一张图片,然后会弹出一个菜单,我们需要在这个菜单中添加一项就是定位入口,那么这里的第一个突破口,就是如何找到添加这个入口呢?这个简单。我们可以通过默认的菜单文案找到关键代码,这里通过反编译微信之后,查看他的字符串信息:
然后在用Jadx打开微信全局搜索即可:
这里有多个,但是为什么选择第二个呢?因为我们点进去会发现正是我们想要的菜单,这里搜索结果不算多,可以一个个尝试查看:
这里正好对应上了,那个弹出菜单的三个选项。所以入口就在这里了,下面看看他是如何添加菜单的:
这里定义了一个内部类,然后遍历列表开始构造菜单信息,点进去方法看看如何构造:
看到了MenuItem类就可以完全确定了,这里是构造菜单了,看到这里传入的两个参数一个是菜单索引值,一个是菜单名称,构造完之后在存入到全局变量列表ktX中,后面我们需要直接操作这个ktX列表数据:
既然找到了这里添加菜单的位置,下面我们就开始利用Xposed进行hook,添加我们自定义的菜单了,但是在操作之前,我们需要解决两个问题:
-
第一个问题:看到上面我们需要hook的类ImageGalleryUI的内部类,这个需要我们去反编译之后的smali文件夹中找到这个内部类名称。
-
第二个问题:是hook的那个b方法参数是对象类型,这里需要先加载这个类类型才能进行hook操作
我们去反编译之后的smali文件夹看看这个内部类叫啥:
这里看到有十几个内部类,这里我们需要通过上面的那个内部类的方法签名判断,所以依次打开每个内部类文件进行确认,最终确认到了是ImageGalleryUI$12.smali这个类:
找到这个内部类之后,下面就是正常的hook代码了:
不过,这里需要注意,我们需要把菜单添加到最末尾,所以还需要拿到已经添加的菜单个数,也就是上面提到的那个全局菜单列表,这里用反射获取即可。而且需要保存这个列表大小信息,后面再处理菜单点击事件还要用到。
操作完成之后,就开始安装这个Xposed模块,重启生效,看看是否添加成功了:
看