iOS逆向系列1_Class_dump

待整理

1、概述

class-dump,顾名思义,就是用来dump目标对象的class信息的工具。它利用Objective-C语言的runtime特性,将存储在Mach-O文件中的头文件信息提取出来,并生成对应的.h文件。

2、安装

class-dump的用法比较简单,首先去http://stevenygard.com/projects/class-dump下载最新版的class-dump。

然后操作如下:

2.1 设置环境变量:
  • 打开Terminal,输入$mkdir ~/bin,在当前用户根目录下创建一个bin目录;

  • 把class-dump给拷贝到这个目录里,并赋予其可执行权限:$ mv /path/to/class-dump ~/bin $chmod +x ~/bin/class-dump;

  • 打开~/.bash_profile文件:$vi ~/.bash_profile,在文件最上方加一行:export PATH=$HOME/bin/:$PATH,然后保存并退出(在英文输入法中依次按下esc和:(shift + ;,即冒号),然后输入wq,回车即可);

  • 在Terminal中执行$source ~/.bash_profile;

  • 上面的操作把~/bin路径给加入了环境变量.之后,就可以正常使用了。

  • class-dump的对象是Mach-O格式的二进制文件,如Framework的库文件和App的可执行文件。

下面以支付宝为例,来看看class-dump的完整流程。

1.定位App的可执行文件

首先把带class-dump的App拷贝到OSX中,笔者放在了“/Users/Test ”下。然后在Terminal中进入App所在的目录,并用Xcode自带的plutil工具查看Info.plist中的“CFBundleExecutable”字段,如下:

$ cd /Users/Test/AlipayWallet9.9.5_/Payload/AlipayWallet.app
$ plutil -p Info.plist | grep CFBundleExecutable
"CFBundleExecutable" => "AlipayWallet"

当前目录下的“AlipayWallet”就是App的可执行文件。

2.class-dump可执行文件

把AlipayWallet的头文件class-dump到“/Users/Test/TEST/Header”下,并将头文件内容按名字排序,命令如下:

$ class-dump -S -s -H AlipayWallet -o /Users/Test/TEST/Header

结果是: -APPstore里面的app都只有一个文件:CDStructures.h 而且里面是空的(appstore处理过) -【直接使用xcode打包的我们自己的ipa】头文件基本全部都展示出来了

透过这些头文件,闭源App的程序架构就能初现端倪了,经验丰富的开发人员可以从中了解非常多的信息,这些信息是iOS逆向工程的基础。不过现在的App工程越来越大,而且还在不停地引用第三方代码,因此经常会发现class-dump出来了成百上千个头文件,虽然靠人工及经验一点点地分析是很好的练习方式,但过程实在太复杂,让人头大。在后面的章节,将通过各种工具逐步缩小目标范围,最后精准地定位目标函数。

值得注意的是,从AppStore下载的App都是经过加密的,可执行文件被加上了一层“壳”,就像是一颗硬硬的核桃,class-dump应付不了这样的文件。你想想,我们试图用class-dump这样一个镊子来取肉,别说解馋,没把镊子夹坏就算不错啦!此时使用class-dump看上去会“失效”。

支持一下

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码支持
扫码支持一下

打开支付宝扫一扫,即可进行扫码打赏哦