一、利用 class-dump 查看属性、成员变量、方法声明和实现地址
只需三步:
1. 安装 class-dump 。
2. 获得 app 的程序文件。
3. 用 class-dump 从 app 的程序文件中 dump 出头文件。
具体如下:
先下载 class-dump-3.5.dmg,
把下载到的 dmg 文件打开:

把 class-dump 文件放到这里:

打开终端,输入 class-dump 查看版本,如果是以下信息则安装成功:

接着用 Xcode 新建一个 project, 在 ViewController 类中添加一些公开和私有的属性、成员变量、方法声明和实现:

.

运行程序,在 bundle 目录下:

打开包内容:

把 DecompileDemo 程序文件复制到桌面某文件夹中,在终端输入以下指令:

此时可以看到头文件已导出:

打开 ViewController.h 可以看到:

所以,不仅公开的属性、成员变量、方法声明,而且私有的属性、成员变量、方法声明也被 dump 出来了。
用这个指令:

还可以看到方法实现的地址:

二、 利用 Hopper Disassembler 进行反编译、反汇编
官网下载: http://www.hopperapp.com/download.html?
使用:打开软件,然后直接把上面得到的二进制文件拖进去即可得到:

如果懂汇编的话,也可以结合绿色的注释了解方法的实现。
对于像我这样不懂汇编的,也可以点击右上角的:

生成伪代码,基本可以理解方法的具体实现了(self, _cmd 是 OC 的每个方法中隐藏的两个参数)。

.

即使是私有方法也被反编译出来了!
当然了,这只是反编译 app 的一小尝试,要反编译 App Store 上的 app 可没那么简单。