我是安照定位的

来源: 作者: 吉祥 王振宇

  3月12日,阜阳师范学院大四学生小王骑电动车去火车站买票,结果在路上弄丢了智能手机。后来他重新买了一部手机,共享账号的云服务,包括云相册。3月28日,小王打开云相册,发现多了几张陌生照片。“图片上有拍摄位置,可以利用导航去寻找。”昨天,小王告诉,他最终成功找回了丢失18天的手机。

  “真没想到还能找回自己的手机。”昨天,小王告诉记者,他丢了手机后报了警,做好笔录后,民警就让他回去等消息,但过去十几天了,警方一直没联系他。

  没有手机的日子太不方便了。小王又买了一部同款智能手机,并且启用了自己的手机云账号,其中就包括云相册等内容。3月28日,小王同步云相册,结果发现里面多出几张陌生照片。其中一张照片显示,一名女子正带小孩在户外游玩。

  “照片上的人我都不认识。”小王猜测,这可能是捡了他手机的人拍的照片。他查看了图片详情,发现拍摄地点为阜阳市颍东区三角洲公园。当天,他就急匆匆赶到公园,但公园里游客流动性大,根本找不着人。

  3月29日,小王又在云相册里发现了几张室内图片。“说不定这就是捡到手机的人家里!”小王认为,只要能准确定位这几张照片的拍摄位置,就可以直接找到对方的家。

  通过定位,小王发现拍摄地点距离三角洲公园不远,于是叫上一个朋友,根据电子地图导航出发了。两人最终来到一个院子附近,那里只有几栋民房,找人也不难。小王拿出云相册中女子带小孩玩的照片,询问附近居民。一打听,有居民表示认识这名女子。

  在居民的指引下,小王来到这名女子家中,说明来意后,女子立马拿出手机,还给了小王。这名女子称,3月12日婆婆送孩子上学,在阜阳汽车东站附近捡到了这部手机,拿回家给她用了。

  “手机找回来了,但储存卡不见了。”昨天,小王告诉记者,他就此问了对方,但对方讲没有见到。小王虽然怀疑,但没有证据,也不好追究。女子还觉得奇怪,问小王:“你是怎么找到这里的?”

  原来,小王在手机上设置了云账号,就算不是同一部手机,只要登录云账号,就可以共享“云端”里的内容,自然也包括相册。而小王还专门在前一部手机里做了设置,拍摄的照片能够显示具体位置,也能自动上传“云端”。正因如此,小王才能找回丢失的手机。

  记者了解到,除了相册,通讯录、短信等内容,都能在“云端”里备份。

① 安徽日报报业集团旗下各媒体稿件和图片,独家授权中安在线发布,未经本网允许,不得转载使用。获授权转载时应在授权范围内使用,并须注明来源,如中安在线-安徽日报。
② 凡注明为其他媒体来源的信息,均为转载自其他媒体,并不代表本网赞同其观点和对其真实性负责。您若对该稿件内容有任何疑问或质疑,请即与本网联系。

一个俄语 ATP 组织 Turla 使用了巧妙的方法隐藏痕迹。Turla 主要针对政府机构、大使馆、军方、研究机构和制药公司窃取敏感信息,其同名恶意程序能感染 Windows 和 Linux,它的 Linux 模块大量使用了开源的静态链接库,曾被发现劫持卫星链路与指令控制中心通信。

根据安全公司 Eset 研究人员的,Turla 发布了一个含有后门的 Firefox 扩展,使用一个 bit.ly 缩址访问指令控制中心获取指令,但扩展代码中没有发现网址路径,它是通过小甜甜布兰妮官方 Instagram 账号上的一个留言获得指令控制的路径。扩展会检查小甜甜每一张照片下的留言,计算一个定制的哈希值,如果哈希值匹配,它会运行正则表达式得到 bit.ly 缩址。

