Reveal的簡介及基本使用
大?。?/span>0.6 MB 人氣: 2017-10-11 需要積分:1
推薦 + 挑錯(cuò) + 收藏(0) + 用戶評論(0)
標(biāo)簽:reveal(2154)
Reveal簡介:這是個(gè)神奇的工具,它能常透徹地分析個(gè)App的UI結(jié)構(gòu)。
這個(gè)工具包括兩部分,部分是在PC上運(yùn)行的一個(gè)獨(dú)立應(yīng)用,即Reveal.app,另一部分代碼在你要分析的某個(gè)App中,為此,Reveal提供了一個(gè)Framework和一個(gè)Dylib供使用。這兩部分之間通過Bonjure這種零配置網(wǎng)絡(luò)進(jìn)行通訊。
基本使用
Reveal.app的使用沒有什么可說的,就是點(diǎn)擊運(yùn)行。關(guān)鍵是另一部分,怎么嵌入到App中。
我們自己的App都有源碼,因此最簡單的方式就是靜態(tài)鏈接方式集成到App中。
關(guān)于基本使用,參考幫助中的“Integration Guide”,或者參考這些鏈接:
真正的需求
我弱弱地問一句:我自己的UI還需要用這個(gè)工具分析?有這個(gè)需求嗎?
實(shí)際上,Reveal是一個(gè)逆向工程工具,主要是用來分析別人的App(的UI),說是學(xué)習(xí)也好、研究也好、剽竊也好,反正這個(gè)工具真正的價(jià)值和意義就是用于分析別人的App。
libReaveal.dylib的限制
要分析別人的App,需要用到libReveal.dylib,很可惜,1.5版本提供的dylib不支持ARM架構(gòu),也就是說,只能用于模擬器。搞了半天,還是只分析自己的App,Reveal,你啥意思?
其實(shí)早期版本的libReveal.dylib是支持ARM架構(gòu)的,那時(shí),只要把這個(gè)libReveal.dylib文件扔到手機(jī)的/Library/MobileSubstrate/DynamicLibraries/目錄下,就OK了。后來為何不支持ARM架構(gòu)了呢?我想這里面肯定發(fā)生了什么事,我想可能被投訴侵權(quán)了……想啥也沒用,這個(gè)libReveal.dylib現(xiàn)在不好使了!
搜了一下,往前好幾個(gè)版本都不支持ARM了,再早的,官方?jīng)]的下載,據(jù)說也不能與新版的ReavealApp配合使用。
Reveal,你是不是有點(diǎn)尷尬?
自己做一個(gè)libReveal.dylib
別責(zé)怪Reveal了,其實(shí)人家啥都給了,不是有Reveal.framwwork嗎?它可是模擬器和真機(jī)都支持的,如果你用它自己制作一個(gè)libReveal.dylib,支持ARM架構(gòu),用來分析別人的App,那么……“后果自負(fù)”,這絕對是Reveal的意思。
哈哈?~不就是一個(gè)越獄插件嗎,這個(gè)容易,附件就是我做的。制作過程也有點(diǎn)小坑,所以也貼出來吧。
這需要the os或者iOSOpenDev,正好我已經(jīng)裝了iOSOpenDev。
打開xcode,新建一個(gè)工程,如圖:

我的工程干脆也叫l(wèi)ibReveal。
工程建立了之后,我把Reveal.framework拖進(jìn)來,再加一行l(wèi)og吧。
編譯,OK,dylib文件生產(chǎn)了。
拖拽過去,然后隨便打開一個(gè)App試了試,不行,Reveal.App沒有發(fā)現(xiàn)什么。嗯,我預(yù)料到了,不可能這么順!
我仔細(xì)看了一下編譯生產(chǎn)的這個(gè)libReveal.dylib文件,大小才150K,怎么這么???
我想起來了,它嵌碼不是“零代碼”嗎?“零代碼”應(yīng)該是利用了類加載機(jī)制,啟動(dòng)代碼應(yīng)該放在load或者initialize里,只要這個(gè)類被加載,就會(huì)執(zhí)行到。
同時(shí),還要保證這個(gè)類一定會(huì)被用到,這要用到Objective-c的category特性,很可能可能是對UIApplication做了category,這個(gè)我稍后分析一下就知道了。
如果要在動(dòng)態(tài)庫中使用了OC的category特性,必須在link時(shí)告訴連接器,否則category中的代碼將不會(huì)被編譯到dylib或者framwwork中(除非明確使用到)。添加連接參數(shù):
再編譯,出了六十多個(gè)錯(cuò)誤,都是說xxx符號找不到,根據(jù)提示,把Foundition、UIKit、coreGraphics、QuartzCore、CFNetwork、libz加入進(jìn)來(注意,F(xiàn)oundtion.framework本來就加進(jìn)來了,需要?jiǎng)h掉重新加進(jìn)來,否則在8.0以前的iOS上不能運(yùn)行,報(bào)告找不到NSNetService,這是個(gè)小坑)。
編譯,通過!這回大小1.7M(支持armv7和arm64),在拖過去試了一下,大功告成!
最后,有兩點(diǎn)必須說明:
plist文件,也就是libReveal.plist這個(gè)文件,它起過濾作用,或者說它決定你要研究那個(gè)App,你通過指定bundleId來決定哪個(gè)App/進(jìn)程啟動(dòng)時(shí),這個(gè)libReveal.dylib注入進(jìn)去。
libReveal.dylib的危險(xiǎn)性像springboard等系統(tǒng)進(jìn)程,你不應(yīng)該注入進(jìn)去,否則可能會(huì)有危險(xiǎn)。特別是,當(dāng)libReveal.plist不存在時(shí),相當(dāng)于沒有過濾,沒有限制,所有進(jìn)程都會(huì)被注入。我試過刪除libReveal.dylib,真的不好玩,重啟就完蛋了,最后的代價(jià)是重新刷機(jī)。
?
非常好我支持^.^
(0) 0%
不好我反對
(0) 0%
