![動態(tài)修改其它進程的代碼,實現(xiàn)DLL注入_第1頁](http://file4.renrendoc.com/view/e095cd988f6e53b76928031fe1b70c03/e095cd988f6e53b76928031fe1b70c031.gif)
![動態(tài)修改其它進程的代碼,實現(xiàn)DLL注入_第2頁](http://file4.renrendoc.com/view/e095cd988f6e53b76928031fe1b70c03/e095cd988f6e53b76928031fe1b70c032.gif)
![動態(tài)修改其它進程的代碼,實現(xiàn)DLL注入_第3頁](http://file4.renrendoc.com/view/e095cd988f6e53b76928031fe1b70c03/e095cd988f6e53b76928031fe1b70c033.gif)
![動態(tài)修改其它進程的代碼,實現(xiàn)DLL注入_第4頁](http://file4.renrendoc.com/view/e095cd988f6e53b76928031fe1b70c03/e095cd988f6e53b76928031fe1b70c034.gif)
![動態(tài)修改其它進程的代碼,實現(xiàn)DLL注入_第5頁](http://file4.renrendoc.com/view/e095cd988f6e53b76928031fe1b70c03/e095cd988f6e53b76928031fe1b70c035.gif)
下載本文檔
版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
動態(tài)修改其它進程的代碼,實現(xiàn)DLL注入傳統(tǒng)的遠程進程控制方式有利用HOOK技術注入DLL,和利用遠線程在目標進程中建立新的執(zhí)行線程的方式.遠線程不被win9x所支持,而hook技術會對目標進程性能造成一定的影響.并具可以通過枚舉消息鏈的方式發(fā)現(xiàn).本文給出一種動態(tài)修改目標進程代碼,注入DLL到目標進程的方法,效率高,不需要額外線程.缺點是使用難度大于上面二種辦法,并且修改目標代碼的方法,受到編譯器的影響.使用不同的編譯器時,需要根據(jù)編譯器調(diào)整動態(tài)代碼修改方式.動態(tài)修改目標進程代碼,使其加載自已的DLL的思路如下:得到目標進程句柄.在目標進程中分配一塊可執(zhí)行可讀寫的內(nèi)存.寫入加載DLL的代碼到分配出來的內(nèi)存中.修正動態(tài)寫入的代碼中的地址(LoadLibrary地址,DLL名字地址).修改目標進程本身的代碼,使其執(zhí)行到被修改代碼時,跳到加載DLL的代碼處.加載完DLL后,修正目標進程原來的代碼,并跳回去繼續(xù)執(zhí)行.這個過程中需要注意的地方是.對寄存器的保護,堆棧的平衡.其中第5步需要修改一塊目標進程一定會執(zhí)行的代碼,消息循環(huán)是個不錯的地方.這里以記事本為例.打開ollydbg在TranslateMessage函數(shù)下斷點,中斷后如下:010029FC|./7514|jnzshortnotepad.01002A12010029FE|.|8D45E0|leaeax,dwordptrss:[ebp-20]01002A01|.150|pusheax;/pMsg01002A02|.|FF1598120001|calldwordptrds:[<&USER32.Translat>;/TranslateMessage01002A08|.18D45E0|leaeax,dwordptrss:[ebp-20]01002A0B|.150|pusheax;/pMsg01002A0C|.|FF1594120001|calldwordptrds:[<&USER32.Dispatch>;/DispatchMessageW01002A12|>/56pushesi01002A13|.56|pushesi01002A14|.8D45E0|leaeax,dwordptrss:[ebp-20]01002A17|.56|pushesi
|pusheax|calledi01002A18|.5001002A19|.FFD70x01002A02處是個不錯的地方,可以動態(tài)修改它.改成moveax,加載dll的代碼地址jmpeax需要注意的是,此程序基址在不同的系統(tǒng)上有可能不一樣,可以從PE頭中得到映像基址.所以此處的0x1002A02也許在你的機器上是另一個地址,請使用OD自行確定.(我是winxpsp2)找到修改點后,|pusheax|calledipusha//eax中是LoadLibrary函數(shù)地址,暫時為0xffffffff〃由程序動態(tài)改成真實函數(shù)地址moveax,0xffffffff//要加載的DLL的名字地址,暫時為0xffffffff〃由程序動態(tài)改成真實地址movebx,0xffffffffpushebx〃調(diào)用LoadLibrary,加載自已的DLL〃這樣DLL就注入到目標進程了calleaxpopa//恢復0x1002A02處的代碼,并跳回去執(zhí)行〃選執(zhí)eax寄存器是因為0x1002A02后面的代碼沒有直接使用到eaxmoveax,CODE_OFFSETmovdwordptr[eax],0x129815FFmovdwordptr[eax+4],0x458D0100jmpeax下面的代碼是在加載DLL后,修正目標進程原有的代碼moveax,CODE_OFFSETmovdwordptr[eax],0x129815FFmovdwordptr[eax+4],0x458D01000x129815FF0x458D0100即為原有代碼(字節(jié)順序是倒過來的,0x129815FF倒過來即是FF159812,0x458D0100倒過來即是00018D45,請注意和下面代碼對比01002A02|.|FF1598120001|calldwordptrds:[<&USER32.Translat>;/TranslateMessage01002A08|.|8D45E0|leaeax,dwordptrss:[ebp-20]其它基本上就是編碼了,例子如下,測試時,請自行編寫一個Test.dll,放在記事本同一個目錄下,不同的編譯器,不同的系統(tǒng)請自行修正一些細節(jié):(我是使用的Release模式,Debug模式代碼會不同的)#include<iostream>#include<windows.h>#include<psapi.h>usingstd::cout;usingstd::cin;usingstd::endl;〃記事本的映象基址,不同的系統(tǒng)可能不一樣〃這個值可以從PE頭中讀取#defineNOTEPAD_IMAGE_BASE0x1000000;#defineCODE_OFFSET0x1002A02;//用來測試的DLL名constchar*dllname="Test.dll";voidloaddll(){—asm{pusha//eax中是LoadLibrary函數(shù)地址,暫時為0xffffffff〃由程序動態(tài)改成真實函數(shù)地址moveax,0xffffffff//要加載的DLL的名字地址,暫時為0xffffffff〃由程序動態(tài)改成真實地址movebx,0xffffffffpushebx〃調(diào)用LoadLibrary,加載自已的DLL〃這樣DLL就注入到目標進程了calleaxpopa//恢復0X1002A02處的代碼,并跳回去執(zhí)行〃選執(zhí)eax寄存器是因為0X1002A02后面的代碼沒有直接使用到eaxmoveax,CODE_OFFSETmovdwordptr[eax],0x129815FFmovdwordptr[eax+4],0x458D0100jmpeax}}#pragmapack(push)//保存對齊狀態(tài)#pragmapack(1)〃設定為1字節(jié)對齊structJmpCode{byteop;char*address;WORDjmp;};#pragmapack(pop)intmain(){〃找記事本主窗口句柄HWNDwnd=FindWindow(NULL,"無標題-記事本");if(!IsWindow(wnd)){cout<<”記事窗口沒找到"<<std::endl;return1;}〃讀取進程ID,和進程句柄DWORDpid;HANDLEph;GetWindowThreadProcessId(wnd,&pid);ph=OpenProcess(PROCESS_ALL_ACCESS,false,pid);//在記事本進程中分配一頁可讀寫可執(zhí)行的虛擬內(nèi)存void*address=VirtualAllocEx(ph,NULL,4096,MEM_COMMIT,PAGE_EXECUTE_READWRITE);〃寫代碼的地址(寫在字符串后面)char*code=(char*)address+strlen(dllname)+1;if(NULL==address){cout<<”分配遠端內(nèi)存失敗”<<std::endl;return1;}DWORDws;//把代碼寫到內(nèi)存頁中WriteProcessMemory(ph,code,&loaddll,4000,&ws);//把DLL名寫到內(nèi)存頁中WriteProcessMemory(ph,address,dllname,strlen(dllname),&ws);//把loadlibrary的地址寫到Ueax0xfffffff處,把0xffffffff替換為真正的地址//code+9為eax0xffffffff中0xffffffff處的偏移,通過反匯編工具查看+9是為了跳過〃編譯器給loadll函數(shù)生成的框架HMODULEmodule=LoadLibrary("kernel32.dll");FARPROCpro=GetProcAddress(module,"LoadLibraryA");WriteProcessMemory(ph,code+9,&pro,4,&ws);//把dllname的地址寫到ebx0xffffffff處,把dllname作為參數(shù)WriteProcessMemory(ph,code+14,&address,4,&ws);//修改記事本消息循環(huán)處的代碼.JmpCodejmp;jmp.op=0xB8;jmp.address=code+6;〃這段代碼是moveax,地址jmp.jmp=0xE0FF;//jmpeaxaddress=(void*)COD
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2023九年級數(shù)學下冊 第27章 圓27.2 與圓有關的位置關系1點與圓的位置關系說課稿 (新版)華東師大版
- 2025從“京派、海派”之爭辨析民間委托炒股合同的效力
- 2025合同模板股東合作合同范本
- 2025借款合同版(單位住房)
- 2025勞動合同的有效要件范本
- 2025代工生產(chǎn)合同
- 清洗施工方案
- 路燈燈具整改施工方案
- 路燈改造工程施工方案
- Unit 3 Amazing animals PartA (說課稿)-2024-2025學年人教PEP版(2024)英語三年級上冊
- 五年級數(shù)學(小數(shù)乘除法)計算題專項練習及答案匯編
- 上海市楊浦區(qū)2024-2025學年八年級上學期英語期末考卷(含筆試答案無聽力答案、原文及音頻)
- 2024年蘇州農(nóng)業(yè)職業(yè)技術學院高職單招語文歷年參考題庫含答案解析
- 2025年北京生命科技研究院招聘筆試參考題庫含答案解析
- 銀行金融機構(gòu)銀行金融服務協(xié)議
- GB/T 27697-2024立式油壓千斤頂
- 《消防機器人相關技術研究》
- 游泳館安全隱患排查
- 《媒介社會學》課件
- 項目設計報告范文高中
- 成人手術后疼痛評估與護理團體標準
評論
0/150
提交評論