![](https://i-blog.csdnimg.cn/blog_migrate/dd1fca183b3a5b71e1d58d7aae0b4a93.webp?x-image-process=image/format,png)
前言
Reveal(http://revealapp.com)是一个很强大的iOS View Hierarchy工具,与其他几个功能相近的工具比如PonyDebugger(https://github.com/square/PonyDebugger)和Spark Inspector(http://sparkinspector.com)相比,其最大的特点就是非常直观。在我们进行iOS开发时对于动态的或复杂的交互界面,手写UI是不可避免的,所以通过Reveal,我们可以方便地调试和修改应用界面,免去了每次修改代码后重新启动的痛苦。并且如果我们能够在他人的App中使用Reveal分析(在没有源码的情况下),无论对于开发人员还是UI设计师都无疑是一个很好的学习途径。
Reveal简介
Reveal类似于Chrome的“审查元素”功能和FireBug调试HTML页面功能,在不需要重写代码、重新构建和重新部署应用程序的情况下就能够调试和修改iOS用户界面,使我们不但可以在运行时看到iOS程序的界面层级关系,还可以实时地修改程序界面,看到修改之后的效果。
其常规用法是将framework集成至Xcode工程中,具体可参见Reveal的官网Reveal App,但我们这次讲述的是非常规用法。
在12/21的#阿里技术嘉年华#上,展示了使用Reveal查看任意App的效果,估计是当时所展示的工具中最亮眼的一个。
准备工作
1. iOS越狱设备一台,这里使用的是太极越狱的iPod Touch 5,需在Windows(虚拟机也可)环境下操作。
1.1. 首先阅读太极越狱详细教程 http://www.taig.com/tutorial.html ,备份、设置好iOS设备。
1.2. 然后安装iTunes Setup。
1.3. 连接iOS设备后执行几步傻瓜操作后即可越狱。
2. 越狱后在iOS设备上会自动安装Cydia商店,
![](https://i-blog.csdnimg.cn/blog_migrate/454a313d02286264857dbf93cd0ab5d4.webp?x-image-process=image/format,png)
![](https://i-blog.csdnimg.cn/blog_migrate/96b791db36b2e85c4177e11bd2aa287f.webp?x-image-process=image/format,png)
![](https://i-blog.csdnimg.cn/blog_migrate/9568f8f3ca99b8ba7640f5995b335250.webp?x-image-process=image/format,png)
![](https://i-blog.csdnimg.cn/blog_migrate/3e0f7a966759e8ca0bcd0af907691b11.webp?x-image-process=image/format,png)
![](https://i-blog.csdnimg.cn/blog_migrate/f2c0adccd83215a055facf04019c2522.webp?x-image-process=image/format,png)
3.安装Reveal,Trail或正式版都可以,Trail下载地址(http://pan.baidu.com/s/1qW1glK4),破解版下载地址(http://pan.baidu.com/s/1sjNySjz)下载后切记不要更新版本,解压后直接拖进“应用程序”里。
![](https://i-blog.csdnimg.cn/blog_migrate/1b9f0d0cb7da1ff081385f9b76b54995.webp?x-image-process=image/format,png)
4.安装iTools(2.3.3版),下载安装即可,切记不要升级版本,不然无法正常使用。下载地址(http://pan.baidu.com/s/1eQzyI8E)。
![](https://i-blog.csdnimg.cn/blog_migrate/9ddaf859cdf1cbaf6e0792bf12b9ce0d.webp?x-image-process=image/format,png)
开始配置
1.建立连接
首先让越狱设备和Mac在同一个Wi-Fi内,进入越狱设备的“设置”->“无线局域网”,
![](https://i-blog.csdnimg.cn/blog_migrate/4bdbb673b4c1cbab6e2136fb67109465.webp?x-image-process=image/format,png)
![](https://i-blog.csdnimg.cn/blog_migrate/a2c9cc6c8b71cc6bb6ff08c79f03f007.webp?x-image-process=image/format,png)
2.获取目标App的BundleId
用数据线连接好设备,打开iTools,找到目标App(我们这里以“掌上新东方”为例),
![](https://i-blog.csdnimg.cn/blog_migrate/977fd499bc47214b2ddb58ff594ab550.webp?x-image-process=image/format,png)
![](https://i-blog.csdnimg.cn/blog_migrate/f37e2552bca6f8f641536f4e12309d41.webp?x-image-process=image/format,png)
打包后的文件如图所示为 .ipa 文件,文件名 “com.xdf.palmXDF” 即为目标 App 的 BundleId 。
![](https://i-blog.csdnimg.cn/blog_migrate/d1ca1147380755c0e14b5325db3aff01.webp?x-image-process=image/format,png)
3.创建plist文件
打开Xcode,新建一个空工程,然后新建一个Property List,命名为“libReveal”,如果是非开发人员,比如我们的UI设计师可以直接下载建好的plist文件,地址是(http://pan.baidu.com/s/1o69rQAm),打开后自己填写即可。
![](https://i-blog.csdnimg.cn/blog_migrate/23752fed65d77eb6dea2322a6f616c20.webp?x-image-process=image/format,png)
![](https://i-blog.csdnimg.cn/blog_migrate/cfb4d67ab7873d0c29c9c73143399c22.webp?x-image-process=image/format,png)
![](https://i-blog.csdnimg.cn/blog_migrate/ab0ce39d66d6075ebf2c54d8913ad42d.webp?x-image-process=image/format,png)
4.将Reveal库文件拷贝到设备中
目的是将libReveal.dylib上传到设备的/Library/MobileSubstrate/DynamicLibraries
![](https://i-blog.csdnimg.cn/blog_migrate/1b76d530cb34c5916d7884343a6a7fb5.webp?x-image-process=image/format,png)
输入(IP地址修改后复制粘贴进终端即可):
scp -r /Applications/Reveal.app/Contents/SharedSupport/iOS-Libraries/Reveal.framework root@
192.168.1.241:/System/Library/Frameworks
⚠注:删除线部分“192.168.1.241”改为自己的设备上的IP地址
![](https://i-blog.csdnimg.cn/blog_migrate/811cc578fdd254eb62636722f7abf330.webp?x-image-process=image/format,png)
![](https://i-blog.csdnimg.cn/blog_migrate/e31ec3cbd099871d2be288b37b00568c.webp?x-image-process=image/format,png)
![](https://i-blog.csdnimg.cn/blog_migrate/05ed3bdd28a16991473c11c78d553290.webp?x-image-process=image/format,png)
![](https://i-blog.csdnimg.cn/blog_migrate/cf2199c228f6f5f5efe132740f989c75.webp?x-image-process=image/format,png)
接着输入:
scp -r/Applications/Reveal.app/Contents/SharedSupport/iOS-Libraries/libReveal.dylib root@
192.168.1.241:/Library/MobileSubstrate/DynamicLibraries
![](https://i-blog.csdnimg.cn/blog_migrate/d437ca43aded70d49f498b4ceade17de.webp?x-image-process=image/format,png)
接着输入:
scp -r libReveal.plist root@
192.168.1.241:/Library/MobileSubstrate/DynamicLibraries
![](https://i-blog.csdnimg.cn/blog_migrate/97b7d6850c16f3b90abb47b2cd959503.webp?x-image-process=image/format,png)
![](https://i-blog.csdnimg.cn/blog_migrate/bfe78dec08da3ddb42f8bea0b58ee161.webp?x-image-process=image/format,png)
![](https://i-blog.csdnimg.cn/blog_migrate/299aec296871eed9c273a1f52575f9e8.webp?x-image-process=image/format,png)
![](https://i-blog.csdnimg.cn/blog_migrate/23df2e8c86d0688c9de4c7c182112d2e.webp?x-image-process=image/format,png)
![](https://i-blog.csdnimg.cn/blog_migrate/20ef9705972ed09d02cd7c6d6013f8df.webp?x-image-process=image/format,png)
![](https://i-blog.csdnimg.cn/blog_migrate/f324f27de8010e66c1bd0b99ede50383.webp?x-image-process=image/format,png)
运行查看
首先保证设备和Mac在同一局域网(Wi-Fi)内,如果App已经运行,需在后台杀死进程重新打开,保持App在前台运行,然后在Mac中打开Reveal,
![](https://i-blog.csdnimg.cn/blog_migrate/9105751f48758da9c5e9a8ebc4e64701.webp?x-image-process=image/format,png)
![](https://i-blog.csdnimg.cn/blog_migrate/2fbc42052e9ecb1bd77197fbff72c98d.webp?x-image-process=image/format,png)
![](https://i-blog.csdnimg.cn/blog_migrate/59169e50934edc10a160dc785372077d.webp?x-image-process=image/format,png)
界面主要分为三部分:
1. 左边部分是整个界面的层级关系,在这里以树形层级的方式来查看全部界面元素。
2. 中间部分是一个可视化的查看区域,用户可以在这里切换2D盒3D的查看方式,这里看到的也是程序实运行的实时界面。
3. 右边部分是控件的详细参数查看区域,当我们选中某一个具体控件时,右边就可以显示该控件的具体的参数列表。我们除了可以查看这些参数列表是否正确外,还可以尝试修改这些值。所有的修改都可以实时翻反应到中间的预览区域内。
后话
以上是不写一行代码就能够查看任意App的方法,各位看别人App爽的时候,也可以想想自己的App。
这种“高级技巧”从来没有被Reveal官方提起过,大家一开始的方法比较粗暴,是直接hook想看的App,把libReveal.dylib插进去,后来经过进一步探索,才总结出这个更简单粗暴的方法。
虽然Reveal是最直观的一个工具,但是在iOS逆向这个领域,它占的比重连1/10都不到,相信大家都了解。
最后,这篇文档写的比较详细,是为了照顾非开发人员进行学习,不够简略之处希望大家理解