2014-02-18 45 views
0

目前我正在嘗試查找是否從注入的DLL調用了我的可執行文件中的函數(Foo())。檢測函數是否被注入的DLL調用

我的第一個想法是打電話GetModule(NULL),然後檢查結果與GetModule("InjectedDllName")給出的地址,所有這些都在Foo()內完成。

高亮GetModule(NULL)將返回可執行文件的地址而不是當前調用模塊的地址。有沒有其他解決方案可以解決我的問題?

我的另一個想法是定位線程的起始地址,當foo()被調用,並檢查這是否在注入的dll地址空間,不知道如果這是可能的。

+0

「初始調用模塊」?如果這不是「可執行」的多餘名稱,它是什麼? –

+0

如果您打算將其用作安全機制,請注意惡意代碼可以無條件跳轉到現有的DLL函數調用。即如果'Foo()'調用Bar()',那麼'Foo'中的無條件跳轉仍然會調用Bar()。通常你必須查找返回地址。 – MSalters

+0

編輯這個問題有點讓人更容易理解。 – user3324551

回答

0

您可以使用EnumProcessModulesEx獲取加載的DLL的句柄,然後使用GetModuleFileNameEx來標識文件名,或檢查是否有任何重複導出的函數名稱,這可能會提示劫持/包裝。

但是,這可能無法防止用戶重命名DLL並將其封裝或其他高級調試工具操作的情況。這可能會變得非常混亂,以處理每一個案件,太技術性,不能在幾行解釋。

+0

謝謝你的快速回答,但我已經有了句柄和dll注入的名字。我只想知道我的可執行文件(my.exe)中的函數是否已經從dll的代碼(injected.dll)中調用。 – user3324551

+0

我認爲正確的做法是簽署DLL,對於任何其他黑客你不能確保DLL不是假的。 –