原由是在虾神的公众号上看到一篇文章 《Pokemon Go 锁区破解》,正好周围几个小伙伴正在玩这游戏,便仔细研究了下所谓的破解锁区。此次锁区实际上是 GPS 锁区,游戏开发商为了缩小初始运营范围,在中国范围内都没法正常游戏,也就是服务端经过客户端发送的定位位置数据来判断是否让该玩家继续游戏。文章中介绍的原理就是利用 OC Runtime Method Swizzling 对原应用进行重写 CLLocation 的 coordinate 方法返回本身想要的经纬度信息,以达到欺骗服务端进行游戏,而后进行重签名打包。最让人激动的是最终的应用能够在非越狱的设备上运行,因而已阻止不了向前探索的脚步。javascript
游戏做弊是不支持的,可是技术研究能够有!java
大体流程以下,后面会详细讲解每一步:ios
因为手里没有越狱机子,也没有进行脱壳试验,按 [Urinx/iOSAppHook] 中提到的方法直接从 xx助手 市场里下载越狱应用可用。若是本身有越狱设备的话能够用 dumpdecrypted 进行砸壳。git
若是是拿到 .ipa,进行解压便可找到 Payload 文件夹,可安装 iOSOpenDev 来建立工程,使用 CaptainHook 轻松方便写 Hook 代码,iOSOpenDev 中已经集成了 CaptainHook ,具体相关代码能够参考 [PokemonHook] 。github
生成动态库(.dylib)后使用 yololib 工具进行注入,不知为什么使用 [KJCracks/yololib] Release 中的 yololib-Mac 最终会在设备上闪退,使用 Urinx/iOSAppHook 则没有问题,一条命令对 .app 中的二进制进行 .dylib 注入,再把注入的 .dylib 拖到目录里便可。注入成功后能够用 MachOView 程序查看整个 MachO 文件的结构,即可看到注入的 dylib 会在 Load Commands 区段中。app
yololib xxx.app/xxx LocationFaker.dylib复制代码
重签名也是很重要的一个步骤,签名错误或者失败都会致使应用没法安装使用。我比较喜欢用图形化界面的 iOS App Signer 来重签名,自动加载出本机的证书和 PP 文件,至关方便;固然也有命令行工具,好比 Urinx/iOSAppHook 中的 AppResign 或者 Fastlane sign ,前提仍是同样须要把设备的 UDID 加进 Provisioning Profile 中,通常来讲 Bundle identifier 不须要改变便可,也有应用内作了相关检测手段致使重签名或者更改 Bundle identifier 后没法使用的状况,那就须要更多其余的手段进行反攻了。ide
对 Payload 文件夹右键压缩,更名 xx.ipa 便可,推荐用 Xcode (Window->Device) 安装,失败还有错误信息可看。工具
另外在这里推荐一个 Quick Look 插件用来快速预览 .mobileprovis 和 .ipa 的证书、签名、设备等信息,对着文件按下空格就能看到很是方便。 chockenberry/Provisioning学习