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];
}
- 大家应该知道方法的本质就是消息的发送:
objc_msgSend
- 大家应该知道方法的本质就是消息的发送:
1.1. 动态分析
- 我们先看下
汇编代码
- 我们先看下
我们知道
objc_msgSend
会有2个默认的参数(id self, SEL _cmd)
这个根据前面的知识我们就更能理解,为什么参数最好控制在6个以内了
- 我们可以动态看下
x0,x1
的值
1.2. 静态分析
动态调试
是舒服,但是我们逆向开发
的时候好多时候都会静态分析
~
- 我们还是要老规矩分析一波~
- 然后我们验证我们分析的正确性(
iOS是小端模式
,所以取出地址,从右向左
读)
- 然后我们验证我们分析的正确性(
看来我们的
静态分析
没有错
1.2.1. 工具分析
说实在的:
静态分析
一个方法,我人都快傻掉了。要是真正的工程(成千上万的方法),我不瓦特了?
估计那些·啥啥家·也是真想的~
- 咱们先用
Hopper
看下二进制文件
,会不会效果好点
那些
imp
指向的方法的实现,其实都是objc源码
里面的方法---很早之前写了一篇博客objc源码调试 (目前最新的是objc4-818.2
,其实差不多)
2. block
反汇编
关于
block
,我也写了一篇博客block底层分析 --- 实不相瞒,太早了,有点忘记了,不过应该还可以参考
- 不过曾经没有看过
汇编
。现在看汇编
又可以明白好多东西
- 不过曾经没有看过
- 先写一些代码
int main(int argc, char * argv[]) {
void(^block)(NSInteger index) = ^(NSInteger index){
NSLog(@"block -- %ld",index);
};
block(1);
}
复制代码
- 我稍稍的画了个小小的图(小谷艺术细菌比较少,兄弟们多担待~)
我的理解:
block
其实也是个对象 --- 就是有点特殊
3. 总结
hopper
是专门做OC的反汇编
之类的。但是我们项目中好多都会有C++和C
代码,而且这个伪代码
不太友好 --- 以后可能会用一个其他的工具写了好多
汇编
的博客,其实就那么些指令
。我需要的时候就是一边查着看--接下来就要搞搞传说中的逆向
了~还有
谢谢
兄弟们的点赞和浏览
,坚持学习到了现在,非常真诚的给兄弟们鞠个躬Thanks♪(・ω・)ノ
好了!兄弟们,等待我的下一篇产出 ~
更多文章观看:https://github.com/uzi-yyds-code/IOS-reverse-security