【发布时间】:2017-11-23 14:04:55
【问题描述】:
我正在处理的项目的一个要求是能够在我的应用程序已经运行时将第 3 方功能插入到我的应用程序中。这些库将由我团队中的其他同事提供。我想出了以下内容:
typedef Foo*(*Creater)();
Creater createFn = resolveSomeHow(dllName, "create");
Foo* pFoo = createFn();
因此,每个库开发人员都必须定义一个Foo* create() 函数:
class Bar : public Foo {
}
extern "C" __declspec(dllexport) Foo* create() {
return new Bar();
}
问题是,在部署之后,态度不好的人可以创建一个带有Foo* create()函数的DLL,该函数返回一个带有恶意代码的Foo实例。我怎样才能防止这种情况?
我正在寻找一种不需要我依赖加密库或类似工具的解决方案。我知道,没有什么能阻止一个有足够决心但只是想让事情变得不那么容易的人。
【问题讨论】:
-
stackoverflow.com/questions/980170/… 可能是相关的。您的应用程序运行情况如何?它有提升的权限吗?这是一个安全漏洞。操作系统可能能够阻止任何不复杂的东西到达不允许的内存,但如果你想在你的最后停止事情,这可能需要高级内存管理,例如模块运行中的程序中的沙盒。这就是为什么 Google/Apple 在发布应用程序之前会筛选提交应用程序的原因。通常,您会将验证(信任)模块的责任推给最终用户。
-
你不能轻易阻止这一点。
-
这就是代码签名的目的。对已被审查为可接受的 DLL 进行签名,并让应用在调用
create()之前检查签名。然后你可以跳过未签名的 DLL。