Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 动态加载DLL的安全性_C++ - Fatal编程技术网

C++ 动态加载DLL的安全性

C++ 动态加载DLL的安全性,c++,C++,我想通过在dll文件中按系统时间滚动代码来设计一个简单的安全系统。DLL将只有一个导出函数,如bool result,因此在调用时将向我的主应用程序返回true或false。DLL将使用LoadLibrary动态加载到主应用程序。。。方法及其函数将在之后调用 但我对黑客和代码安全一无所知 这就是问题所在:黑客能看到我在DLL函数中做什么,特别是执行什么操作来决定结果吗?或者他能改变我从动态加载的DLL返回的结果吗?当然,他能。尤其是当你的DLL很小的时候。他当然可以。尤其是当您的DLL很小时。这

我想通过在dll文件中按系统时间滚动代码来设计一个简单的安全系统。DLL将只有一个导出函数,如bool result,因此在调用时将向我的主应用程序返回true或false。DLL将使用LoadLibrary动态加载到主应用程序。。。方法及其函数将在之后调用


但我对黑客和代码安全一无所知


这就是问题所在:黑客能看到我在DLL函数中做什么,特别是执行什么操作来决定结果吗?或者他能改变我从动态加载的DLL返回的结果吗?当然,他能。尤其是当你的DLL很小的时候。

他当然可以。尤其是当您的DLL很小时。

这是一个很难回答的问题

基本上,黑客看不到您在DLL中做什么,因为DLL已加载到应用程序中,并且应用程序的内存受到保护,请参见


更重要的是,如果你返回的结果是可以预测的,例如,如果你使用的是随机数,它们是可预测的吗?你可以阅读更多关于这方面的内容这是一个很难回答的问题

基本上,黑客看不到您在DLL中做什么,因为DLL已加载到应用程序中,并且应用程序的内存受到保护,请参见


更重要的是,如果你返回的结果是可以预测的,例如,如果你使用的是随机数,它们是可预测的吗?您可以阅读更多关于此的信息

为了理解和编写良好的共享库,了解loader和elf格式是如何交互的非常重要

我发现非常有用的文章是Ulrich Depper的:

它提供了关于如何加载共享库、如何控制符号可见性、优化和其他方面的非常好的见解。这本身是一个相当广泛的话题,需要一些时间去理解,但它是值得的

如果您对数据结构之类的东西感兴趣,甚至会有关于如何使用bloom过滤器、哈希表和其他工具进行查找的解释

黑客能看到我在DLL函数中做什么吗特别是什么 为确定结果而执行的操作

他只能看到您导出的符号。 隐藏/导出符号的方法有很多。 例如:\属性\可见性隐藏

他能改变我从动态加载的dll返回的结果吗


如果通过共享库提供给api的输入被正确处理,那么在实现中检查缓冲区溢出等,我想应该没问题。用户可以控制提供给API并影响输出的输入。如果我在这里遗漏了什么,如果有人能纠正我,那就太好了。

为了理解和编写良好的共享库,了解loader和elf格式是如何交互的非常重要

我发现非常有用的文章是Ulrich Depper的:

它提供了关于如何加载共享库、如何控制符号可见性、优化和其他方面的非常好的见解。这本身是一个相当广泛的话题,需要一些时间去理解,但它是值得的

如果您对数据结构之类的东西感兴趣,甚至会有关于如何使用bloom过滤器、哈希表和其他工具进行查找的解释

黑客能看到我在DLL函数中做什么吗特别是什么 为确定结果而执行的操作

他只能看到您导出的符号。 隐藏/导出符号的方法有很多。 例如:\属性\可见性隐藏

他能改变我从动态加载的dll返回的结果吗


如果通过共享库提供给api的输入被正确处理,那么在实现中检查缓冲区溢出等,我想应该没问题。用户可以控制提供给API并影响输出的输入。如果我在这里遗漏了什么,如果有人能纠正我,那就太好了。

局外人可以看到所有导出的函数签名,您可以使用depWalker并尝试。但据我所知,他们看不到内部的实现。如果您只返回true,外部用户也可以使用相同的函数创建自己的DLL,即返回true

您可以返回动态生成的代码,而不是仅返回true或false,并且可以在加载DLL后在主exe中验证代码


还有另一种方法可以使用序列号导出DLL中的函数,而不是使用*.def文件导出签名。您可以查看一下。

局外人可以看到所有导出的函数签名,您可以使用depWalker并尝试。但据我所知,他们看不到内部的实现。如果您只返回true,外部用户也可以使用相同的函数创建自己的DLL,即返回true

您可以返回一个动态生成的代码,而不是仅返回true o r false,加载DLL后,您可以验证主exe中的代码


还有另一种方法可以使用序列号导出DLL中的函数,而不是使用*.def文件导出签名。可能是这样的。

如果黑客已经破坏了系统,你的整个操作系统可以想象是在一个虚拟机中运行,每一个操作、每一个按键和每一个网络流量都是可读的/在黑客的控制下,而你、操作系统等都不知道这一事实。你几乎无法确保受损系统的安全,即黑客已经在你的系统上。我对黑客攻击和代码安全一无所知-这意味着你所做的任何事情都不太可能有效。我不知道一个简单的安全系统通过滚动代码的系统时间,甚至意味着什么。也许您应该概述您正试图防范的威胁以及您正在处理的场景。然而,在这一点上,我不确定这是否仍然是一个热门话题。可能更好-但您需要描述您的问题,而不是您提出的解决方案。这只是我们公司产品的一个控制应用程序,它将向客户销售以控制其产品。我的意思是,简单到不像银行应用程序那样安全,如果一个书呆子不能轻易入侵系统,对我们来说就足够了。如果这与许可证有关,那么你真的走错了方向。黑客不需要了解DLL的功能。他们可以编辑主可执行文件,这样就不用调用DLL,而是假装调用了并返回true。如果你想强制执行许可证,我强烈建议你买一个组件来做这件事——这不是你的专业领域,你不可能做对。除此之外,它还会影响你的合法客户,如果人们认为你的产品有足够的价值,那么你的产品仍然会受到黑客的攻击。如果黑客已经破坏了系统,你的整个操作系统可能会在虚拟机上运行,每一次操作,每一次按键和每一点网络流量都是可读的/在黑客的控制下,而你、操作系统等都不知道这一事实。你几乎无法确保受损系统的安全,即黑客已经在你的系统上。我对黑客攻击和代码安全一无所知-这意味着你所做的任何事情都不太可能有效。我不知道一个简单的安全系统通过滚动代码的系统时间,甚至意味着什么。也许您应该概述您正试图防范的威胁以及您正在处理的场景。然而,在这一点上,我不确定这是否仍然是一个热门话题。可能更好-但您需要描述您的问题,而不是您提出的解决方案。这只是我们公司产品的一个控制应用程序,它将向客户销售以控制其产品。我的意思是,简单到不像银行应用程序那样安全,如果一个书呆子不能轻易入侵系统,对我们来说就足够了。如果这与许可证有关,那么你真的走错了方向。黑客不需要了解DLL的功能。他们可以编辑主可执行文件,这样就不用调用DLL,而是假装调用了并返回true。如果你想强制执行许可证,我强烈建议你买一个组件来做这件事——这不是你的专业领域,你不可能做对。除此之外,它还会影响您的合法客户,如果人们认为您的产品足够有价值,您的产品仍将受到黑客攻击。如果您只返回true,外部用户也可以使用相同的函数创建自己的DLL,即返回true。很好的一点,我会改变返回类型。如果你只是返回真的,局外人也可以用相同的函数创建自己的DLL,即返回真的。很好的一点,我会改变返回类型。