我想通过在 dll 文件中按系统时间滚动代码来设计一个简单的安全系统。 DLL 将只有一个导出函数,如“bool result()”,因此在调用时会向我的主应用程序返回 true 或 false。 DLL 将使用“LoadLibrary(...)”方法动态加载到主应用程序,其函数将在之后调用。
但我对黑客攻击和代码安全一无所知。
这就是问题所在:黑客能否看到我在 DLL 函数中所做的事情,尤其是执行了哪些操作来决定结果,或者他能否更改我从动态加载的 dll 返回的结果?
最佳答案
为了理解和编写良好的共享库,了解加载程序和 elf 格式如何交互是很重要的。
我发现 Ulrich Depper 的文章非常有帮助:
http://www.akkadia.org/drepper/dsohowto.pdf
它提供了关于如何加载共享库、如何控制符号可见性、优化和其他方面的非常好的见解。这本身就是一个相当庞大的主题,需要一些时间来理解,但这是值得的。
如果您对数据结构之类的东西感兴趣,甚至还有关于如何使用布隆过滤器、哈希表和其他工具进行查找的解释。
Can the hacker see what I'm doing inside DLL function especially what operation performed to decide the result
他只能看到你导出的符号。
隐藏/导出符号的方法有很多种。
例如:__attribute__((visibility(hidden)))
https://gcc.gnu.org/wiki/Visibility
can he change what result i'm returning from dynamically loaded dll?
如果通过共享库提供给 api 的输入在实现中得到正确处理(检查缓冲区溢出等),我想应该没问题。用户可以控制提供给 API 并影响输出的输入。如果我在这里遗漏了什么,如果有人能纠正我就太好了。
关于c++ - 动态加载 DLL 的安全性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32861745/