一、前言最近关于微信中,朋友之间发送原图就可能暴露你的位置信息,其实这个问题不在于微信,微信是为了更好的体验效果,才有发送原图功能,而对于拍照,发送普通图片微信后台都会过滤图片的exif信息,这样就不会携带位置信息了。我们本身用手机自带的相机拍摄照片默认都是会在图片中添加位置信息的。当然我们也可以手动的关闭这个功能。这一点个人觉得不能怪微信。因为更好的逆向学习,和用户体验,本文将开发一套更加好用的插件,就是选择图片直接利用微信自带的地图功能,定位图片位置。这个过程会很麻烦。但是本文会逐一详细介绍的。在介绍这个插件之前,必须了解我之前介绍的一款插件功能:,本文的插件是基于这个插件的基础之上操作的。所以必须看懂这个插件原理才能继续阅读本文。
二、添加入口菜单下面来开始操作了,首先不多说了,先给大家看看插件的效果,这样会有一个感官认识:
我们在聊天中,点击一张图片,然后会弹出一个菜单,我们需要在这个菜单中添加一项就是定位入口,那么这里的第一个突破口,就是如何找到添加这个入口呢?这个简单。我们可以通过默认的菜单文案找到关键代码,这里通过反编译微信之后,查看他的字符串信息:
然后在用Jadx打开微信全局搜索即可:
这里有多个,但是为什么选择第二个呢?因为我们点进去会发现正是我们想要的菜单,这里搜索结果不算多,可以一个个尝试查看:
这里正好对应上了,那个弹出菜单的三个选项。所以入口就在这里了,下面看看他是如何添加菜单的:
这里定义了一个内部类,然后遍历列表开始构造菜单信息,点进去方法看看如何构造:
看到了MenuItem类就可以完全确定了,这里是构造菜单了,看到这里传入的两个参数一个是菜单索引值,一个是菜单名称,构造完之后在存入到全局变量列表ktX中,后面我们需要直接操作这个ktX列表数据:
既然找到了这里添加菜单的位置,下面我们就开始利用Xposed进行hook,添加我们自定义的菜单了,但是在操作之前,我们需要解决两个问题:第一个问题:看到上面我们需要hook的类ImageGalleryUI的内部类,这个需要我们去反编译之后的smali文件夹中找到这个内部类名称。第二个问题:是hook的那个b方法参数是对象类型,这里需要先加载这个类类型才能进行hook操作我们去反编译之后的smali文件夹看看这个内部类叫啥:
这里看到有十几个内部类,这里我们需要通过上面的那个内部类的方法签名判断,所以依次打开每个内部类文件进行确认,最终确认到了是ImageGalleryUI$/geocoder/v2/参数location:经纬度信息,用逗号连接参数output:返回的数据格式,可以是json,或者xml参数pois:这个可以忽略,直接用1即可参数ak:这个是请求位置信息需要的key值,这个需要去百度平台申请。
好了,我们直接利用图片的经纬度信息去请求这个位置信息,返回json数据,我们解析出位置主要地址,和后面的辅助地址。然后调用微信内部地图信息即可。
第二件:利用微信内部地图功能进行展示位置
我们知道微信内部用的是自家的地图功能,我们可以利用命令找到入口,首先打开内部一个地图信息,这个可以在聊天记录中发送位置信息,然后打开即可。这时候利用:adb shell dumpsys activity top 然后用Jadx工具全局搜索这个类即可。不过可惜的是,这里搜索没结果的:
这时候要想到了,微信是拆包了,有多个dex文件,而之前已经说过了,微信的第二个dex是打包成jar文件,放在assets目录中的:
解压jar文件拿到classes.dex就是他的第二个dex文件,我们用Jadx打开这个dex即可:
这就搜索到了,我们点进去查看即可:
那么这里就好办了,我们可以启动这个activity,通过intent传递需要的参数信息。但是这里有两个问题需要解决:第一个问题:启动Activity需要微信中的一个activity实例,这个我们可以hook上面提到的ImageGalleryUI这个类,拿到对象实例即可。这个hook很简单,直接hook他的onResume方法,然后获取对象实例即可:

