用Reveal分析第三方App的UI
文章出自:听云博客
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://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的更多相关文章
- 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逆向工程之Hopper+LLDB调试第三方App
LLDB是Low Level Debugger的简称,在iOS开发的调试中LLDB是经常使用的,LLDB是Xcode内置的动态调试工具.使用LLDB可以动态的调试你的应用程序,如果你不做其他的额外处理 ...
- reveal查看任意APP
链接: 使用Reveal查看任意App的技巧 使用Reveal查看任意App最省步骤的技巧 如何利用Reveal神器查看各大APP UI搭建层级 使用Reveal查看别人app的UI组成 Reveal ...
- Reveal UI 分析工具分析手机 App
上篇文章介绍了: Reveal UI 分析工具简单使用 这里介绍如何使用 Reveal UI 分析工具来进行手机 App UI 界面的分析. 前提准备: (1)已安装 Reveal 的 Mac (2) ...
- iOS越狱系列(一):使用Reveal分析APP
TOOLS 1.已越狱的设备,并且已安装了OpenSSH,MobileSubstrate等实用工具 Cydia源/Telesphoreo里有 里面有个包 可以基本集合所有开发工具提供库 2.mac o ...
- 使用Reveal查看任意App的技巧
转:http://www.jianshu.com/p/4dc8f94ca27c 前言 Reveal(http://revealapp.com)是一个很强大的iOS View Hierarchy工具,与 ...
- Reveal查看任意app的高级技巧(转)
原文:http://zhuanlan.zhihu.com/iOSRe/19646016 Reveal查看任意app的高级技巧 hangcom · 12 小时前 Reveal是一个很强大的UI分析工具, ...
- Reveal查看任意app的高级技巧
本文转载至 http://blog.csdn.net/wbdwsqwwn/article/details/40476139 Reveal是一个很强大的UI分析工具,与其他几个功能相近的工具(比如Pon ...
随机推荐
- Html5离线缓存详细讲解
离线缓存是Html5新特性之一,简单理解就是第一次加载后将数据缓存,在没有清除缓存前提下,下一次没有网络也可以加载,用在静态数据的网页或游戏比较好用.当然,Html5新的特性都不是所有浏览器都能支持的 ...
- C#--常量
- jQuery Ajax上传文件
JS代码: //保存 function btnAdd() { var formData = new FormData($("#frm")[0]); $.ajax({ url: &q ...
- 百度地图API实现地图定位
1.引用JS: <script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0& ...
- 【C#】VS2015开发环境的安装和配置(三)2016-08-03更新
分类:C#.VS2015.WPF.ASP.NET MVC.Android.iOS.Unity3D: 更新日期:2016-08-03 控制台应用程序.WPF应用程序直接创建即可,这里就不再介绍了.下面仅 ...
- Css Ajax Entlib aspnetpager
---样式引导----- http://bootswatch.com/ -------ajaxToolKit----------- www.asp.net/ajax--------微软企业库----- ...
- 速战速决 (1) - PHP: 概述, 常量, 变量, 运算符, 表达式, 控制语句
[源码下载] 速战速决 (1) - PHP: 概述, 常量, 变量, 运算符, 表达式, 控制语句 作者:webabcd 介绍速战速决 之 PHP 概述 常量 变量 运算符 表达式 控制语句 示例1. ...
- Gitblit中采用Ticket模式进行协作开发
Git目前的代码分支管理模型中,比较主要的有Git-Flow.Github Pull Request.大家日常或多或少都在用着. 在不想安装Gitlab这种重量级的环境的情况下,如果是利用git一步步 ...
- 蘑菇街2015校招 Java研发笔试题 详解
1. 对进程和线程描述正确的是( ) A. 父进程里的所有线程共享相同的地址空间,父进程的所有子进程共享相同的地址空间. B. 改变进程里面主线程的状态会影响其他线程的行为,改变父进程的状态不会影 ...
- Java的“友好的”访问指示符(修饰符)
如果根本不指定访问指示符,就象本章之前的所有例子那样,这时会出现什么情况呢?默认的访问没有关键字,但它通常称为"友好"(Friendly)访问.这意味着当前包内的其他所有类都能访问 ...