文章出自:听云博客

Reveal简介:

这是个神奇的工具,它能常透彻地分析个App的UI结构。

这个工具包括两部分,部分是在PC上运行的一个独立应用,即Reveal.app,另一部分代码在你要分析的某个App中,为此,Reveal提供了一个Framework和一个Dylib供使用。这两部分之间通过Bonjure这种零配置网络进行通讯。

官方地址:www.revealapp.com

基本使用:

Reveal.app的使用没有什么可说的,就是点击运行。关键是另一部分,怎么嵌入到App中。

我们自己的App都有源码,因此最简单的方式就是静态链接方式集成到App中。

关于基本使用,参考帮助中的“Integration Guide”,或者参考这些链接。

http://blog.csdn.net/yongyinmg/article/details/39293015

http://chuansong.me/n/1308113

http://blog.csdn.net/yiyaaixuexi/article/details/18220875

真正的需求

我弱弱的问一句:我自己的UI还需要用这个工具分析?有这个需求吗?

实际上,Reveal是一个逆向工程工具,主要是用来分析别人的App(的UI),说是学习也好、研究也好、剽窃也好,反正这个工具真正的价值和意义就是用于分析别人的App。

libReaveal.dylib的限制

要分析别人的App,需要用到libReveal.dylib,很可惜,1.5版本提供的dylib不支持ARM架构,也就是说,只能用于模拟器。搞了半天,还是只分析自己的App,Reveal,你啥意思?

其实早期版本的libReveal.dylib是支持ARM架构的,那时,只要把这个libReveal.dylib文件扔到手机的/Library/MobileSubstrate/DynamicLibraries/目录下,就OK了。后来为何不支持ARM架构了呢?我想这里面肯定发生了什么事,我想可能被投诉侵权了……想啥也没用,这个libReveal.dylib现在不好使了!

搜了一下,往前好几个版本都不支持ARM了,再早的,官方没的下载,据说也不能与新版的ReavealApp配合使用。

Reveal,你是不是有点尴尬?

自己做一个libReveal.dylib

别责怪Reveal了,其实人家啥都给了,不是有Reveal.framwwork吗?它可是模拟器和真机都支持的,如果你用它自己制作一个libReveal.dylib,支持ARM架构,用来分析别人的App,那么……“后果自负”,这绝对是Reveal的意思。

哈哈〜~不就是一个越狱插件吗,这个容易,附件就是我做的。制作过程也有点小坑,所以也贴出来吧。

(这需要the os或者iOSOpenDev,正好我已经装了iOSOpenDev)

打开xcode,新建一个工程,如图:

我的工程干脆也叫libReveal。

工程建立了之后,我把Reveal.framework拖进来,再加一行log吧

编译,OK,dylib文件生产了。

拖拽过去,然后随便打开一个App试了试,不行,Reveal.App没有发现什么。嗯,我预料到了,不可能这么顺!

我仔细看了一下编译生产的这个libReveal.dylib文件,大小才150K,怎么这么小?

我想起来了,它嵌码不是“零代码”吗?“零代码”应该是利用了类加载机制,启动代码应该放在load或者initialize里,只要这个类被加载,就会执行到。

同时,还要保证这个类一定会被用到,这要用到Objective-c的category特性,很可能可能是对UIApplication做了category,这个我稍后分析一下就知道了。

如果要在动态库中使用了OC的category特性,必须在link时告诉连接器,否则category中的代码将不会被编译到dylib或者framwwork中(除非明确使用到)。添加连接参数:

再编译,出了六十多个错误,都是说xxx符号找不到,根据提示,把Foundition、UIKit、coreGraphics、QuartzCore、CFNetwork、libz加入进来(注意,Foundtion.framework本来就加进来了,需要删掉重新加进来,否则在8.0以前的iOS上不能运行,报告找不到NSNetService,这是个小坑)。

编译,通过!这回大小1.7M(支持armv7和arm64),在拖过去试了一下,大功告成!

最后,有两点必须说明:

1、plist文件,也就是libReveal.plist这个文件,它起过滤作用,或者说它决定你要研究那个App,你通过指定bundleId来决定哪个App/进程启动时,这个libReveal.dylib注入进去。