第二个问题:如何获取启动地图页面的intent中的参数信息,这个可以通过代码分析,但是这里可能携带的参数信息很多,为了避免遗漏,我们用另外一种方法就是,hook这个地图页面启动的onResume方法,拿到对象实例,然后通过getIntent方法获取当前页面的intent数据,在拿到对应的Bundle结果,可以遍历他所有的参数key和值信息,我们hook之后,随便打开微信内部一个地图信息,看看hook的参数日志都有哪些,这里我打开的是聊天记录中发送的位置信息:
这里需要注意,因为我们已经知道这个类是在第二个dex中,所以hook操作就需要拿到正确的类加载器才能加载这个类进行hook操作。而hook多dex的应用,之前已经说过了,需要先hook应用的Application的attach方法,然后拿到正确的ClassLoader,才能继续下面的hook操作。这个方法一定要记住。非常关键。
然后安装模块,重启生效,看日志信息:
这里看到的确有很多信息,不过这里分析之后,发现只有这五个参数信息是最关键的,其他参数我么可以照着抄过来就好了,关键的五个参数信息是:kwebmap_slat:经度kwebmap_lng:纬度kPoiName:地图页面中展示的主地址
Kwebmap_locaion:地图页面中展示的从地址kwebmap_scale:地图默认缩放的大小有了这上面的信息,下面就来启动页面代码吧:
这里需要注意,启动的地图页面Activity的类变量,一定要用多dex的hook方法加载到,这个时机也要最早的。然后保存下面即可。然后就用之前已经hook到的ImageGalleryUI这个activity实例启动即可。五、插件功能流程总结到这里我们已经完成了大部分的工作了,下面来整理整个hook流程吧:第一步:通过聊天中查看图片信息hook方法拿到图片地址进行保存。第二步:获取图片的exif信息,获取经纬度信息。第三步:借助百度开发api通过经纬度信息获取具体位置信息。第四步:有了经纬度和位置信息,启动微信内部的地图页面进行展示。而在这个过程之前,我们还需要添加一个入口,那就是在聊天记录中点击图片查看,然后长按弹出菜单中加一个展示位置信息入口。有了这些步骤,还不算完美,因为我们在第三步是需要请求百度开发api的,这个是一个等待过程,所以这个过程中,我们还需要加一个loading样式,不然插件体验很不好的。而我做事只求完美,不求到位。这里的loading样式怎么办呢?还是拿来主义。利用微信内部资源实现即可。这里也是一个技巧了,看我怎么操作的:首先去微信反编译之后的资源目录下查看,找到一个合适的作为loading图片资源,这里我看到这个资源:
这个资源好看,然后我们自定义一个旋转动画,就类似于loading效果了,关于旋转动画不多说了,网上一大堆资料:
这里读取资源,可以直接用上面资源的id值即可,这个值可以通过values/public.xml中获取:
然后自定义这个loading视图:
最后在借助WindowManager来进行展示loading视图,这里可以直接代码编写布局即可:
好了,下面来看一下展示效果:

六、总结好了,到这里,我们就全部介绍完了,知识点的确很多,文章也很长。因为我们做的功能太多了。哈哈,下面来总结本次操作的技术知识点:第一、在获取hook点的时候,有时候利用Xposed进行hook尝试也是一种方案,比如本文的获取图片地址,以及获取地图启动的参数信息,都是很好的例子。不要一根筋完全去分析代码实现。hook打印参数和返回值信息也是很好的选择。第二、多dex应用进行hook的时候,一定要记得先hook应用的Application类的attach方法,获取到正确的类加载,在进行后续的hook操作。第三、通过经纬度信息获取具体位置信息,可以利用百度开发api获取,这个记住,以后或许还有很多地方要用到。第四、如果在hook中想添加UI的功能,可以利用现有应用内部资源,利用代码编写布局动画即可。好了到这里,也介绍完了插件功能了。不过可惜的是,这个不是所有的图片都能获取到位置信息的,开始的时候也说了,微信有一个发送原图功能,也就是只有原图可以获取到经纬度信息,而通过微信内部拍照,或者发送压缩图都会被微信服务器过滤exif信息。我们本地已经没办法获取到了。那么此插件就丧失了功能。最后再来看一下插件效果图:
注意:本文用到的是微信6.3.9版本,最新版本可能有区别,不过逆向过程大同小异。有很多同学问了很多次Jadx打开微信会卡死怎么办?因为微信内部资源太多。所以直接打开apk会卡死的。主要是Jadx解析微信资源文件非常耗内存。所以可以解压apk之后直接用Jadx打开多个dex即可。希望以后不要再问我了。
谢谢@Thanks!虽然没看懂,但是技术很牛,感谢楼主分享!!
666,dalao都是直接分析出结果在实践用上啊
感谢发布原创作品,吾爱破解论坛因你更精彩!
突然觉得写作文不算什么
感谢发布原创作品,吾爱破解论坛因你更精彩!
感谢发布原创作品,吾爱破解论坛因你更精彩!大佬!
感谢发布原创作品,吾爱破解论坛因你更精彩!
感谢发布原创作品,吾爱破解论坛因你更精彩!
欢迎分析讨论交流,吾爱破解论坛有你更精彩!
膜拜大佬~~~写得不错,思路很清析~
现在哪个APP不记录时时定位。。。毕竟老百姓不了解什么是隐私泄露!
在相机中把保存地理位置清除就安全了吧

本帖被以下淘专辑推荐:

我要回帖

更多关于 按照 的文章

 

随机推荐