您好,登錄后才能下訂單哦!
iOS逆向開發中如何鎖定APP的目標類與函數,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。
之前介紹了怎么獲取APP的所有類的結構信息,這個有什么用呢?用處大了,比如以這一步為基礎,下一步通過注入來做更多研究工作。
注入的最小單位是函數,實際上,編譯執行的程序在編譯后,類就不復存在了,留下來的只是二進制代碼(指令或數據都是一樣的二進制代碼)。所幸的是,跟我們打交道的,并不是二進制代碼(那會困難很多),而是函數,而且是某個類的函數。
那么,在用classdump拿到成千上萬個類與函數后,哪個函數才是我們關心的呢?怎么鎖定它們呢?
下面介紹鎖定目標類與函數的可行的辦法。
基本上小程研究的目標APP都有豐富的界面,而小程關心的場景基本都是由特定的界面觸發,所以,從界面入手是個不錯的選擇。
有沒有辦法找出某個界面對應哪一個類呢?這樣就可以在classdump拿到的眾多的類中仔細研究這個界面類擁有的函數與成員變量。
小程覺得目前最好的辦法就是使用Reveal工具。
先下載一個Reveal(有破解版本),比如1.6版本或1.5版本,或2.0版本。
Reveal最大的一個作用是把手機上的某個APP的界面同步顯示到電腦上,要做到這個效果,Reveal既要在電腦上運行,同時也要把一個“內鬼”打入到手機。這個打入手機的“內鬼”就是libReveal.dylib。
在電腦上運行Reveal后,點擊菜單Help,選擇Show Reveal Library in Finder,再點擊iOS Library,就可以找到libReveal.dylib。
拷貝到DynamicLibrary目錄下:
scp libReveal.dylib root@192.168.2.57:/Library/MobileSubstrate/DynamicLibraries
基本上,手機上的APP在啟動運行后,都可以加載DynamicLibraries里面的動態庫(以dylib為后綴),至于加載哪個動態庫,則由plist文件決定。這個知識點很重要,這意味著你可以寫一個plist文件,讓某個APP在啟動時加載你寫的動態庫,這是注入的前提。
/Library/MobileSubstrate/DynamicLibraries,這個目錄,在手機成功越獄后就會存在。
對于Reveal2.0版本,也以上面的辦法定位動態庫文件,但這個文件名叫“RevealServer”,可以拷貝過去后命名為“libReveal.dylib”即可。
找一個plist文件來修改,或者直接寫一個plist文件,命名為libReveal.plist。
libReveal.plist文件要指定讓哪個APP啟動時加載Reveal.dylib,比如:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Filter</key>
<dict>
<key>Bundles</key>
<array>
<string>com.tencent.QQKSong</string>
</array>
</dict>
</dict>
</plist>
上面的plist內容,讓“全民k歌”啟動時,加載Reveal.dylib。
com.tencent.QQKSong,是“全民k歌”的BoudleID。至于目標APP的BoundleID是多少,有很多辦法可以查到,比如找到它的plist文件來查看,比如ps看進程信息,比如動態調試等等。
小白:如果不指定這個Filter呢,是不是所有的APP啟動時都加載?
小程:iOS8之前的版本是這樣的,但之后的版本都需要指定APP。所以,不管3724,加上這個Filter總是不會錯的。
然后,拷貝libReveal.plist到手機:
scp libReveal.plist root@192.168.2.57:/Library/MobileSubstrate/DynamicLibraries
之后,在電腦上再次啟動Reveal就可以連接目標APP,來分析界面類了。
比如,在手機上重啟全民k歌,在電腦上重啟Reveal并選擇菜單項,連接全民k歌。可以看到,全民k歌的一個頁面是這樣(右下角的類名是重點):
為了“感性”一點,小程做一個演示,通過Reveal定位到全民k歌的目標類,并讓全民k歌啟動后自動切換至歌手頁面。
首先通過Reveal,定位到底部導航條的所在的viewcontroller類是KSRootTabBarController。
然后,通過查看classdump翻譯到的類結構中,找到這個類。可以看到,點擊“我要唱”按鈕,實際就是觸發KSRootTabBarController::onClickTabBarItem函數。
接著,就可以hook這個類了,讓目標APP自動跳轉。這一步的具體操作,小程會在后續詳細介紹,你只需要“感性”地知道這回事就好。
最終,自動跳轉的效果是這樣的:
以上講解了Reveal的使用。Reveal是定位目標類與函數的有效的辦法,除了這個辦法,還有一個辦法就是,觀察所有類的類名,猜測可能有關系的類(比如應該具備某個關鍵字),再注入這些類的函數并用NSLog輸出信息,或者動態調試觀察執行的流程,最終確定目標類與函數。
看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。