2、libReveal.dylib的危险性像springboard等系统进程,你不应该注入进去,否则可能会有危险。特别是,当libReveal.plist不存在时,相当于没有过滤,没有限制,所有进程都会被注入。我试过删除libReveal.dylib,真的不好玩,重启就完蛋了,最后的代价是重新刷机。

原文链接:https://blog.tingyun.com/web/article/detail/262

用Reveal分析第三方App的UI的更多相关文章

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

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

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

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

  3. iOS逆向工程之Hopper+LLDB调试第三方App

    LLDB是Low Level Debugger的简称,在iOS开发的调试中LLDB是经常使用的,LLDB是Xcode内置的动态调试工具.使用LLDB可以动态的调试你的应用程序,如果你不做其他的额外处理 ...

  4. reveal查看任意APP

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

  5. Reveal UI 分析工具分析手机 App

    上篇文章介绍了: Reveal UI 分析工具简单使用 这里介绍如何使用 Reveal UI 分析工具来进行手机 App UI 界面的分析. 前提准备: (1)已安装 Reveal 的 Mac (2) ...

  6. iOS越狱系列(一):使用Reveal分析APP

    TOOLS 1.已越狱的设备,并且已安装了OpenSSH,MobileSubstrate等实用工具 Cydia源/Telesphoreo里有 里面有个包 可以基本集合所有开发工具提供库 2.mac o ...

  7. 使用Reveal查看任意App的技巧

    转:http://www.jianshu.com/p/4dc8f94ca27c 前言 Reveal(http://revealapp.com)是一个很强大的iOS View Hierarchy工具,与 ...

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

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

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

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

随机推荐

  1. IOS开发技巧快速生成二维码

    随着移动互联网的发展,二维码应用非常普遍,各大商场,饭店,水果店 基本都有二维码的身影,那么ios中怎么生成二维码呢? 下面的的程序演示了快速生成二维码的方法: 在ios里面要生成二维码,需要借助一个 ...

  2. Entity Framework 实体框架的形成之旅--利用Unity对象依赖注入优化实体框架(2)

    在本系列的第一篇随笔<Entity Framework 实体框架的形成之旅--基于泛型的仓储模式的实体框架(1)>中介绍了Entity Framework 实体框架的一些基础知识,以及构建 ...

  3. easyui combobox 值怎样获取

    $('#com').combobox('getValue')获取当前选中的值$('#com').combobox('getText')获取当前选中的文字

  4. 用dos开启apache问题说明

  5. Android退出时关闭所有Activity的方法

    Android退出时,有的Activity可能没有被关闭.为了在Android退出时关闭所有的Activity,设计了以下的类: //关闭Activity的类 public class CloseAc ...

  6. WebView的使用及添加进度条

    实现的效果比较简单类似于微信打开网页,头部有个进度条显示加载进度 下载地址:http://download.csdn.net/detail/qq_29774291/9666941 1.在安卓端加载一个 ...

  7. EasyUI-加载完Html内容样式渲染完成后显示

    等待页面的css样式加载完毕,Html内容加载完毕,样式生成后再进行展示,避免一开始加载内容后,逐渐渲染样式造成的不良视觉效果,增强用户体验. 新增base-loading.js文件,代码如下 //获 ...

  8. Scalaz(29)- Free :Coyoneda - Functor for free

    很多时候我们会遇到一些高阶类型F[_],但又无法实现它的map函数,也就是虽然形似但F不可能成为Functor.看看下面的例子: trait Interact[A] case class Ask(pr ...

  9. 简单可用好实现的 HA 高可用设计

    本文为作者原创,如需转载请注明出处. 1. 实现的功能 一主多备,自动选主 启动记录可查询 2. 前置需求 一台数据库用以记录,如 MySQL.Redis.MongoDB 等.关键是设计中的思想,用啥 ...

  10. Bootstrap源码分析之transition、affix

    一.Transition(过滤) 作为一个基础支持的组件,被其他组件多次引用.实现根据浏览器支持transition的能力,然后绑定动画的结束事件:首先:创建一个Element:然后:迭代查看此元素支 ...