Reveal:分析iOS UI的利器
转:http://security.ios-wiki.com/issue-3-4/
Reveal简介
Reveal是分析iOS应用UI的利器:
Reveal能够在运行时调试和修改iOS应用程序。它能连接到应用程序,并允许开发者编辑各种用户界面参数,这反过来会立即反应在程序的UI上。就像用FireBug调试HTML页面一样,在不需要重写代码、重新构建和重新部署应用程序的情况下就能够调试和修改iOS用户界面。--InfoQ
Reveal运行在Mac上,目前的最新版本是1.0.4,可以从这里下载,要求Mac OS X 10.8及以上,iOS 6以及以上。
现在正式版本可以下载试用30天,试用期后需要购买。有需要的话可以买一个,功能相当强大。
Reveal的功能
查看iOS应用的View层次结构
使用Reveal的效果如图: 
图中最左侧可以看到View的名称,中间是View的3D展示效果,可以非常清楚的看到View的层次结构。
修改参数后无需编译即可看到效果
Reveal另一个非常有用的功能就是动态修改参数,无需编辑动态查看效果。如下图所示:

显示出UILabel和UIView的关键属性值,更重要的是,这些都可以动态修改,比如我们改成测试,如下图: 
把其中的图片的宽度从80改成50,改之后的效果如图:

下图箭头所指向的对方都可以动态修改。

关于Reveal的更多功能,欢迎大家去探索并分享。下面介绍Reveal如何集成到iOS应用中去调试。
Reveal的3种加载方法
加载方法(1)
下载Reveal之后打开,在菜单中的Help中可以找到集成到Xcode项目的方法,这里不再赘述。
加载方法(2)
Integrating Reveal without modifying your Xcode project
reveal: 檢視 iOS app 的 view 結構。
给出了如何不用修改Xcode工程就可以加载使用Reveal的方法。
在当前用户目录新建一个文件.lldbinit,位于~/.lldbinit,LLDB每次启动的时候都会加载这个文件。
在.lldbinit中输入如下内容:
command alias reveal_load_sim expr (void*)dlopen("/Applications/Reveal.app/Contents/SharedSupport/iOS-Libraries/libReveal.dylib", 0x2);
command alias reveal_load_dev expr (void*)dlopen([(NSString*)[(NSBundle*)[NSBundle mainBundle] pathForResource:@"libReveal" ofType:@"dylib"] cStringUsingEncoding:0x4], 0x2);
command alias reveal_start expr (void)[(NSNotificationCenter*)[NSNotificationCenter defaultCenter] postNotificationName:@"IBARevealRequestStart" object:nil];
command alias reveal_stop expr (void)[(NSNotificationCenter*)[NSNotificationCenter defaultCenter] postNotificationName:@"IBARevealRequestStop" object:nil];
上述文件创建了4个命令:
reveal_load_sim,reveal_load_dev, reveal_start 和 reveal_stop
reveal_load_sim这个只在iOS模拟器上有效。它从Reveal的应用程序bundle中找到并加载libReveal.dylib(请确保你把Reveal安装到了系统的Application文件夹,如果你换地方了,你修改上述的文件)。
reveal_load_dev这个命令在iOS设备和模拟器上都有效。不过,它需要你在Build Phase中的的Copy Bundle Resources中加上libReveal.dylib,请确保没有放到Link Binary With Libraries这个地方。
reveal_start这个命令发出一个通知启动Reveal Server。
reveal_stop这个命令发出一个通知停止Reveal Server。
请注意:只有在iOS应用发出了UIApplicationDidFinishLaunchingNotification通知之后,比如应用的delegate已经处理过application::didFinishLaunchingWithOptions:之后才能调用上面的reveal_load_*命令,然后再调用reveal_start
在设备起来之后,你就可以断下应用,在LLDB提示框中输入上述的命令了。

上述的过程还需要手动输入,下面介绍如何设置条件断点,使得Reveal在启动之后自动加载。
在你的应用的application:didFinishLaunchingWithOptions 中的代码出加一个断点,然后右键,选择编辑断点。
输入如下图一样的命令:

重新运行下应用,如果控制台输出了如下信息:
Reveal server started.
说明Reveal已经自动成功加载。
加载方法(3)
Reveal查看任意app的高级技巧介绍了如何在越狱设备上查看任意app的技巧:
- iOS设备需要越狱,iOS6以上
- 安装Reveal,越狱设备与安装Reveal的Mac在同一wifi内。
- 点击菜单Help / Show Reveal Library in Finder,获取libReveal.dylib
- 将libReveal.dylib上传到设备的/Library/MobileSubstrate/DynamicLibraries
编辑并上传一个libReveal.plist,格式和/Library/MobileSubstrate/DynamicLibraries下面的其他plist类似,其中的filter的bundle写要查看的iOS App的bundle Id。 格式如下:
{ Filter = { Bundles = ( "你要查看的app的bundle Id" ); }; }
重启iOS设备
小结
本文简要介绍了Reveal的功能和几种加载方法。欢迎大家去体验下Reveal的强大功能。最后,可以看看关于Reveal的tips:Reveal tips: Navigation。
Reveal:分析iOS UI的利器的更多相关文章
- Reveal分析IOS界面,plist文件读取
Reveal分析IOS界面,需要得到app的 softwareVersionBundleId上传到iphone中 , 而IOS8的iTunesMetadata.plist (设备路径/var/mobi ...
- Reveal:分析iOS UI该武器
Reveal是分析iOS应用UI的利器: Reveal可以在执行时调试和改动iOS应用程序.它能连接到应用程序,并同意开发人员编辑各种用户界面參数.这反过来会马上反应在程序的UI上.就像用FireBu ...
- iOS安全攻防(三):使用Reveal分析他人app
使用Reveal分析他人app 准备工作 1)已越狱的设备,而且已安装了OpenSSH,MobileSubstrate等有用工具(Cydia源里安装) 2)本地已安装了Reveal 操作步骤 1)拷贝 ...
- iOS使用Reveal分析他人app界面
本文转自http://blog.csdn.net/cuibo1123/article/details/45694657 安装: 首先前往 http://revealapp.com/download/ ...
- iOS UI布局调试工具
查看ios软件的ui布局有三种: 1.DCIntrospect 这种方式是开源的,我从github上clone下来后运行demo,运行遇到了问题:Xcode cannot run using t ...
- iOS抓包利器Charles
iOS抓包利器Charles http://wonderffee.github.io/blog/2013/07/13/best-packet-capture-tool-charles-in-ios/ ...
- Reveal分析工具的使用
首先:在reveal官网http://revealapp.com/下载适用版本.试用版本是30天免费,可以选择破解.破解链接http://pan.baidu.com/s/1bnc5wwn?errno= ...
- [IOS]IOS UI指南
[IOS]IOS UI指南 众所周知,IOS的界面设计,越来越流行,可以说都形成了一个标准,搜集了一些资料,供自己以后学习使用! iOS Human Interface Guidelines (中文翻 ...
- IOS UI 第八篇:基本UI
实现图片的滚动,并且自动停止在每张图片上 - (void)viewDidLoad{ [super viewDidLoad]; UIScrollView *scrollView = [[U ...
随机推荐
- Solution of Publishing failed with multiple errors Error copying file static\
1.前言 由于系统被IT打了防病毒补丁,然后启动web项目一直出现Publishing failed with multiple errors Error copying file static... ...
- Tomcat启动startup.bat闪退和JRE_HOME错误
转载:http://blog.csdn.net/xushikuan/article/details/8132317 昨天学习Struts2,下载Tomcat7,太恶心了. 先是报个错,无法启动,基本意 ...
- JFreeChart入门
JFreeChart主要用来各种各样的图表,这些图表包括:饼图.柱状图(普通柱状图以及堆栈柱状图).线图.区域图.分布图.混合图.甘特图以及一些仪表盘等等 (源代码下载) 示例程序运用的jar包: j ...
- 详解用webpack的CommonsChunkPlugin提取公共代码的3种方式(注意webpack4.0版本已不存在)
Webpack 的 CommonsChunkPlugin 插件,负责将多次被使用的 JS 模块打包在一起. CommonsChunkPlugin 能解决的问题 在使用插件前,考虑几个问题: 对哪些 c ...
- LeetCode(48):旋转图像
Medium! 题目描述: 给定一个 n × n 的二维矩阵表示一个图像. 将图像顺时针旋转 90 度. 说明: 你必须在原地旋转图像,这意味着你需要直接修改输入的二维矩阵.请不要使用另一个矩阵来旋转 ...
- TLiteSQLMonitor 使用方法
- Python 3 官方文档学习(1)
本文系官方文档翻译之作,不当之处,敬请原谅! range()函数 如果需要遍历一个数字序列,可以使用内置的range函数.该函数会生成等差序列. 1 2 3 range(5)# 范围[0, 5) ra ...
- VS2008/2005 MFC程序调试经验
我的VS2008不知道是有bug还是自己的问题,很多时候变量定义后CTRL+F5运行却没反应,一定要“生成解决方案”下才行? 1.没有可用于当前位置的源代码 将工具->选项->调试-> ...
- Spring集成shiro做登陆认证
一.背景 其实很早的时候,就在项目中有使用到shiro做登陆认证,直到今天才又想起来这茬,自己抽空搭了一个spring+springmvc+mybatis和shiro进行集成的种子项目,当然里面还有很 ...
- HashTable、HashMap、ConcurrentHashMap的区别
HashTable是做了同步的,HashMap未考虑同步.所以HashMap在单线程情况下效率较高:HashTable在的多线程情况下,同步操作能保证程序执行的正确性. HashMap是非线程安全的, ...