时时勤拂拭,勿使惹尘埃

TOC

Categories

iOS(六)ida小技巧



1.查找app入口点

ida对ipa文件部分函数解析有点问题,比如入口点通常解析不出来
ios应用启动后的main都会执行UIApplicationMain来创建实例,而UIApplicationMain通常也会调用其他模块启动应用
所以可以在Improts中搜索_UIApplicationMain,再通过x跳转到调用地址

2.函数表示

以UIView为例
objective-c:
+ (void)beginAnimations:(NSString *)animationID context:(void *)context 
- (void)drawRect:(CGRect)rect 
- (id)initWithFrame:(CGRect)aRect 
- (void)removeFromSuperview 
@property(nonatomic) CGRect frame
gdb/lldb:
+[UIView(Animation) beginAnimations:context:] 
-[UIView(Rendering) drawRect:] 
-[UIView initWithFrame:] 
-[UIView(Hierarchy) removeFromSuperview] 
-[UIView(Geometry) frame] 
-[UIView(Geometry) setFrame:]
xdb表示的特点是: 
  • 省略返回值
  • 省略参数类型声明与形参
  • 函数名与类名之间有一个空格,多参数之间不含空格,直接是冒号分割
  • 类名后紧跟着category名
  • property被展开,readwrite属性的property会等于两个函数,set函数会有set前缀和第一个字母大写(@property时显式声明函数名的话也许不同)
IDA:

__UIView_Animation__beginAnimations_context__ 
__UIView_Rendering__drawRect__ 
__UIView_initWithFrame__ 
__UIView_Hierarchy__removeFromSuperview_ 
__UIView_Geometry__frame_ 
__UIView_Geometry__setFrame__
其特点就是把xdb表示法中除字母数字外的字符都用下划线代替

3.符号信息

3.1 IDA计算出了成员变量的偏移地址并把symbol直接显示出来

IDA:        __text:000026C4                 mov     ebx, ds:(_OBJC_IVAR_$_TestButton_m_model - 26C3h)[esi]
xdb:        0x26c2:                         movl   13207(%esi), %ebx

3.2 函数参数在IDA中被赋予名称

IDA:        __text:000026CA                 mov     edi, [ebp+arg_0]
xdb:        0x26c8:                         movl    8(%ebp), %edi
ebp+8为arg_0,ebp+12为arg_1,arg即为argument的缩写
 对于Objective-C函数,arg_0都是self

0 评论:

发表评论