c++ - 动态加载 DLL 的安全性

标签 c++

我想通过在 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/

相关文章:

c++ - 控制台主输入

c++ - eclipse 火星 : Symbol 'unique_ptr' could not be resolved

c++ - 衡量标准是什么?为什么程序员应该关心? - 联网

c++ - 如果在头文件中定义函数,inline 关键字是否有意义?

c++ - 通过 == 比较 CString 和 TCHAR?

c++ - 绕过基类构造函数调用

c# - C# 中非托管 DLL 的调用约定

python - Qt 调试器在 mac 上使用错误的 python 版本

c++ - 是 int a[10]={0,1,2,3,4,5,6,7,8,9};与 C++ 中的 int *a={0,1,2,3,4,5,6,7,8,9} 相同吗?

c++ - 为什么我可以在库中使用 C++ 代码并从 C 程序调用。这是如何运作的?