DLL註入,輸入法註入,驅動註入,原始元素是什麽?
輸入法註入利用DLL數據鏈接庫文件。妳可以簡單的這麽理解:妳想修改壹個東西,然後寫壹個程序,把要修改的內容和函數保存在壹個DLL中,然後註入到輸入法的進程模塊中,這樣只要輸入法運行,妳的函數就會壹直保持運行狀態,從而達到修改某個東西的目的。至於系統驅動註入,應該是程序把自己的外接程序和被驅動的sys文件關聯起來。司機有更高的權限。很多驅動都是在ring0層工作的,而且驅動比操作系統中的安全軟件加載的早,因為它們是在ring3層工作的。所謂DLL註入,就是把壹個DLL放到壹個進程的地址空間裏,讓它成為那個進程的壹部分。要實現DLL註入,需要先打開目標進程。編輯壹下這個例子:hremoteprocess = open PROCESS(process _ create _ thread |//允許遠程創建線程PROCESS_VM_OPERATION | //允許遠程VM操作PROCESS_VM_WRITE,//允許遠程VM寫入FALSE,DwRemoteProcessId)因為我們需要寫入遠程進程的內存地址空間,稍後建立遠程線程,所以需要申請足夠的權限(PROCESS _ CREATE _ THREAD,VM_OPERATION,VM_WRITE)。流程打不開,就無法思考未來的運營。進程打開後,遠程線程就可以建立了,但是不要著急,先想想這個遠程線程的線程功能是什麽?我們的目標是註入壹個DLL。我們知道,我們可以用LoadLibrary將壹個DLL加載到這個進程的地址空間中。所以很自然的想到,如果可以在目標進程中調用LoadLibrary,就可以將DLL加載到目標進程的地址空間中。是啊!就是這樣。這裏只使用了壹次遠程線程。建立的遠程線程的線程函數是LoadLibrary,參數是要註入的DLL的文件名。(這裏需要妳自己思考。有沒有註意到線程函數ThreadProc和LoadLibrary函數非常相似,返回值和參數個數都壹樣?)還有壹個問題,LoadLibrary函數的地址在哪裏?也許妳會說,這個簡單,GetProcAddress就能搞定。於是代碼出來了。char * pszLibFileRemote = " my . dll ";PTHREAD _ START _ ROUTINE pfnStartAddr =(PTHREAD _ START _ ROUTINE)GetProcAddress(GetModuleHandle(" kernel 32 ")," loadlibrary a ");create remote thread(hRemoteProcess,NULL,0,pfnStartAddr,pszLibFileRemote,0,NULL);但是沒有!別忘了,這是壹個遠程線程,不在妳的進程中,而是pszLibFileRemote指向妳的進程中的數據。當它到達目標進程時,這個指針不知道它去了哪裏。同樣,pfnStartAddr的代碼到了目標進程也不知道是什麽,也不知道是不是妳想要的LoadLibraryA。但是,問題總是可以解決的。Windows有壹些強大的API函數,可以在目標進程中分配內存,將妳進程中的數據復制到目標進程中。所以pszLibFileRemote的問題就可以解決了。char * pszLibFileName = " my.dll//註意,這必須是完整的路徑文件名,除非在系統目錄下;原因是大家想壹想。//計算DLL IntCB的路徑名所需的內存空間=(1+lstr Lena(PSZLibfilename))* Sizeof(char);//使用VirtualAllocEx函數在遠程進程的內存地址空間中分配DLL文件名緩沖區pszlibfileremote =(char *)VirtualAllocEx(hremote process,null,CB,mem _ commit,page _ read write);//使用WriteProcessMemory函數將DLL的路徑名復制到遠程進程的內存空間ireturncode = WriteProcessMemory(hremoteprocess,pszlibfileremote,(pvoid) pszlibfilename,CB,null);好了,現在目標進程也知道pszLibFileRemote了,但是pfnStartAddr好像不好處理。如何才能知道目標進程中LoadLibraryA的地址?其實Windows已經為我們解決了這個問題。函數LoadLibraryA在Kernel32.dll的核心DLL裏,這個DLL很特別。無論哪個進程,Windows總是加載到同壹個地址。所以妳進程中的LoadLibraryA的地址和目標進程中的LoadLibraryA的地址是壹樣的(其實這個DLL中的所有函數都是壹樣的)。至此,DLL註入結束。