//為了簡化**,下面程式中去掉了對出錯處理的**,實際應用中應該考慮程式執行時可能的出錯:
#include "stdafx.h"
static pimage_nt_headers nt_header;
#define imagesize (nt_header->optionalheader.sizeofimage)
#define export_tabel (nt_header->optionalheader.datadirectory[0].virtualaddress)
#define reloc_tabel (nt_header->optionalheader.datadirectory[5].virtualaddress)
static void reloccode (pbyte image, lpbyte injectbase) // 完成**的重定位
basereloc = (pimage_base_relocation) reloctable; }}
int loadapi(lpbyte injectbase)// 用於完成api函式的匯入,引數為要插入**處位址
first->u1.function = (dword * )getprocaddress(hdll, name);
//上面能直接引用getprocaddress是由於本地和遠端程序中該函式位址都是相同的
if(first->u1.function == null)
return 0;
} }return 1;
}dword remotethread_main(hinstance hinstance) //遠端要執行的**,在這裡只演示messagebox
dword threadentry(lpbyte imagebase) /*** 遠端執行緒入口 ***/
static dword gettargetprocessid() //獲取遠端程序 pid
int apientry winmain(hinstance hinstance,hinstance hprevinstance,lpstr lpcmdline, int ncmdshow)
return 0;
}
遠端執行緒技術指的是通過在其他程序中建立新執行緒的方法進入該程序的記憶體位址空間,從而獲得對該程序的控制權的方法。
在程序中可以通過createthread函式建立執行緒,被建立的新執行緒與主線程共享位址空間以及其他的資源。同樣,通過createremotethread函式可以在其他程序內建立新執行緒,新建立的的遠端執行緒可以共享遠端程序的位址空間。
所以通過在遠端程序中建立新的方法,就可以進入到遠端程序的記憶體位址空間,也就擁有了和那個遠端程序相當的許可權,可以在遠端程序中執行**,從而達到遠端程序控制、程序隱藏的目的。
Dll注入 修改PE檔案頭
dll注入,除了常見的遠執行緒注入,掛鉤和修改登錄檔以外還可以通過修改pe檔案頭來達到注入目的,廢話少說先上菜。pe檔案經常會呼叫外部dll檔案,而需要呼叫的dll檔案都會在pe檔案說明,通過 nt頭 可選頭 匯入表 可以找到匯入表,而匯入表就是對需要匯入的每個dll的說明,它實際上是乙個20個位元...
PE檔案本地DLL注入實現
之前寫過乙個利用遠端執行緒注入dll的工具,大致過程如下 1.使用openprocesstoken lookupprivilegevalue adjusttokenprivileges函式修改當前程序的的訪問令牌,獲得除錯許可權。2.openprocess開啟目標程序,用virtualallocex...
注入系列 遠端執行緒注入
1.使用程序pid開啟程序,獲得控制代碼 2.使用程序控制代碼申請記憶體空間 3.把dll路徑寫入記憶體 4.建立遠端執行緒,呼叫loadlibrary 5.釋放收尾工作或者解除安裝dll 實現 bool cinjectdlg zwcreatethreadexinjectdll dword dwpr...