2013-02-20 114 views
2

我一直在尋找AutoHotkey_L源代碼(這是C++),目的是修改它以控制爲了我們正在開發的應用程序的安全目的可以調用哪些DLL調用。在源代碼中有一個預處理器指令,它使得DLL功能非常簡單,但我們仍然需要爲應用程序的目的進行一些DLL調用,我們只是想要嚴格控制這些調用,而不是允許DLL調用整個WinAPI 。在AutoHotkey_L中是否有修改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:

#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

該標誌的原因更有可能是當開發DLL調用功能時,他們需要將其關閉以查看它是否導致問題或其他問題。據我所知,大約有15人自己編譯了AutoHotkey。不經常討論修改源代碼。用戶的工作流程如何工作?他們是否直接編寫AutoHotkey代碼? – FakeRainBrigand 2013-02-21 14:19:10

+0

正確的是,用戶將通過編寫AutoHotkey腳本來開發自己的鍵盤佈局。基本上我們的擔心是給他們足夠的靈活性,因爲他們需要編寫自己的腳本,而不包括可能允許惡意用戶造成損害的AutoHotkey功能(刪除文件,下載惡意的Internet內容等)。我們的想法是修改AutoHotkey源代碼,並將我們自己的AutoHotkey版本與我們正在部署的應用程序捆綁在一起。 – DanHam 2013-02-21 21:04:19

回答

1

預處理器中加入指令,以使AutoHotkey的是在編寫x64兼容的DllCall代碼之前爲x64構建。這對限制可以調用哪些外部函數沒有幫助。

要限制可以調用哪些函數或dll,可以修改script2.cpp中定義的GetDllProcAddress()。例如,如果要啓用的所有功能都位於您構建的dll中,則可以將其預加載到sStdModule陣列中,並禁用顯式指定dll文件的代碼。您可能還需要修改BIF_DllCall頂部附近的switch語句,以禁止通過地址調用函數。

請注意,即使限制可以調用哪些函數,用戶仍有可能通過指定不正確的參數類型來利用DllCall。更安全的方法是編寫自己的「內置」函數,即使它們只是圍繞特定外部函數的簡單包裝。