- 上一篇文章:"探秘工具:MacOS工具探索"
在文章開始前,我想分享一個小插曲:
事情是這樣的,逆向群里有個小伙伴,看了上一篇("探秘工具:MacOS工具探索")文章后,對Reveal工具的使用不是很了解,感謝小伙伴能夠聯(lián)系我,本篇文章將會對Reveal詳細(xì)介紹.
如果你閱讀了前幾篇文章后,有任何疑問或者覺得有哪些地方需要補(bǔ)充,都可以隨時聯(lián)系我,我會盡力保證文章質(zhì)量。
正如這位小伙伴一樣,我可能會忽略一些東西,但這些東西可能正是你感興趣的。我會努力完善知識,分享給大家,這是一件挺好的事情。
Reveal
1.Reveal介紹
Reveal下載地址:Reveal
Reveal是一個用于查看程序界面結(jié)構(gòu)和調(diào)試界面的工具,可以直觀的查看應(yīng)用的UI布局.

通過高級可視化、全面的檢查器和動態(tài)修改應(yīng)用程序的能力,您可以在幾秒鐘內(nèi)調(diào)試視圖布局和呈現(xiàn)問題。
Reveal是一款運(yùn)行在Mac OS上的應(yīng)用,現(xiàn)在有免費(fèi)的Beta版本可供下載。要調(diào)試iOS應(yīng)用,開發(fā)者要將應(yīng)用程序與Reveal安裝的框架層關(guān)聯(lián)。
Reveal會掃描其網(wǎng)絡(luò)中關(guān)聯(lián)的應(yīng)用程序,并讓開發(fā)者選擇連接其中之一,當(dāng)連接到一個應(yīng)用程序后,Reveal將顯示其UI,其中包括大量的參數(shù)和設(shè)置。
開發(fā)人員現(xiàn)在可以檢查UI或者更改設(shè)置,直到用戶界面的外觀和行為達(dá)到預(yù)期目標(biāo)。目前它尚不支持布局約束,但根據(jù)Reveal的支持文檔來看,這一功能將在未來的版本中發(fā)布。
Reveal可以和iOS模擬器一起使用,也可以用在運(yùn)行在真機(jī)上的應(yīng)用程序上。另外,Reveal的安裝只需幾分鐘。
除了解析出UI參數(shù)外,Reveal也會通過一個分解的3D視圖顯示復(fù)雜的UI層次結(jié)構(gòu)。開發(fā)者可以輕松的檢查UI組件的分層,并在其層次結(jié)構(gòu)中選擇特定元素。為了進(jìn)一步簡化調(diào)試,也可以僅關(guān)注部分UI,而把其余部分屏蔽起來。

介紹了這些,基本了解了Reveal的基本功能.
2.RevealServer.framework 如何獲取?
- Reveal下載好后,我們打開看看

- 這就是下載的Reveal應(yīng)用,看上去就很酷.
這里不是重點(diǎn),我們首先獲取RevealServer.framework,怎么獲取呢?

選中 Reveal -> 導(dǎo)航欄 Help -> Show Reveal Library in Finder -> 有兩個Library (iOS Library ; tvOS LIBrary),我們這里只關(guān)注iOS Library.
我們點(diǎn)擊進(jìn)入iOS Library文件夾

可以看到RevealServer.framework文件.到這里,我們已經(jīng)獲取到了RevealServer.framework.
你已經(jīng)知道了怎么去獲取RevealServer.framework了.
3.RevealServer.framework如何在項(xiàng)目中使用?
- 我們新建Xcode項(xiàng)目工程,命名為TEST
- 我們把剛才的RevealServer.framework 拖進(jìn)項(xiàng)目

- 我們運(yùn)行一下真機(jī),看看效果.

真機(jī)運(yùn)行后,Xcode崩潰了.
dyld: Library not loaded: @rpath/RevealServer.framework/RevealServer Referenced from: /var/containers/Bundle/Application/B5E77A27-B9C1-488B-9ABD-79F3FED77D1C/TEST.app/TEST Reason: image not found
報(bào)錯原因是鏡像沒有發(fā)現(xiàn)
- 如何解決這個問題呢?

