2012-11-26 202 views
1

考虑一个提供接受密码或许可证密钥或敏感数据的函数的库,共享库和静态库之间的安全性有任何区别吗?静态vs共享库安全

是否有可能“嗅探”在共享库上执行的调用?或用假共享库替换原始共享库,并将传递给函数调用的所有参数“打印”到该库?

+0

这是可能的嗅探它,但为什么有人想要嗅探自己的密码,密钥或数据?如果您问是否可以在机器上处理数据,并确保其不受该机器的操作员/所有者(典型操作系统上的典型硬件)的影响,则答案为否。 –

+0

我正在考虑基于需要许可证密钥的库发布软件。通过重新分发此软件,我的许可证密钥可以使用。 – Sdra

+0

请遵守图书馆许可。如果它要求你保持关键的秘密,但也分发它,它是要求你做不可能的事情。通常这样的密钥并不是要保密的。如果用户偷了钥匙,并在另一个程序中使用它,关键将成为很容易使图书馆笔者证明小偷没有购买的关键(因为你做了它的预期目的,而贼是不是你)。 –

回答

1

事实上,替换共享库是捕获密钥的简单方法。但是,当您静态链接库时,在正在运行的应用程序中放置断点并捕获密钥也不难。所以作为一名图书馆开发人员,你需要忍受它 - 对于这个问题没有好的解决方案。方法以抵消偷钥匙和使用图书馆的“盗版”的版本主要有非技术 - 跟踪用户,并拒绝支持那些谁没有登记,提供通过禁区更新您的网站等

+0

如果库是静态的并包含在最终的二进制文件中,那么可以去掉所有的符号......在这种情况下,你还可以设置断点吗?调试器如何知道函数名称在剥离的二进制文件中? – Sdra

+0

@Sdra黑客在做这项工作时不依赖于符号。这可能很容易把你单独库(不链接到产品),看看有什么功能去的地方。由于具有与代码分析,我可以说,这是不难做到的一些经验的人。 –

1

一般来说,可以使用提供相同接口的自己的版本来替换共享库,例如在Linux中可以设置LD_LIBRARY_PATH来告诉它在哪里查找库,在Windows中可以将DLL放入搜索路径。

但是,如果你可以这样做,你可以用原始版本的替换来替换主程序,所以除了拦截数据的难度之外,没有太多的安全差异。