導入表注入dll其實就是給程序的導入表添加一個dll和相應函數,程序在被載入時,系統會自動加載該dll,從而實現dll注入。
我在驅動實現修改導入表的方法就是使用PsSetLoadImageNotifyRoutine函數創建回調,在回調中修改導入表。
修改導入表的過程如下:
1,申請一塊內存,將原來的導入表和自己添加的項拷貝到這塊內存。
2,修改pe頭的導入表偏移,使其指向新導入表。
經過以上修改還不夠,仍有部分程序不能正常運行,或不能成功注入dll。
原因如下:
1,程序有綁定導入表,就直接使用了,從而沒有加載你的dll。解決辦法就是清空綁定導入表。
2,有的編譯器編譯的程序沒有IAT的偏移與大小,此時系統會檢查導入表的範圍,因爲你申請的內存在pe範圍之外,系統出錯。所以解決方法就是自己填充IAT,使其指向原來的導入表位置。
3,另外,在修改pe時要去除寫保護,此時需要修改先前模式。
代碼見http://download.csdn.net/detail/uncia_me/9717160