iOS安全攻防(二十二):static和被裁的符号表

原创 2014年03月18日 17:11:18

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中 Bugly iOS 符号表手动配置详细教程 韩俊强的博客

iOS中 Bugly iOS 符号表手动配置详细教程 韩俊强的博客 2016CSDN博客之星评选助力:动动你的小手,给我投一票吧!http://blog.csdn.net/vote/list.htm...
  • qq_31810357
  • qq_31810357
  • 2016年11月29日 21:22
  • 2704

iOS crash符号表还原

找到symbolicatecrash文件 位置: /Applications/Xcode.app/Contents/SharedFrameworks/DTDeviceKitBase.framewo...
  • u013230511
  • u013230511
  • 2016年03月08日 17:18
  • 781

Mac平台下使用nm命令查看文件的符号表

Mac平台下使用nm命令查看文件的符号表
  • Roland_Sun
  • Roland_Sun
  • 2016年01月29日 17:40
  • 8065

iOS 第三方库、插件、知名博客总结

用到的组件 1、通过CocoaPods安装 项目名称 项目信息 AFNetworking 网络请求组件 FMDB 本地数据库组件 SDWebImage 多个缩略图缓存组件 UICK...
  • u012701023
  • u012701023
  • 2017年09月29日 10:43
  • 1043

iOS开发笔记 整理(全)

退回输入键盘   - (BOOL)textFieldShouldReturn:(id)textField{     [textField resignFirstResponder]; }...
  • u011374880
  • u011374880
  • 2014年11月21日 19:24
  • 1787

static和被裁的符号表

为了不让攻击者理清自己程序的敏感业务逻辑,于是我们想方设法提高逆向门槛。 本文就介绍一个防御技巧————利用static关键字裁掉函数符号。 原理 如果函数属性为 stati...
  • jiang314
  • jiang314
  • 2016年10月21日 18:50
  • 257

iOS 安全攻防系列(一):HelloWorld

这几天公司在做那个产品,牵涉到iPhone需要越狱,前几天刚刚搞定ssh连接手机,这次又要拿到手机上的数据,不得已,只好来好好研究一番。 在网上搜索了一遍,发现只有念茜的一系列文章,其他的都是转来转去...
  • woaizijiheni
  • woaizijiheni
  • 2015年10月21日 17:51
  • 1566

linux下动态库的符号冲突、隐藏和强制优先使用库内符号

在同客户做对接时遇到了符号冲突的问题。 我司为客户提供sdk包供开发使用,就是几个so文件,在so文件中我司封装了tinyxml2这个库,客户再做开发时也时候用了tinyxml2这个库,但是所使用的版...
  • wwyyxx26
  • wwyyxx26
  • 2015年09月08日 14:01
  • 3704

Github上关于iOS的各种开源项目集合(强烈建议大家收藏,查看,总有一款你需要)

下拉刷新 EGOTableViewPullRefresh - 最早的下拉刷新控件。SVPullToRefresh - 下拉刷新控件。MJRefresh - 仅需一行代码就可以为UITableView...
  • u014152276
  • u014152276
  • 2016年10月27日 17:17
  • 6709

《iOS应用安全攻防实战》读书笔记(一)

最近一直在研究iOS应用安全攻防方面的东西,这本书是一本好书,坚持写下去,这本书能带给我想要的收获。刚开始写,还没有找到正确的方式,人生需要不断思考。希望以后可以越来越得心应手。 关于iOS安全...
  • yaren0134
  • yaren0134
  • 2016年08月16日 15:46
  • 621
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:iOS安全攻防(二十二):static和被裁的符号表
举报原因:
原因补充:

(最多只允许输入30个字)