注册

iOS逆向安防从入门到秃头--OC反汇编

前面和兄弟们写了好多汇编的知识,今天我们开始步入正题了:OC的汇编

1. 方法的调用
我们开始就简单写个OC对象,看下他的汇编吧
@interface XGPerson : NSObject
+(XGPerson *)person;
@end

@implementation XGPerson
+ (XGPerson *)person{
return [self alloc];
}
@end

int main(int argc, char * argv[]) {
XGPerson *p = [XGPerson person];
}

    1. 大家应该知道方法的本质就是消息的发送:objc_msgSend

1.1. 动态分析

    1. 我们先看下汇编代码

1.png

我们知道objc_msgSend会有2个默认的参数(id self, SEL _cmd)

这个根据前面的知识我们就更能理解,为什么参数最好控制在6个以内了

  1. 我们可以动态看下x0,x1的值

2.png

1.2. 静态分析

动态调试是舒服,但是我们逆向开发的时候好多时候都会静态分析~

    1. 我们还是要老规矩分析一波~

3-1.png

    1. 然后我们验证我们分析的正确性(iOS是小端模式,所以取出地址,从右向左读)

4.png

看来我们的静态分析没有错

1.2.1. 工具分析

说实在的:静态分析一个方法,我人都快傻掉了。要是真正的工程(成千上万的方法),我不瓦特了?

估计那些·啥啥家·也是真想的~

  • 咱们先用Hopper看下二进制文件,会不会效果好点

5.png

那些imp指向的方法的实现,其实都是objc源码里面的方法---很早之前写了一篇博客objc源码调试 (目前最新的是objc4-818.2,其实差不多)

2. block反汇编

关于block,我也写了一篇博客block底层分析 --- 实不相瞒,太早了,有点忘记了,不过应该还可以参考

    1. 不过曾经没有看过汇编。现在看汇编又可以明白好多东西
    1. 先写一些代码
int main(int argc, char * argv[]) {
void(^block)(NSInteger index) = ^(NSInteger index){
NSLog(@"block -- %ld",index);
};

block(1);
}
复制代码
    1. 我稍稍的画了个小小的图(小谷艺术细菌比较少,兄弟们多担待~)

6.png

我的理解:block其实也是个对象 --- 就是有点特殊

3. 总结

  • hopper是专门做OC的反汇编之类的。但是我们项目中好多都会有C++和C代码,而且这个伪代码不太友好 --- 以后可能会用一个其他的工具

  • 写了好多汇编的博客,其实就那么些指令。我需要的时候就是一边查着看--接下来就要搞搞传说中的逆向了~

  • 还有谢谢兄弟们的点赞和浏览,坚持学习到了现在,非常真诚的给兄弟们鞠个躬Thanks♪(・ω・)ノ

  • 好了!兄弟们,等待我的下一篇产出 ~

  • 更多文章观看:https://github.com/uzi-yyds-code/IOS-reverse-security


0 个评论

要回复文章请先登录注册