c++ - AutoHotkey_L 中是否有修改 DLL 调用功能的标准协议(protocol)?

标签 c++ security dll autohotkey

我一直在查看 AutoHotkey_L 源代码(C++),目的是为了我们正在开发的应用程序的安全目的对其进行修改以控制可以进行哪些 DLL 调用。源代码中有一个预处理器指令可以非常简单地消除 DLL 功能,但我们仍然需要为应用程序进行一些 DLL 调用,我们只是希望严格控制这些调用而不是允许 DLL 调用整个 WinAPI .

我假设存在用于消除 DLL 调用功能的预处理器指令,因为其他开发人员也有类似的愿望来限制从 AutoHotkey 进行 DLL 调用的能力。我的问题是是否有类似的方法来控制 DLL 功能而不完全消除它。或者我最好的选择是深入研究负责进行 DLL 调用的源代码方法并弄清楚我可以在哪里控制传入的参数以仅允许某些调用?我查看了 AutoHotkey 论坛,但没有找到任何有用的信息。

如果有帮助,这里是指令如何控制 DLL 调用的快速片段:

这是来自配置头文件(config.h 第 9-14 行)的预处理器定义:

#ifdef _MSC_VER
    #if defined(WIN32_PLATFORM) || defined(_WIN64)
    #define ENABLE_DLLCALL
    #define ENABLE_REGISTERCALLBACK
    #endif
#endif

这里是一个入口点示例,其中 ENABLE_DLLCALL 指令控制是否可以访问 DLL 功能(script.cpp 第 7910-7916 行)。作为引用,这里的 bif 变量是一个 BuiltInFunctionType,它被分配给被调用的内置函数,然后被添加到一个返回的 Func 对象中:

#ifdef ENABLE_DLLCALL
else if (!_tcsicmp(func_name, _T("DllCall")))
{
    bif = BIF_DllCall;
    max_params = 10000; // An arbitrarily high limit that will never realistically be reached.
}
#endif

最佳答案

添加了预处理器指令,以便在编写与 x64 兼容的 DllCall 代码之前为 x64 构建 AutoHotkey。这对限制可以调用哪些外部函数没有帮助。

要限制可以调用哪些函数或dll,您可以修改在script2.cpp 中定义的GetDllProcAddress()。例如,如果您要启用的所有功能都在您构建的 dll 中,您可以将其预加载到 sStdModule 数组中并禁用显式指定 dll 文件的代码。您可能还需要修改 BIF_DllCall 顶部附近的 switch 语句,以禁止通过地址调用函数。

请注意,即使您限制可以调用哪些函数,用户仍有可能通过指定不正确的参数类型来利用 DllCall。一种更安全的方法是编写您自己的“内置”函数,即使它们只是特定外部函数的简单包装。

关于c++ - AutoHotkey_L 中是否有修改 DLL 调用功能的标准协议(protocol)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14988230/

相关文章:

c++ - 使用可执行文件和 DLL 项目配置 Qt Creator

c# - 尝试加载程序集 ID 65675 时 Microsoft .NET Framework 中发生错误

c++ - C++ 切片的潜在解决方法?

c++ - OpenGL 程序适用于 AMD 但不适用于 NVIDIA

c++ - 如何验证 LLVM "ret"指令是否返回无效?

c++ - 机器 Epsilon 精度差异

ios - 火力地堡 ".read": "auth != null && auth.uid == $uid" not working as expected

c# - 如何检查我的程序是否真的以管理员​​身份运行?

c# - 拦截 ASP NET MVC POST 值

c++ - 带有 C++ DLL 的 Excel-VBA 有时会崩溃