2012-02-08 107 views
-1

我正在尋找一個快速指南,以基本的dll鉤在windows與C,但我可以找到的所有指南都不是C,或不是Windows。在C和windows中掛鉤

(該DLL不是Windows的一部分,而是一個第三方程序)

我明白一個道理,但我不知道該怎麼去做。

我有預先存在的C++源代碼,顯示了我需要掛鉤的內容,但是我沒有任何C庫或知道如何從頭開始掛鉤。

+1

掛鉤什麼?圖書館電話?系統事件鼠標和鍵盤的活動?還有別的嗎? – Rup 2012-02-08 17:35:10

+0

目前還不清楚你想要做什麼,但如果通過「勾住」你的意思是我的意思,那是一種非常脆弱,倒退,駭人的做法,你不應該這樣做。由於訂單問題,如果安裝了多個掛鉤(如果以後卸載的話甚至更多)掛鉤會非常糟糕。爲什麼不發佈一個關於你試圖達到的目標的問題,而不是問如何從20世紀80年代的DOS TSR中複製錯誤的解決方案? – 2012-02-08 17:37:04

+1

C++代碼是做什麼的?與鉤子相關的Windows API在C和C++中將會相同。它們都是C函數。 – 2012-02-08 17:40:40

回答

0

走彎許可條款是相當嚴格的。

如果您只想鉤住DLL的某些功能,那麼在您要掛鉤的應用程序的DLL應用程序上使用DLL放置攻擊通常會更便宜。爲了做到這一點,請提供一個具有相同導出集的DLL,並轉發那些您不關心的內容並攔截其餘的內容。無論是C還是C++都無關緊要。即使對於大量出口,這在技術上通常也是可行的,但對導出的數據有限制,並且您不知道或無法辨別所使用的調用約定。

如果必須使用掛鉤,有許多方法,包括寫一個發射器和重寫預填充(由loader)IAT指向您的代碼,同時啓動的應用程序的主線程仍然處於掛起狀態(請參見相應的CreateProcess標誌)。否則,您可能需要至少一點裝配知識才能使跳轉正確。在那裏有許多自由許可的反彙編引擎可以讓你計算補丁的正確偏移量(例如,因爲你不想修補多字節操作碼的中間值)。

您可能需要再次編輯您的問題以包含您在註釋中所寫的內容(關鍵字:「DLL掛鉤」)。

+0

替換DLL不是一個選項,它非常大,這會違反程序的TOS(這是整個鉤子的重點,而不僅僅是監控網絡數據包)我不認爲[Win32 CodeHook](http:// www.kbasm.com/codehook.html)庫會有什麼用處? – 2012-02-08 19:33:05

+0

我在任何地方寫過「替換」嗎?請做一個網絡搜索什麼是「DLL佈局攻擊」(或者如果你願意的話,「DLL劫持」);)......很可能你不需要移動任何文件,而是將你自己的文件移動到首先被檢查的地方通過加載器和API中的機制,如'LoadLibrary'。現在有很多隨時可用的圖書館,但我幾乎很難判斷哪個圖書館適合您的需求(從技術角度而言,許可證方面)。順便說一句:如果你現在將所有的約束條件逐一添加到原始的(或編輯的)問題中,將會非常好。 – 0xC0000022L 2012-02-08 19:46:11

0

通過LoadLibrary()加載DLL

這是衆所周知的不好的做法。

您可能想查找臭名昭着的惡意軟件開發者「witch」或「hctiw」。他有一個臭名昭着的原因 - 他用LoadLibrary()加載DLL。儘量避免這樣的不良習慣。

+3

你似乎沒有看過這個問題。 – 2012-11-07 21:29:07