转:http://www.jianshu.com/p/4dc8f94ca27c

前言

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商店,

打开Cydia

先在TabBar的“变更”页面刷新软件源(如下图既已刷新成功,如果长时间不能成功刷新可以在App Store中下载Ark VPN app进行代理)

刷新成功后用Cydia搜索并安装OpenSSH,

搜索并安装Cydia Substrate(原名MobileSubstrate)

安装完成后点击重启springboard

3.安装Reveal,Trail或正式版都可以,Trail下载地址(http://pan.baidu.com/s/1qW1glK4),破解版下载地址(http://pan.baidu.com/s/1sjNySjz)下载后切记不要更新版本,解压后直接拖进“应用程序”里。

这里我们两个都安装上,先用Trail版配置文件,配置好后用破解版

4.安装iTools(2.3.3版),下载安装即可,切记不要升级版本,不然无法正常使用。下载地址(http://pan.baidu.com/s/1eQzyI8E)。

点击“跳过这个版本”

开始配置

1.建立连接

首先让越狱设备和Mac在同一个Wi-Fi内,进入越狱设备的“设置”->“无线局域网”,

点击网络后面的详情符号

进入详情页面,记下“IP地址”,即“192.168.1.241”

2.获取目标App的BundleId

用数据线连接好设备,打开iTools,找到目标App(我们这里以“掌上新东方”为例),

点击备份

等待打包

打包后的文件如图所示为 .ipa 文件,文件名 “com.xdf.palmXDF” 即为目标 App 的 BundleId 。

打包后的文件

3.创建plist文件

打开Xcode,新建一个空工程,然后新建一个Property List,命名为“libReveal”,如果是非开发人员,比如我们的UI设计师可以直接下载建好的plist文件,地址是(http://pan.baidu.com/s/1o69rQAm),打开后自己填写即可。

plist文件

所需操作如图所示

点击“Value”选项填写目标App的BundleId

4.将Reveal库文件拷贝到设备中

目的是将libReveal.dylib上传到设备的/Library/MobileSubstrate/DynamicLibraries

打开Mac上的Terminal(终端)

输入(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地址

输入“yes”

OpenSSH默认链接密码:alpine

等待上传Reveal库文件

上传完毕

接着输入:

scp -r /Applications/Reveal.app/Contents/SharedSupport/iOS-Libraries/libReveal.dylib root@192.168.1.241:/Library/MobileSubstrate/DynamicLibraries

输入默认链接密码

接着输入:

scp -r libReveal.plist root@192.168.1.241:/Library/MobileSubstrate/DynamicLibraries

 

直接拖进终端内

拖入后的完整地址

配置结束

运行查看

首先保证设备和Mac在同一局域网(Wi-Fi)内,如果App已经运行,需在后台杀死进程重新打开,保持App在前台运行,然后在Mac中打开Reveal,

点击左上角的No Connection,然后选择“掌上新东方”

当设备上的App页面切换后,需要点击Reveal窗口右上角刷新按钮进行刷新(Commend+R),在局域网内负荷较大时,视图刷新会很慢,可以让设备共享热点给Mac来解决

界面主要部分

界面主要分为三部分:

1. 左边部分是整个界面的层级关系,在这里以树形层级的方式来查看全部界面元素。

2. 中间部分是一个可视化的查看区域,用户可以在这里切换2D盒3D的查看方式,这里看到的也是程序实运行的实时界面。

3. 右边部分是控件的详细参数查看区域,当我们选中某一个具体控件时,右边就可以显示该控件的具体的参数列表。我们除了可以查看这些参数列表是否正确外,还可以尝试修改这些值。所有的修改都可以实时翻反应到中间的预览区域内。

后话

以上是不写一行代码就能够查看任意App的方法,各位看别人App爽的时候,也可以想想自己的App。

这种“高级技巧”从来没有被Reveal官方提起过,大家一开始的方法比较粗暴,是直接hook想看的App,把libReveal.dylib插进去,后来经过进一步探索,才总结出这个更简单粗暴的方法。

虽然Reveal是最直观的一个工具,但是在iOS逆向这个领域,它占的比重连1/10都不到,相信大家都了解。

最后,这篇文档写的比较详细,是为了照顾非开发人员进行学习,不够简略之处希望大家理解

使用Reveal查看任意App的技巧的更多相关文章

  1. reveal查看任意APP

    链接: 使用Reveal查看任意App的技巧 使用Reveal查看任意App最省步骤的技巧 如何利用Reveal神器查看各大APP UI搭建层级 使用Reveal查看别人app的UI组成 Reveal ...

  2. Reveal查看任意app的高级技巧(转)

    原文:http://zhuanlan.zhihu.com/iOSRe/19646016 Reveal查看任意app的高级技巧 hangcom · 12 小时前 Reveal是一个很强大的UI分析工具, ...

  3. Reveal查看任意app的高级技巧

    本文转载至 http://blog.csdn.net/wbdwsqwwn/article/details/40476139 Reveal是一个很强大的UI分析工具,与其他几个功能相近的工具(比如Pon ...

  4. 【Android Studio安装部署系列】二十八、Android Studio查看其它APP的布局结构

    概述 日常使用别家的APP过程中,会遇到一些比较好看的布局,这时候我们就想学习一下别人的布局结构,以便参考. (1)手机连接电脑.设置手机为USB调试模式 参考<[Android Studio安 ...

  5. iOS开发查看手机app本地存储的文件

    开发过程中,有时会在本地存储一些文件,但是我们不确定有没有存上,可以通过以下方法来查看测试手机上本地存储的文件: 1.选择xcode上面的window下面的Devices 2.先在左边选中你当前的设备 ...

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

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

  7. ele.me在IOS浏览器端启动APP的技巧分析

    ele.me在IOS浏览器端启动APP的技巧分析 巧妙利用后台重定向,在schemes启动时提示用户打开,启动不了APP时能够及时跳转至下载页面. 避免报错页面的出现以及用户还没来的及选择就跳转到下载 ...

  8. 新年之际,盘点一些APP开发技巧

    (原文:Reader Submissions - New Year's 2015 作者:Mattt Thompson 译者:培子 校对:蓝魂) 回顾过去一年发生在我们身边的事情时,有一点不得不提:对苹 ...

  9. Android Studio查看其它APP的布局结构

    概述 日常使用别家的APP过程中,会遇到一些比较好看的布局,这时候我们就想学习一下别人的布局结构,以便参考. (1)手机连接电脑.设置手机为USB调试模式 (2)运行Android Studio,打开 ...

随机推荐

  1. 存在网路的情况下重命名SDE中数据图层错误(The orphan junction feature class cannot be renamed)

    运行环境为ArcGIS9.3,VS2008. 问题描述:数据通过SDE存储在Oracle10g数据库中,数据集中存在几何网络,在存在网络的情况下通过程序对其中的数据图层进行重命名,弹出"Th ...

  2. 第一章 zookeeper基础概念

    1.ZooKeeper是什么 ZooKeeper为分布式应用提供了高效且可靠的分布式协调服务,提供了统一命名服务. 配置管理和分布式锁等分布式的基础服务.在解决分布式数据一致性方面, ZooKeepe ...

  3. c# 程序检测日志输出的类

    public class LogWrite     {         public LogWrite()         {             //             // TODO:  ...

  4. java中的继承Object

    一个类,要么是直接继承Object,要么就是间接继承Object,如下: class A{ } class B extends A{ } B 是A的子类,A是Object的子类,所以B间接继承了Obj ...

  5. jquery注意

    具有 true 和 false 两个属性的属性,如 checked, selected 或者 disabled 使用prop(),其他的使用 attr():

  6. jsp_注释

    jsp支持两种注释的语法操作,一种是显示注释(在客户端允许看的见),另一种是隐式注释 显示注释:<!--注释内容--> 隐式注释: 格式一://单行注释 格式二:/*多行注释*/ 格式三: ...

  7. 3.1 SharePreference

    SharePreferences是用来存储一些简单配置信息的一种机制,使用Map数据结构来存储数据,以键值对的方式存储,采用了XML格式将数据存储到设备中,路径为:/data/data/<pac ...

  8. 用dom4j解析xml 报java.lang.NoClassDefFoundError:org/jaxen/JaxenException

    转自:http://www.myexception.cn/java%20exception/95.html 源码如下: import java.io.File; import java.util.Li ...

  9. 转发 eclipse 取消javascript 验证

    博客地址: http://blog.csdn.net/itchiang/article/details/7498474 最近出了一个很怪的现象,某一个js文件,在某一个Eclipse工程中呆的好好的, ...

  10. RaisingStudio.PackageManager 发布 1.0版

    从此免去命今行打包的痛苦,安装本Module后,可以在Dashbaord的Modules里看到一个Download页,进入可看到全部已安装模块列表(与Installed页内容一致),可搜索找到要打包的 ...