Reveal是由ITTY BITTY出品的UI分析工具,可以直观地查看App的UI布局,如图3-15所示。
官方给Reveal的定位是“See your application’s view hierarchy at runtime with advanced 2D and 3D visualisations”,但作为逆向工程师,查看自己App的UI布局显然不能满足我们的需求,能够查看别人App的UI布局才是正经事儿——图3-16就是用Reveal查看AppStore的效果。
在Reveal界面的左侧,AppStore的UI布局以树形方式展现出来,当选中一个控件时,右侧的界面截图会实时地标出选中的位置。同时大家也一定注意到了,Reveal也解析出了UI控件对应的类名,如图3-16中所示的SKUIAttributedStringView。要查看别人App的UI布局,还需要对Reveal做简单配置。
1. 安装Reveal Loader
在Cydia中搜索并安装Reveal Loader,如图3-17所示。
值得注意的是,在安装Reveal Loader的时候,它会自动从Reveal的官网下载一个必须的文件libReveal.dylib。如果网络状况不太好,Reveal Loader不一定能够成功下载这个dylib文件,而且它没有针对dylib下载失败的情况做容错处理,可能会在下载界面卡顿很长时间,导致Cydia停止响应。因此,在下载它之前最好连接美国VPN,且在下载完Reveal Loader后,检查iOS上的“/Library/”目录下有没有一个名为“RHRevealLoader”的文件夹,如下:
FunMaker-5:~ root# ls -l /Library/ | grep RHRevealLoader
drwxr-xr-x 2 root admin 102 Dec 6 11:10 RHRevealLoader
如果没有,就手动创建一个,如下:
FunMaker-5:~ root# mkdir /Library/RHRevealLoader
然后打开Reveal,在它标题栏的“Help”选项下,选中其中的“Show Reveal Library in Finder”子选项,如图3-18所示。
此时就会出现图3-19所示的界面。
把这个libReveal.dylib通过scp或iFunBox等方式拷贝到刚才创建的RHRevealLoader目录下,如下:
FunMaker-5:~ root# ls -l /Library/RHRevealLoader
total 3836
-rw-r--r-- 1 root admin 3927408 Dec 6 11:10 libReveal.dylib
至此完成Reveal Loader的安装。
2. 配置Reveal Loader
Reveal Loader的配置界面位于Settings应用中,它的名字叫“Reveal”,如图3-20所示。
点击“Reveal”进入其界面,呈现在我们面前的主要是一些使用声明,如图3-21所示。
点击“Enabled Applications”,进入配置界面。要分析哪个App,就打开对应的开关。这里打开了AppStore和Calculator的开关,如图3-22所示。
Reveal Loader的配置就是这样了。既直观又方便,不是吗?
3. 使用Reveal查看目标App的UI布局
一切准备就绪,轮到主角Reveal出场了。首先确认OSX和iOS位于同一网段内,然后启动Reveal,并重启iOS上的目标App(即如果App开着,需要先关掉,再打开)。从Reveal界面左上角选择目标App,稍等一会儿,Reveal就会把目标App的UI布局展现在我们面前,如图3-23所示。
Reveal的使用并不复杂,它是一款用户体验不错的工具。但是在iOS逆向工程中,对App的分析往往不会只是停留在UI层,外在表象下的内在实现才是最终目标。在本书的后半部分,将采用Reveal的“文字版”,即recursiveDescription函数,配合Cycript来挖掘隐藏在UI布局下的代码,届时你就会感知iOS逆向工程的真正威力。