仍然以微信爲例,實戰地練習一下使用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定位到目標函數,然後進行修改達到目的。