我們只需要在Embedded Binaries中導(dǎo)入RevealServer.framework,運(yùn)行真機(jī)看一下是否還會崩潰.
項(xiàng)目已經(jīng)正常運(yùn)行.
到這一步,你已經(jīng)可以完成了一大半的任務(wù)了.
- 我們在ViewController中創(chuàng)建一個Button,下面是代碼
#import "ViewController.h"
@interface ViewController ()
@property (nonatomic,strong)UIButton *revealBtn;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
[self.view addSubview:self.revealBtn];
}
-(UIButton*)revealBtn{
if (!_revealBtn) {
_revealBtn = [UIButton buttonWithType:UIButtonTypeCustom];
_revealBtn.frame = CGRectMake(100,100, 100,40);
_revealBtn.backgroundColor = [UIColor redColor];
[_revealBtn setTitle:@"測試" forState:UIControlStateNormal];
[_revealBtn setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
}
return _revealBtn;
}
@end
- 運(yùn)行之后是這樣的頁面

代碼只是簡單地創(chuàng)建了一個具有紅色背景的按鈕。
對于這樣的項(xiàng)目,我們并不需要過于復(fù)雜的設(shè)計(jì),只是簡單地演示一下即可。
- 接著,我們看看Reveal應(yīng)用發(fā)生了什么變化?
我們打開Reveal應(yīng)用

- 我們點(diǎn)進(jìn)去看一下

Reveal運(yùn)行結(jié)果和我們真機(jī)運(yùn)行結(jié)果是一模一樣的,現(xiàn)在是2D的畫面
- 我們看一下3D的畫面

左側(cè)是視圖層級,通過3D畫面可以清晰地看出層級的層次。
通過這種方式,我們可以輕松地了解界面的層級以及所使用的類,一目了然。
不論是分析某些應(yīng)用,還是分析自己開發(fā)的項(xiàng)目,對界面的優(yōu)化和分析都有很大的幫助。
- 到這里,你已經(jīng)知道了如何在自己的項(xiàng)目中使用Reveal。
注意
如果你需要上架AppStore,Reveal不可以和項(xiàng)目一起提交的,在這里要特別注意
4. CoacoaPods集成
- 開發(fā)最簡單的方式就是通過pod集成
- 我們在Podfile中配置后,進(jìn)行配置安裝

# Uncomment the next line to define a global platform for your project
platform :ios, '9.0'
target 'TEST' do
# Comment the next line if you don't want to use dynamic frameworks
use_frameworks!
pod 'Reveal-SDK', :configurations => ['Debug']
# Pods for TEST
end
configurations 設(shè)置表示只有Debug模式下開啟,如果release是關(guān)閉狀態(tài).
- pod install進(jìn)行集成

- 集成之后,我們直接運(yùn)行項(xiàng)目,同上面的結(jié)果
- 打開reveal,也是同樣的界面
我相信你已經(jīng)學(xué)會了兩種方式使用Reveal
5.如何在越獄設(shè)備中安裝Reveal呢?
- 在平常開發(fā)中,如果你有越獄設(shè)備,那就非常好了.
- 如果我們有個功能或者界面布局,你想?yún)⒖计渌鸄PP的功能,你就可以通過越獄設(shè)備,在Cydia中安裝Reveal.
- 一般我們不借助類似Reveal的軟件,我們是不能查看從AppStore下載的應(yīng)用,為什么這么說?
我們沒有辦法把reveal注入到程序內(nèi)部,所以你查看不到.
上面的兩種方式,我們是主動注入到項(xiàng)目里的,這樣我們可以查看到項(xiàng)目的界面結(jié)構(gòu)
考慮
如果我們沒有辦法注入到想要查看的項(xiàng)目,我們有沒有其他的方式呢?
答案是有的
- 我們可以通過越獄設(shè)備中安裝Reveal,來達(dá)到瀏覽項(xiàng)目結(jié)構(gòu)的目的
- 我們找到Cydia,并打開,搜索reveal Loader

- 我們點(diǎn)擊reveal Loader,并安裝

-
安裝1
安裝中1 -
安裝2
安裝中2 當(dāng)我們安裝完后,會提示你重啟SpringBoard,我們進(jìn)行重啟就可以了.
重啟完成后,我們可以在手機(jī) 設(shè)置 -> Reveal

- 點(diǎn)擊reveal

- 找到TEST 開啟權(quán)限

注意
是不是可以通過Reveal應(yīng)用查看指定的應(yīng)用呢?
答案是不可以.
我嘗試很久,沒有成功,最終找到了原因.
解決Reveal無顯示的問題?
- 1.我們需要從RevealServer.framework找到RevealServer

- 2.把RevealServer重命名為libReveal.dylib

- 3.并制作libReveal.plist文件,libReveal.plist內(nèi)需要寫入的內(nèi)容

<dict>
<key>Bundles</key>
<string>com.apple.AppStore</string>
</dict>
-
4.把它們拷貝到手機(jī)的/Library/MobileSubstrate/DynamicLibraries/ 的目錄下.
/Library/MobileSubstrate/DynamicLibraries/ 5.重啟啟動手機(jī)后,可以查看需要瀏覽的應(yīng)用.
完美越獄手機(jī)重啟后不受影響
非完美越獄手機(jī)需要重新越獄6.打開Reveal 查看下應(yīng)用


6.總結(jié)
通過本篇文章的學(xué)習(xí),相信你對Reveal有了深刻的了解,知道如何使用它了。
主要講了三種方式使用Reveal:
- 通過使用Reveal自帶的Framework
- 通過使用pod集成
- 通過越獄設(shè)備安裝Reveal,并對其他應(yīng)用進(jìn)行界面結(jié)構(gòu)查看。
- 另外,除了使用iFunBox拷貝文件,還可以使用終端命令scp。
希望持續(xù)關(guān)注,下篇文章會有更多精彩內(nèi)容。歡迎大家留言,及時交流。


