之前做代码混淆, 首先了解了下反编译,使用入门级的反编译 class-dump.下载地址:最新版Class-dump.
首先需要注意的是,class-dump的作用对象必须是未经加密的可执行文件,而从App Store下载的App都是经过加密签名的,相当于有一层“壳”,class-dump应付不了这样的文件。一般要先用AppCrackr来砸壳,砸壳方式在这里不做介绍。有一个简单的方法,在一些第三方软件下载应用的越狱安装版,这样版本的壳已经被手动砸开了.
在安装过程中,双击.dmg 文件,把里面的 可执行文件 class-dump 拷贝到 /usr/bin 目录下才可以。(PS:若无法拷贝,请自行百度解决方案)
检查是否安装成功需要在 Terminal 中输入指令"class-dump",若安装失败会提示 command not found;成功的会会提示:
![使用 Class-dump 反编译 - Zach Toby - Zach Toby的博客 使用 Class-dump 反编译 - Zach Toby - Zach Toby的博客](http://img0.ph.126.net/HBeOUHLbfVTfythye251cA==/6631778050211839608.png)
使用方法:
Terminal输入 "class-dump -H xxx.app(需要反编译的) -o dir(反编译的文件的生成目录)"
class-dump -H /Users/zhangtibin/Library/Developer/Xcode/DerivedData/TestClassDump-fvzusamyzxinyfeapjhdhynfqawf/Build/Products/Debug-iphonesimulator/TestClassDump.app -o /Users/zhangtibin/Documents/TestC
最终看到结果:
![使用 Class-dump 反编译 - Zach Toby - Zach Toby的博客 使用 Class-dump 反编译 - Zach Toby - Zach Toby的博客](http://img0.ph.126.net/cST1DwJaMp612w2uoOFtLw==/6631554849351396531.png)
会把方法名反编译出来:
//
// Generated by class-dump 3.5 (64 bit).
//
// class-dump is Copyright (C) 1997-1998, 2000-2001, 2004-2013 by Steve Nygard.
//
#import "UIViewController.h"
@interface ViewController : UIViewController
{
}
- (void)testAction;
- (void)didReceiveMemoryWarning;
- (void)viewDidLoad;
@end
另外其他显示信息如下:
2、显示变量偏移:-a。如:
偏移将会以注释的方式给出,如不加-a选项,则无此注释。
3、显示函数地址:-A。如:
函数地址将以注释的方式给出,如不加-A选项,则无此注释。
此地址到底是FileOffset、VA、RVA?还需验证。
4、方法按字母序排列:-S。
静态方法,成员方法,属性均按字母序排列。
5、查看Mach-O适应的CPU架构:--list-arches。例如输出armv7。