執行緒被喚醒時apc中的註冊函式會被執行,因此使用queueuserapc向apc佇列插入函式即可完成注入
#include #include #include bool apcinject(char *,char *);
dword getprocessidbyprocessname(char *);
bool getallthreadidbyprocessid(dword,pdword,pdword);
void main ()
bool apcinject(char *processname,char *dllname)
//獲取程序id
dword threadid[max_path]=;
dword dwthreadidlength=0;
bool ret = getallthreadidbyprocessid(dwprocessid,threadid,&dwthreadidlength);
if (false == ret)
//獲取注入程序所有執行緒id
handle hprocess = openprocess(process_all_access,false,dwprocessid);
if (null == hprocess)
//開啟注入程序
size_t dwdllpathlen = 1+strlen(dllname);//dll名稱長度
lpvoid bassaddress = virtualallocex(hprocess,null,dwdllpathlen,mem_commit | mem_reserve,page_execute_readwrite);
if (null == bassaddress)
//程序空間申請記憶體
size_t dwret;
writeprocessmemory(hprocess,bassaddress,dllname,dwdllpathlen,&dwret);
if (dwret != dwdllpathlen)
//寫入dll到程序記憶體
lpvoid ploadlibraryafunc = getprocaddress(getmodulehandlea("kernel32.dll"), "loadlibrarya");
if (null == ploadlibraryafunc)
//獲取loadlibrary函式位址
DLL注入 APC注入
apc注入的原理是利用當執行緒被喚醒時 apc中的註冊函式會被執行的機制,並以此去執行我們的 dll載入 進而完成 dll注入的目的,其具體流程如下 1 當exe 裡某個執行緒執行到 sleepex 或者waitforsingleobjectex 時,系統就會產生乙個軟中斷 或者是messagebo...
DLL注入 APC注入
apc注入 apc注入的原理是利用當執行緒被喚醒時apc中的註冊函式會被執行的機制,並以此去執行我們的dll載入 進而完成dll注入的目的,其具體流程如下 1 當exe裡某個執行緒執行到sleepex 或者waitforsingleobjectex 時,系統就會產生乙個軟中斷 或者是messageb...
通過非同步過程呼叫 APC 注入DLL
關於apc的介紹,可以參考msdn對asynchronous procedure calls的介紹 索引apcs 下面是簡單翻譯的一段文字。apc asynchronous procedure calls,非同步過程呼叫 是指在乙個特定的執行緒環境中非同步的執行 當乙個apc被新增到乙個執行緒的ap...