原由是在蝦神的公衆號上看到一篇文章 《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學習