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 函数的函数指针都赋在这个结构体里,再把这个结构体抛出去。

这样做的好处是,既隐藏了函数代码也丰富了调用方式。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 注:原文---念茜的博客 为了不让攻击者理清自己程序的敏感业务逻辑,于是我们想方设法提高逆向门槛。 本文就介绍一个...
    richar_阅读 331评论 0 0
  • 1,Search Bar 怎样去掉背景的颜色(storyboard里只能设置background颜色,可是发现cl...
    以德扶人阅读 2,819评论 2 50
  • .h @property (retain,nonatomic)UILabel *label; @property ...
    Whatever永不放弃阅读 924评论 0 0
  • 1.badgeVaule气泡提示 2.git终端命令方法> pwd查看全部 >cd>ls >之后桌面找到文件夹内容...
    i得深刻方得S阅读 4,927评论 1 9
  • 在iOS中随处都可以看到绚丽的动画效果,实现这些动画的过程并不复杂,今天将带大家一窥iOS动画全貌。在这里你可以看...
    F麦子阅读 5,242评论 5 13

友情链接更多精彩内容