仍然以微信为例, 实战地练习一下使用 Reveal,iOSOpenDev 等工具注入 App 的流程, 积累经验. 这一系列的文章都是学习过程的总结, 不带任何商业目的.
本文解决一个问题: 如何伪造一个经纬度, 在微信的附近的人中, 看到外国的朋友.
小白: 我要瞬间移动到旧金山, 看看黄师傅的宝芝林的同事们!
之前小程已经介绍了常规的注入流程, 这里只介绍一些差别的东西, 以及具体的注入操作.
想要伪造位置, 最好的办法就是, 找到获取位置的函数, 返回一个目标位置即可.
(1)获取位置的函数
在定位这个函数时, 可以从界面入手, 通过 Reveal 找到相关界面的类, 再借助 classdump 拿到的类信息, 以及结合 hook 的输出, 就会慢慢接近目标.
比如,"附近的人", 所在的背景 viewcontroller 是这样的:
小程直接给出这个目标函数: SeePeopleNearByLogicController::onRetrieveLocationOK.
但要知道, 跟踪的过程 (甚至要反复尝试) 是不可避免的, 锁定目标的耗时跟经验与运气有关.
(2)修改返回的位置
onRetrieveLocationOK 返回的是一个 CLLocation 对象. CLLocation 是 iOS sdk 的一个类, 功能很强大, 比如经纬度, 高度, 温度, 速度, 距离等都可以获取.
所以, alloc 一个这样的对象返回即可, 比如这样:
- mylocation = [[CLLocation alloc]initWithLatitude:la longitude:lo];
- return mylocation;
这里的经度 la, 与纬度 lo, 就是我们要伪造的位置了, 这个位置可以在地图上找到.
小程给出一个从文件读取位置并返回的示例:
然后, 准备好这个文件, 每次进入 "附近的人" 时, 都会读取文件拿到经纬度. 所以, 如果想换一个位置, 那就改一下文件的内容就好(可以通过助手工具来修改), 文件的内容只有一行, 比如: 23.2,113.3
(3)效果演示
假如伪造一个纽约的位置, 这个位置是这样的:
更改位置后, 重新进入附近的人, 看到的效果是这样的:
拉到最下面:
注意上图倒数第二项, 金斯县, 这个地方在哪里?
所以, 有理由相信, 我们的确跑到纽约去了.
总结一下, 这个例子使用了 Reveal 工具, 经过反复注入与输出 log 定位到目标函数, 然后进行修改达到目的.
来源: https://www.cnblogs.com/freeself/p/10697337.html