iOS安全攻防(二十二):static和被裁的符号表
2014-03-18 17:11
465 查看
static和被裁的符号表
为了不让攻击者理清自己程序的敏感业务逻辑,于是我们想方设法提高逆向门槛。
本文就介绍一个防御技巧————利用static关键字裁掉函数符号。
在发布release程序时(用Xcode打包编译二进制)默认会strip裁掉这些函数符号,无疑给逆向者加大了工作难度。
再来看一下反编的结果,对于createBtn()方法,我们可以得到它的伪代码:
函数名虽然面目全非,但是基本操作还是清晰的。
对于static_createBtn()方法呢,我们已经无法看到它任何直观的有价值信息了。
在本文件建造一个结构体,结构体里包含函数指针。把static函数的函数指针都赋在这个结构体里,再把这个结构体抛出去。
这样做的好处是,既隐藏了函数代码也丰富了调用方式。
为了不让攻击者理清自己程序的敏感业务逻辑,于是我们想方设法提高逆向门槛。
本文就介绍一个防御技巧————利用static关键字裁掉函数符号。
原理
如果函数属性为 static ,那么编译时该函数符号就会被解析为local符号。在发布release程序时(用Xcode打包编译二进制)默认会strip裁掉这些函数符号,无疑给逆向者加大了工作难度。
验证
写个demo验证一下上述理论,以一段创建Button的代码为例,对应补充一个static版本。id createBtn() { UIButton *btn = [[UIButton alloc]initWithFrame:CGRectZero]; [btn setFrame:CGRectMake(200, 100, 100, 100)]; [btn setBackgroundColor:[UIColor redColor]]; btn.layer.cornerRadius = 7.0f; btn.layer.masksToBounds = YES; return btn; } static id static_createBtn() { UIButton *btn = [[UIButton alloc]initWithFrame:CGRectZero]; [btn setFrame:CGRectMake(50, 100, 100, 100)]; [btn setBackgroundColor:[UIColor blueColor]]; btn.layer.cornerRadius = 7.0f; btn.layer.masksToBounds = YES; return btn; }
再来看一下反编的结果,对于createBtn()方法,我们可以得到它的伪代码:
函数名虽然面目全非,但是基本操作还是清晰的。
对于static_createBtn()方法呢,我们已经无法看到它任何直观的有价值信息了。
局限
当然这种方法也有局限性。正如你所知道的,static函数,只在本文件可见。打破局限
怎么让别的文件也能调到本文件的static方法呢?在本文件建造一个结构体,结构体里包含函数指针。把static函数的函数指针都赋在这个结构体里,再把这个结构体抛出去。
这样做的好处是,既隐藏了函数代码也丰富了调用方式。
相关文章推荐
- iOS安全攻防(二十二):static和被裁的符号表
- iOS安全攻防:static和被裁的符号表,Objective-C代码混淆,敏感逻辑的保护方案(1)
- iOS 安全攻防系列(一):获取手机联系人
- iOS安全攻防
- iOS安全攻防(七)使用iOSOpenDev开发SpringBoard的Tweat
- iOS安全攻防(十七):Fishhook
- iOS 安全攻防学习规划
- iOS安全攻防(六):使用class-dump-z分析支付宝app
- iOS安全攻防(八)Thoes之Logos简介
- iOS 应用安全攻防(六):Clutch
- iOS 安全攻防系列(三):sqlite3数据库
- 极客学院:iOS安全攻防
- iOS安全攻防(二十):越狱检测的攻与防
- iOS安全攻防(一):Hack必备的命令与工具
- iOS安全攻防(九)使用Theos开发SpringBoard的Tweat
- iOS安全攻防(三):使用Reveal分析他人app
- iOS安全攻防(三):使用Reveal分析他人app
- iOS安全攻防(一)用theos和iOSOpenDev搭建越狱开发环境
- iOS安全攻防(十二)arm汇编之mov 和 mvn
- iOS安全攻防(十三)arm汇编之函数(int参数)传递