文章出自:聽雲博客 Reveal簡介: 這是個神奇的工具,它能常透徹地分析個App的UI結構。 這個工具包括兩部分,部分是在PC上運行的一個獨立應用,即Reveal.app,另一部分代碼在你要分析的某個App中,為此,Reveal提供了一個Framework和一個Dylib供使用。這兩部分之間通過B
文章出自:聽雲博客
Reveal簡介:
這是個神奇的工具,它能常透徹地分析個App的UI結構。
這個工具包括兩部分,部分是在PC上運行的一個獨立應用,即Reveal.app,另一部分代碼在你要分析的某個App中,為此,Reveal提供了一個Framework和一個Dylib供使用。這兩部分之間通過Bonjure這種零配置網路進行通訊。
官方地址:www.revealapp.com
基本使用:
Reveal.app的使用沒有什麼可說的,就是點擊運行。關鍵是另一部分,怎麼嵌入到App中。
我們自己的App都有源碼,因此最簡單的方式就是靜態鏈接方式集成到App中。
關於基本使用,參考幫助中的“Integration Guide”,或者參考這些鏈接。
http://blog.csdn.net/yongyinmg/article/details/39293015
http://blog.csdn.net/yiyaaixuexi/article/details/18220875
真正的需求
我弱弱的問一句:我自己的UI還需要用這個工具分析?有這個需求嗎?
實際上,Reveal是一個逆向工程工具,主要是用來分析別人的App(的UI),說是學習也好、研究也好、剽竊也好,反正這個工具真正的價值和意義就是用於分析別人的App。
libReaveal.dylib的限制
要分析別人的App,需要用到libReveal.dylib,很可惜,1.5版本提供的dylib不支持ARM架構,也就是說,只能用於模擬器。搞了半天,還是只分析自己的App,Reveal,你啥意思?
其實早期版本的libReveal.dylib是支持ARM架構的,那時,只要把這個libReveal.dylib文件扔到手機的/Library/MobileSubstrate/DynamicLibraries/目錄下,就OK了。後來為何不支持ARM架構了呢?我想這裡面肯定發生了什麼事,我想可能被投訴侵權了……想啥也沒用,這個libReveal.dylib現在不好使了!
搜了一下,往前好幾個版本都不支持ARM了,再早的,官方沒的下載,據說也不能與新版的ReavealApp配合使用。
Reveal,你是不是有點尷尬?
自己做一個libReveal.dylib
別責怪Reveal了,其實人家啥都給了,不是有Reveal.framwwork嗎?它可是模擬器和真機都支持的,如果你用它自己製作一個libReveal.dylib,支持ARM架構,用來分析別人的App,那麼……“後果自負”,這絕對是Reveal的意思。
哈哈〜~不就是一個越獄插件嗎,這個容易,附件就是我做的。製作過程也有點小坑,所以也貼出來吧。
(這需要the os或者iOSOpenDev,正好我已經裝了iOSOpenDev)
打開xcode,新建一個工程,如圖:
我的工程乾脆也叫libReveal。
工程建立了之後,我把Reveal.framework拖進來,再加一行log吧
編譯,OK,dylib文件生產了。
拖拽過去,然後隨便打開一個App試了試,不行,Reveal.App沒有發現什麼。嗯,我預料到了,不可能這麼順!
我仔細看了一下編譯生產的這個libReveal.dylib文件,大小才150K,怎麼這麼小?
我想起來了,它嵌碼不是“零代碼”嗎?“零代碼”應該是利用了類載入機制,啟動代碼應該放在load或者initialize里,只要這個類被載入,就會執行到。
同時,還要保證這個類一定會被用到,這要用到Objective-c的category特性,很可能可能是對UIApplication做了category,這個我稍後分析一下就知道了。
如果要在動態庫中使用了OC的category特性,必須在link時告訴連接器,否則category中的代碼將不會被編譯到dylib或者framwwork中(除非明確使用到)。添加連接參數:
再編譯,出了六十多個錯誤,都是說xxx符號找不到,根據提示,把Foundition、UIKit、coreGraphics、QuartzCore、CFNetwork、libz加入進來(註意,Foundtion.framework本來就加進來了,需要刪掉重新加進來,否則在8.0以前的iOS上不能運行,報告找不到NSNetService,這是個小坑)。
編譯,通過!這回大小1.7M(支持armv7和arm64),在拖過去試了一下,大功告成!
最後,有兩點必須說明:
1、plist文件,也就是libReveal.plist這個文件,它起過濾作用,或者說它決定你要研究那個App,你通過指定bundleId來決定哪個App/進程啟動時,這個libReveal.dylib註入進去。
2、libReveal.dylib的危險性像springboard等系統進程,你不應該註入進去,否則可能會有危險。特別是,當libReveal.plist不存在時,相當於沒有過濾,沒有限制,所有進程都會被註入。我試過刪除libReveal.dylib,真的不好玩,重啟就完蛋了,最後的代價是重新刷機。
原文鏈接:https://blog.tingyun.com/web/article/detail/262