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 安全攻防系列(一):HelloWorld

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

iOS安全攻防(二十四):敏感逻辑的保护方案(1)

iOS安全攻防(二十四):敏感逻辑的保护方案(1)Objective-C代码容易被hook,暴露信息太赤裸裸,为了安全,改用C来写吧!当然不是全部代码都要C来写,我指的是敏感业务逻辑代码。本文就介绍一...

iOS安全攻防(二十):越狱检测的攻与防

越狱检测的攻与防在应用开发过程中,我们希望知道设备是否越狱,正以什么权限运行程序,好对应采取一些防御和安全提示措施。iOS7相比之前版本的系统而言,升级了沙盒机制,封锁了几乎全部应用沙盒可以共享数据的...

iOS安全攻防(一):Hack必备的命令与工具

你的应用正在被其他对手反向工程、跟踪和操作?你的应用是否依旧裸奔毫不防御? 郑重声明一下,懂得如何攻击才会懂得如何防御,一切都是为了之后的防御作准备。废话少说,进入正题。 今天总结一下为h...

关于真实

或许,单纯和质朴是RD的一贯品质;我们追求所有事物的本质、追求最为真实的呈现。亦因此,我们常常在处事时、做人时,不屑于掩饰、更不屑于粉饰。(一)目前为止,我尚未听过所知道的哪家通过认证的公司,是没有在...

iOS安全攻防(二十一):废除应用程序的ASLR特性

原文地址:http://blog.csdn.net/yiyaaixuexi/article/details/19642621 ASLR (Address Space Layout...

iOS安全攻防(十五):使用iNalyzer分析应用程序

好想用 doxygen 画iOS app的class继承关系。 有没有比 class-dump-z 更直观的分析工具? 利器 iNalyzer 隆重登场~ 一...

iOS安全攻防(十九):基于脚本实现动态库注入

基于脚本实现动态库注入MobileSubstrate可以帮助我们加载自己的动态库,于是开发者们谨慎的采取了对MobileSubstrate的检索和防御措施。那么,除了依靠MobileSubstrate...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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