上一节我们介绍了IDA,这里我们介绍另一款反汇编工具:Hopper,它有OS X和Linux版本,能够反汇编32/64位Mac,Linux,Windows和iOS可执行文件。

Hopper Disassembler v3 - Personal License版本在中国售价 ¥580.01相对于IDA来说相当便宜。

本文我们将使用是demo版本,可以从这里下载。

下载完成之后,解压安装。

反汇编举例

我们编写一个demo,在ViewDidLoad中调用UIAlertView,代码如下:

- (void)viewDidLoad
{
    [super viewDidLoad];

    UIAlertView *alert =
    [[UIAlertView alloc] initWithTitle:@"Welcome"
                               message:@"Welcome to your iOS Device Ted!"
                              delegate:nil
                     cancelButtonTitle:@"security.ios-wiki.com"
                     otherButtonTitles:nil];

    [alert show];

}

编译运行,使用SimPholders,点击其中的AlertDemo

会打开目录中选择AlertDemo右键,点击Show Package contents

然后用Hopper打开里面的可执行文件

可以看到ViewDidLoad中的汇编代码如下:

点击右上角箭头所指的图标,得到如下的伪代码:

可以看到,用Hopper能够得到近似源码的伪代码。

function -[ViewController viewDidLoad] {
    _PIC_register_ = eax;
    var_44 = @"Welcome to your iOS Device Ted!";
    var_40 = @"security.ios-wiki.com";
    var_72 = arg_offset_x0;
    var_68 = arg_offset_x4;
    var_56 = var_72;
    var_60 = *0x3570;
    var_36 = @"Welcome";
    var_32 = &var_52;
    var_28 = 0x0;
    [[&var_56 super] viewDidLoad];
    eax = [UIAlertView alloc];
    var_52 = objc_msgSend(eax, *0x3558);
    [var_52 show];
    eax = objc_storeStrong(var_32, 0x0);
    return eax;
}

小结

可以看到,Hopper功能相当强大,它还有更多功能,欢迎读者亲自去尝试下,去买一个正版,价格也比IDA便宜得多。


#3 Mac上需要安装的工具下的更多文章