Dll注入技術之輸入法注入

2021-06-21 01:26:52 字數 2904 閱讀 6221

dll注入技術之輸入法注入

輸入法注入原理是利用windows系統中在切換輸入法需要輸入字元時,系統就會把這個輸入法需要的ime檔案裝載到當前程序中,而由於這個ime檔案本質上只是個存放在c:\windows\system32目錄下的特殊的dll檔案,因此我們可以利用這個特性,在ime檔案中使用loadlibrary()函式待注入的dll檔案。

1.編寫ime檔案

輸入法的ime檔案其實就是個顯式匯出19個特殊函式的dll檔案。如下圖所示:

//將字串或字元轉換成目標字串

imeconfigure                //配置當前ime引數函式

imedestroy                  //退出當前使用的ime

imeescape                   //應用軟體訪問輸入法的介面函式

imeinquire                  //啟動並初始化當前ime輸入法

imeprocesskey               //ime輸入鍵盤事件管理函式

imeselect                   //啟動當前的ime輸入法

imesetactivecontext         //設定當前的輸入處於活動狀態

imesetcompositionstring     //由應用程式設定輸入法編碼

imetoasciiex                //將輸入的鍵盤事件轉換為漢字編碼事件

notifyime                   //ime事件管理函式

imeregisterword             //向輸入法字典註冊字串

imeunregisterword           //刪除被註冊的字串

imegetregisterwordstyle  

imeenumregisterword  

uiwndproc        //使用者介面介面函式

statuswndproc    //狀態視窗註冊函式

compwndproc      //輸入編碼視窗註冊函式

candwndproc      //選擇漢字視窗註冊函式

如果想編寫輸入法程式,那麼這19個匯出函式都需要仔細的研究,但是對於只想實現注入的我們,現在只需要對imeinquire()有比較深的認識就可以了。imeinquire()是啟動並初始化當前ime輸入法函式,他的宣告如下:

bool winapi imeinquire(lpimeinfo lpimeinfo,lptstr lpszuiclass,lpctstr lpszoption)

第乙個引數lpimeinfo比較重要,用於輸入對ime輸入法初始化的內容結構,如果這個結構填寫錯誤,就會導致輸入法不能正常執行。第二個引數是輸入乙個class類名,我們需要先使用registerclas***()註冊出乙個視窗類。初始化imeinquire()主要**如下所示:

//啟動並初始化當前ime輸入法

bool

winapi imeinquire(lpimeinfo lpimeinfo,

lptstr

lpszuiclass,

lpctstr

lpszoption)    

註冊出乙個視窗類的主要**如下:

bool

imeclass_register(

hinstance

hinstance)    

clsname_ui是乙個巨集定義,如下:

#define clsname_ui _t("dllclassname")

在dllmain程序載入的過程中註冊視窗類,主要**如下:

case

dll_process_attach:  

if(!imeclass_register(hinstdll)) 

return

false;  

//這裡填寫要load的dll的路徑

g_hmodule = loadlibrary(_t("d:\\mydll\\imeinject\\debug\\mfcimeinjectdll.dll"

));  

if(!g_hmodule)  

break

;  

ps: 編寫dll時需要注意,當作ime檔案的dll需要有版本資訊,version資源中filetype為vft_drv, filesubtype為vft2_drv_inputmethod,否則呼叫imminstallime安裝時會失敗

2.編寫裝載輸入法程式:

裝載輸入法的基本邏輯就是將他們編寫的輸入法設定為預設輸入法,這樣只要系統中所有程序都會預設載入他們的惡意輸入法程式。

黑客們首先需要得到系統當前的預設的輸入法,以便恢復時使用。然後需要將ime檔案拷貝到c:\windows\system32目錄下,最後將裝載成功後將我們的輸入法設定成為預設輸入法,主要**如下:

void

cmfcimeinjectdlg::onbnclickedattach()  

}  3.編寫解除安裝輸入法:

當新建程序不再需要注入時,我們就需要解除安裝輸入法。解除安裝輸入法時需要先判定系統當前的輸入法不是其原有預設輸入法,確認無誤後將系統的預設輸入法恢復後,再將惡意輸入法解除安裝即可,主要**如下:

void

cmfcimeinjectdlg::onbnclickeddettach()  

}  輸入法注入的實現需要對輸入法ime檔案的生成有所了解,api使用較多,所以實現起來比較難,但是由於系統存在多個輸入法,被注入程序很難判別當前是可信賴輸入法還是用於注入的惡意輸入法,所以難以阻止,大大提高了注入的機率。

DLL注入技術之輸入法注入

輸入法注入原理是利用windows系統中在切換輸入法需要輸入字元時,系統就會把這個輸入法需要的ime檔案裝載到當前程序中,而由於這個ime檔案本質上只是個存放在c windows system32目錄下的特殊的dll檔案,因此我們可以利用這個特性,在ime檔案中使用loadlibrary 函式待注入...

注入技術 修改輸入表完成DLL注入

參考自 加密與解密 第4版 第12章 注入技術 dll檔案 細節省略,通過使用messagebox函式來顯示訊息框,僅此而已。關於dll檔案的編寫,也是日後要好好學習的點。dll檔案也有自己的主函式,博主未編寫用於攻擊的dll 即使編寫了也不敢公然發 故在此一筆帶過了。本文的重點是修改輸入表,故我們...

注入Hook技術 DLL注入

winnt win2000 winxp中的遠執行緒技術之一 dll注入 什麼是遠執行緒?我們知道用createthread可以在當前程序裡建立乙個執行緒,遠執行緒與此類似,只不過是在其他程序中建立乙個執行緒,用api函式createremotethread。這個遠執行緒建立後就與建立它的程序無關了,...