转: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的利器的更多相关文章

  1. Reveal分析IOS界面,plist文件读取

    Reveal分析IOS界面,需要得到app的 softwareVersionBundleId上传到iphone中 , 而IOS8的iTunesMetadata.plist (设备路径/var/mobi ...

  2. Reveal:分析iOS UI该武器

    Reveal是分析iOS应用UI的利器: Reveal可以在执行时调试和改动iOS应用程序.它能连接到应用程序,并同意开发人员编辑各种用户界面參数.这反过来会马上反应在程序的UI上.就像用FireBu ...

  3. iOS安全攻防(三):使用Reveal分析他人app

    使用Reveal分析他人app 准备工作 1)已越狱的设备,而且已安装了OpenSSH,MobileSubstrate等有用工具(Cydia源里安装) 2)本地已安装了Reveal 操作步骤 1)拷贝 ...

  4. iOS使用Reveal分析他人app界面

    本文转自http://blog.csdn.net/cuibo1123/article/details/45694657 安装: 首先前往 http://revealapp.com/download/  ...

  5. iOS UI布局调试工具

    查看ios软件的ui布局有三种: 1.DCIntrospect    这种方式是开源的,我从github上clone下来后运行demo,运行遇到了问题:Xcode cannot run using t ...

  6. iOS抓包利器Charles

    iOS抓包利器Charles http://wonderffee.github.io/blog/2013/07/13/best-packet-capture-tool-charles-in-ios/ ...

  7. Reveal分析工具的使用

    首先:在reveal官网http://revealapp.com/下载适用版本.试用版本是30天免费,可以选择破解.破解链接http://pan.baidu.com/s/1bnc5wwn?errno= ...

  8. [IOS]IOS UI指南

    [IOS]IOS UI指南 众所周知,IOS的界面设计,越来越流行,可以说都形成了一个标准,搜集了一些资料,供自己以后学习使用! iOS Human Interface Guidelines (中文翻 ...

  9. IOS UI 第八篇:基本UI

    实现图片的滚动,并且自动停止在每张图片上     - (void)viewDidLoad{    [super viewDidLoad]; UIScrollView *scrollView = [[U ...

随机推荐

  1. 谁说前端不需要懂-Nginx反向代理与负载均衡

    转:https://juejin.im/post/5b01336af265da0b8a67e5c9 学到老活到老 前端圈一直很新,一直要不停的学习,而且在进入大厂的路上,还要求熟悉一门后台语言等等.用 ...

  2. 京东在html5页面中打开本地app的解决方案

    转:https://blog.csdn.net/CameloHuang/article/details/64476385 从html5打开本地的app–如果本地没有app就跳转到下载页面,大家都会认为 ...

  3. OCM_第一天课程:OCM课程环境搭建

    注:本文为原著(其内容来自 腾科教育培训课堂).阅读本文注意事项如下: 1:所有文章的转载请标注本文出处. 2:本文非本人不得用于商业用途.违者将承当相应法律责任. 3:该系列文章目录列表: 一:&l ...

  4. 前端开发必须知道的JS(一) 原型和继承

    原型和闭包是Js语言的难点,此文主要讲原型及原型实现的继承,在(二)中会讲下闭包,希望对大家有所帮助.若有疑问或不正之处,欢迎提出指正和讨论. 一. 原型与构造函数 Js所有的函数都有一个protot ...

  5. php实现概率性随机抽奖代码

    1.初始数据: 权重越大,抽取的几率越高 [奖品1, 权重 5], [ 奖品2, 权重6], [ 奖品3, 权重 7], [ 奖品4, 权重2] 2.处理步骤: 1)N = 5 + 6 + 7 + 2 ...

  6. cf777c 模拟

    水题 /* 按列扫描一次矩阵,每个行向上最长sort长度即可 */ #include<bits/stdc++.h> using namespace std; #define ll long ...

  7. ThinkPHP3.1快速入门教程

    ThinkPHP3.1快速入门教程 http://www.thinkphp.cn/info/155.html   ------------------------------------------- ...

  8. 矩阵优化dp

    链接:https://www.luogu.org/problemnew/show/P1939 题解: 矩阵优化dp模板题 搞清楚矩阵是怎么乘的构造一下矩阵就很简单了 代码: #include < ...

  9. asp.net core 微信获取用户openid

    获取openid流程为首先根据微信开发参数构造AuthorizeUrl认证链接,用户跳转到该链接进行授权,授权完成将跳转到回调页(首次认证需要授权,后面将直接再跳转至回调页),此时回调页中带上一个GE ...

  10. python全栈开发day29-网络编程之socket常见方法,socketserver模块,ftp作业

    一.昨日内容回顾 1.arp协议含义 2.子网,子网掩码 3.两台电脑在网络中怎么通信的? 4.tcp和udp socket编码 5.tcp和udp协议的区别 6.tcp三次握手和四次挥手,syn洪攻 ...