iOS逆向初体验之class-dump

浏览: 147 发布日期: 2016-12-14 分类: objective-c

从零开始

一直以来对逆向工程都有极大的兴趣,突破禁忌的快感总是难以言表,之前对iOS逆向工程可谓是一个小白,今天就从零开始,开启自己的学习之路。既然是从零开始,当然要站在巨人的肩膀上。容我先百度一番:)今天来介绍的就是一款神器名曰class-dump。

class-dump环境配置

class-dump,顾名思义,就是用来dump目标对象的class信息的工具。它利用Objective-C语言的runtime特性,将存储在Mach-O文件中的头文件信息提取出来,并生成对应的.h文件。
下载安装:http://stevenygard.com/projec...
安装方式也非常简单,将下载得到的dmg解压后,放在/usr/local/bin目录下,在Terminal输入 class-dump 如下图所示

表示已经顺利安装成功,然后执行"sudo chmod 777 /usr/bin/class-dump" 命令赋予其执行权限。

开始使用

安装好我们的主角,肯定要请来一位实验品,就拿mac自带的应用程序计算器(calculator)来小试身手吧。
在Terminal中输入:class-dump -H /Applications/Calculator.app -o /Users/David/Desktop/test heads
前者是calculator.app的路径,后者是dump出来头文件的路径。不出意外的话,你就得到了calculator app的所有头文件啦。
单单操作系统的app肯定不能满足我们,要用一个真正的iOS app来试试,那我们就用美柚app来试试吧。想用Appstore上了app来尝试,你需要先给app砸壳,顾名思义也就是相当于Appstore下载的App是苹果加密过的, 可执行文件套上了一层保护壳. class-dump无法作用于加密过的App。所以,要想获取头文件,首先得破解加密的可执行文件,俗称“砸壳”。主流的方法应该是使用dumpdecrypted工具,关于如何砸壳,这里不进行赘述,有兴趣的同学可以自行百度。看官们可能要问了,不砸壳怎么获取app呢?这时候就要想起我们的越狱市场了,我这里用的是同步助手,在上面的越狱市场上下载美柚app,将后缀改为zip,解压后就可以得到我们想要的.app文件了。(这里小小的吐槽一下,越狱市场上版本更新略慢啊!)用上面的步骤,dump美柚的头文件得到下图

可以看到AF开头的AFNetworking也在里头,也就是说dump出来的包含你的第三方代码等所有头文件。
我们选取一个叫做IMYLineView.h来看看


为什么貌似dump出来的方法还更多呢?打开IMYLineView.m文件,我们可以看到,原来dump出来的还包含写在.m里头的方法。看到这里,是不是感觉到class-dump真乃神器!
这就是class-dump的一个简单使用。

一些思考

正所谓魔高一尺,道高一丈,class-dump这么牛掰,有没有什么办法可以避免头文件惨遭其他程序员视奸呢?当然有!这里有一篇念茜大大的文章,给我们提供了一个很好的并且可行的思路。
原文地址:http://blog.csdn.net/yiyaaixu...
其中主要的思路是在Build Phrase中设定在编译之前进行方法名的字符串替换,可以将一些关键的方法混淆,达到隐藏方法名的目的。

返回顶部