0x22 static和被裁的符号表

注:原文---念茜的博客

为了不让攻击者理清自己程序的敏感业务逻辑,于是我们想方设法提高逆向门槛。

本文就介绍一个防御技巧-------利用static关键字裁掉函数符号。

原理

如果函数属性为 static ,那么编译时该函数符号就会被解析为local符号。

在发布release程序时(用Xcode打包编译二进制)默认会strip裁掉这些函数符号,无疑给逆向者加大了工作难度。

验证

写个demo验证一下上述理论,以一段创建Button的代码为例,对应补充一个static版本。

再来看一下反编的结果,对于createBtn()方法,我们可以得到它的伪代码:

函数名虽然面目全非,但是基本操作还是清晰的。

对于static_createBtn()方法呢,我们已经无法看到它任何直观的有价值信息了。

局限

当然这种方法也有局限性。正如你所知道的,static函数,只在本文件可见。

打破局限

怎么让别的文件也能调到本文件的static方法呢?

在本文件建造一个结构体,结构体里包含函数指针。把static函数的函数指针都赋在这个结构体里,再把这个结构体抛出去。

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

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

相关阅读更多精彩内容

  • 为了不让攻击者理清自己程序的敏感业务逻辑,于是我们想方设法提高逆向门槛。 本文就介绍一个防御技巧——利用 stat...
    无沣阅读 4,840评论 0 0
  • 一、温故而知新 1. 内存不够怎么办 内存简单分配策略的问题地址空间不隔离内存使用效率低程序运行的地址不确定 关于...
    SeanCST阅读 12,422评论 0 27
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,280评论 19 139
  • 我的视网膜,是一张锋利的铁网,映入眼帘的世界,尽是碎片。 只是有一天,视线被一个壮硕的身影吸引,他的主人对我笑了,...
    b8c5441fa7ac阅读 1,769评论 0 1
  • 天涯若邻,亦远亦近; 把酒歌舞,衣带飘零; 天涯海角,歌吟低伴, 梅花傲世,立于冬雪, 绽放美好,期待春阳。
    若幽兰阅读 1,585评论 0 0

友情链接更多精彩内容