2013-05-21 34 views
1

GCC可见性功能使我们能够剥离我们共享库中的那些我们不希望客户看到的API。实际上,我们不能使用ldopen来调用这些隐藏的函数,但我想知道这是否足够安全以保护我们敏感的API。符号可见性是否保护共享库免受滥用/破解?

我只想简单解释一下共享库中隐藏API的可靠性/安全性,以便我可以平衡工作量和风险。我只问这个问题是因为在海湾合作委员会的文件中找不到关于这个问题的充分说明。

请重新打开此问题。

+8

我没有丝毫的想法。不过,我可以向你保证,如果有人真的想破解你的软件,他最终会。不要浪费时间在安全机制上 - 你冒着风险,你的合法客户会因为他们而受到损害(而不公平的客户甚至不会在破解版中看到他们)。 – Spook

+1

我该怎么办?拆开它;通过主要功能追踪程序流程;看看他们在I/O和非本地数据操作方面做了什么;通过猜测和实验建立他们的目的的想法。没有函数名称,这将是更多的工作,但绝不是不可能的。您需要操作系统支持(访问控制,受限制的根访问权限,安全密钥存储等),才能有效地使您的图书馆看起来像您想要的那样充满用户敌意。 –

+0

如何不具备某些符号(或所有符号)“用户敌对”?用户不应该也不需要对程序进行逆向工程,实际上这在大多数情况下违反了EULA。虽然我同意它不会耽搁犯罪分子很长时间,但让他们的生活变得更难一点也没有错。至少他们必须为他们偷东西做点工作。 – Damon

回答

2

可见性属性的真正目的是该库不公开本身并不意味着直接使用的部分。对于任何试图破解它的人来说,它都没有什么区别。他们仍然需要反编译代码,并且找出函数的入口点并不难(看看你自己!)。是的,按照兆字节代码工作很困难,但有经验的人会知道要查找什么类型的东西,因此可能跳过大量代码。

+0

另外像“IDA Pro”这样的工具可以自动计算堆栈帧,并在堆栈帧之间生成一个调用图,包括调用参数的大小和对齐方式。 – datenwolf

1

只要你能解散代码,你就可以破解它。花费更长时间,但可以完成。更安全的保护是在某些服务器上运行代码。这就是暗黑破坏神3保护它的方式,它足够好用。然而,解决问题是一个动机问题。如果你的程序足够好并且黑客足够坚定,那么有人会破解它。你只能增加所需的时间。