important

iOS逆向工具之(MacOS)工具介绍二

2019-12-25  本文已影响0人  听木子说心语

写了上篇文章后,群里的小伙伴反馈挺好的,小伙伴私聊我说Reveal的操作,他现在清楚了,就是没有亲自动手操作一下.他看了逆向文章后,跟着文章中的描述一步一步的操作,清晰明了,自己不亲自操作也知道如何使用.

这是写文章以来,感觉自己比较欣慰的一件事,说明逆向文章没有白写.

很感谢这位朋友的反馈,接下来文章继续进行.

希望你能够喜欢逆向文章,也希望得到你的支持,我将下面的文章继续更新下去.

希望得到大家的反馈.还是那句话,请留言给我.

下面是我之前写得逆向工具文章

下面是我最近写得工具文章

最近写得逆向文章,我会一直更新的.

1.MachOView

MachOView MachOView下载地址

最后的更新的版本:2019-07-27,已经是最新的了,我们开发中使用最新版本就可以了.

MachOView源码地址

在iDA中导出的可执行文件,依然可以用MachOView进行打开.

注意
如图,Mach64 Header(64位架构),选中mach header 可以看到每个类的cpu架构信息、load commands数量 、load commandssize 、file type等信息

32位架构:

struct mach_header {
    uint32_t    magic;      /* mach magic number identifier */
    cpu_type_t  cputype;    /* cpu specifier */
    cpu_subtype_t   cpusubtype; /* machine specifier */
    uint32_t    filetype;   /* type of file */
    uint32_t    ncmds;      /* number of load commands */
    uint32_t    sizeofcmds; /* the size of all the load commands */
    uint32_t    flags;      /* flags */
};
64位架构:

struct mach_header_64 {
    uint32_t    magic;      /* mach magic number identifier */
    cpu_type_t  cputype;    /* cpu specifier */
    cpu_subtype_t   cpusubtype; /* machine specifier */
    uint32_t    filetype;   /* type of file */
    uint32_t    ncmds;      /* number of load commands */
    uint32_t    sizeofcmds; /* the size of all the load commands */
    uint32_t    flags;      /* flags */
    uint32_t    reserved;   /* reserved */
};

2.IDA Pro--汇编程序员的生命

image.png
IDA Pro如何使用呢?
创建项目 找到可执行文件 IDA打开可执行文件
; int __cdecl main(int argc, const char **argv, const char **envp)
public _main
_main proc near
var_1C= dword ptr -1Ch
var_18= dword ptr -18h
var_14= dword ptr -14h
var_10= qword ptr -10h
var_4= dword ptr -4

push    rbp
mov     rbp, rsp
sub     rsp, 20h
lea     rax, cfstr_D    ; "%d"
mov     [rbp+var_4], edi
mov     [rbp+var_10], rsi
mov     [rbp+var_14], 1
mov     [rbp+var_18], 2
mov     edi, [rbp+var_14]
add     edi, [rbp+var_18]
mov     [rbp+var_1C], edi
mov     esi, [rbp+var_1C]
mov     rdi, rax
mov     al, 0
call    _NSLog
xor     eax, eax
add     rsp, 20h
pop     rbp
retn
_main endp
分析

3.Hopper Disassembler

Hopper Disassembler TEST TEST-Unix 打开Hopper Open TEST-Unix
#import "ViewController.h"

@interface ViewController ()

@property (nonatomic,strong)UIButton *revealBtn;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    
    [self.view addSubview:self.revealBtn];
}

-(UIButton*)revealBtn{
    if (!_revealBtn) {
        _revealBtn = [UIButton buttonWithType:UIButtonTypeCustom];
        _revealBtn.frame = CGRectMake(100,100, 100,40);
        _revealBtn.backgroundColor = [UIColor redColor];
        [_revealBtn setTitle:@"测试" forState:UIControlStateNormal];
        [_revealBtn setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
    }
    return _revealBtn;
}

@end
revealBtn反编译
nop
ldr        x0, #0x100008d78
nop
ldr        x1, #0x100008d38 ; @selector(buttonWithType:)
movz       x2, #0x0
bl         imp___stubs__objc_msgSend
mov        x29, x29
bl         imp___stubs__objc_retainAutoreleasedReturnValue
ldr        x8, x19, x22
str        x0, x19, x22
mov        x0, x8
bl         imp___stubs__objc_release
ldr        x0, x19, x22
nop
ldr        x1, #0x100008d40 ; @selector(setFrame:)
nop
ldr        d0, #0x100006b68
nop
ldr        d3, #0x100006b70
mov        v1, v0
mov        v2, v0
bl         imp___stubs__objc_msgSend
adrp       x21, #0x100008000
ldr        x0, [x21, #0xd80] ; objc_cls_ref_UIColor,_OBJC_CLASS_$_UIColor
nop
ldr        x1, #0x100008d48 ; @selector(redColor)
bl         imp___stubs__objc_msgSend
mov        x29, x29
bl         imp___stubs__objc_retainAutoreleasedReturnValue
mov        x20, x0
ldr        x0, x19, x22
nop
ldr        x1, #0x100008d50 ; @selector(setBackgroundColor:)
mov        x2, x20
bl         imp___stubs__objc_msgSend
mov        x0, x20
bl         imp___stubs__objc_release
ldr        x0, x19, x22
nop
ldr        x1, #0x100008d58 ; @selector(setTitle:forState:)
adr        x2, #0x100008060
nop
movz       x3, #0x0
bl         imp___stubs__objc_msgSend
ldr        x20, x19, x22
ldr        x0, [x21, #0xd80] ; objc_cls_ref_UIColor,_OBJC_CLASS_$_UIColor
nop
ldr        x1, #0x100008d60 ; @selector(whiteColor)
bl         imp___stubs__objc_msgSend
mov        x29, x29
bl         imp___stubs__objc_retainAutoreleasedReturnValue
mov        x21, x0
nop
ldr        x1, #0x100008d68 ; @selector(setTitleColor:forState:)
mov        x0, x20
mov        x2, x21
movz       x3, #0x0
bl         imp___stubs__objc_msgSend
mov        x0, x21
bl         imp___stubs__objc_release
ldr        x0, x19, x22
源码对比

我们通过观察,创建按钮的代码我们都可以猜到.当然这是很简单的Demo,复杂一些我们就要通过汇编代码进行分析,分析可能没有那么顺利,我们我要不断的尝试.

总结

本篇文章主要介绍MacOS上安装的应用:

这些应用都会对你的逆向分析有辅助作用.
下面是MacOS的其他工具文章介绍:

下一篇文章我们将要介绍iOS的逆向工具及调试工具.

上一篇 下一篇

猜你喜欢

热点阅读