【问题标题】:Randomizing function, etc. locations for shared libs共享库的随机化功能等位置
【发布时间】:2009-08-13 21:22:22
【问题描述】:

目前,当我创建一个共享库时,来自同一目标文件的函数喜欢放在一起。是否有一个好的解决方案(不涉及拆分源文件)来尝试将函数位置分开?我们目前使用的是交叉编译的 4.2.1 版本的 gcc 和 gnu 工具。

【问题讨论】:

  • 安全问题听起来很可怕。许可问题等。我不想让攻击者知道彼此相邻的功能 A、B 和 C 都是相关的。我知道,这是一个可怕的原因,它不会真正起到很多作用,但即使是一点点也能有所帮助。

标签: gcc linker ln


【解决方案1】:

虽然您可以使用 GNU-ld 链接器脚本做您想做的事(如果您在 GNU ld 工作的平台上),但您不能便携。

此外,这完全是白费力气:任何称职的黑客都不会关心移动函数。如果您真的想让代码逆向工程变得更加困难(或只是绕过您的许可方案),您应该使用更强大的技术,例如描述here.

Arguably,这仍然完全是白费力气。

【讨论】:

  • 谢谢。我理解与饼干战斗是一场失败的战斗的论点。也就是说,对此的一些推动是管理驱动的,而不是开发人员驱动的。
  • 你能做到吗? C++ 有很多从模板实例化生成的函数,这使得即使是小的代码库也不切实际。我有非破解/黑客证明的原因想要随机化功能位置。
  • @JosephGarvin 我不明白为什么 C 与 C++ 很重要:可能有太多的函数需要手动分配。所以你运行一个普通的链接,然后nm a.out 查找所有相关函数,然后sort -R 随机化它们的顺序并生成链接脚本,最后使用生成的链接脚本进行第二个链接,以生成随机二进制文件。跨度>
  • @EmployedRussian 哦,我可以使用现有的二进制文件并在其上运行链接器脚本并重新排列它,还是您的意思是我做一个新的链接?
  • @JosephGarvin 我的意思是一个全新的链接,使用相同的编译目标文件。如果您知道链接中选择的所有对象,您也可以跳过第一个链接(但这很少见)。
猜你喜欢
  • 1970-01-01
  • 2012-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多