在AutoHotkey_L中是否有用于修改DLL调用功能的标准协议?

时间:2013-02-20 19:23:46

标签: c++ security dll autohotkey

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

我假设有用于消除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

1 个答案:

答案 0 :(得分:1)

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

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

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