apc注入的原理是利用當執行緒被喚醒時
apc中的註冊函式會被執行的機制,並以此去執行我們的
dll載入**,進而完成
dll注入的目的,其具體流程如下:
1)當exe
裡某個執行緒執行到
sleepex()
或者waitforsingleobjectex()
時,系統就會產生乙個軟中斷
(或者是messagebox彈窗的時候不點
ok的時候也能注入)。
2)當執行緒再次被喚醒時,此執行緒會首先執行
apc佇列中的被註冊的函式。
3)利用
queueuserapc()
這個api
可以在軟中斷時向執行緒的
apc佇列插入乙個函式指標,如果我們插入的是
loadlibrary()
執行函式的話,就能達到注入
dll的目的。
核心函式:
侷限:
這種注入方式侷限性很明顯,一是必須要等待時機,而是當注入成功後,sleepex或者其他等待函式直接就會跳過當前等待繼續往下走,這樣可能造成被注入程式的不穩定行,經常導致被注入程式崩潰。
**:
// loadexewin32.cpp : 定義控制台應用程式的入口點。
//#include "stdafx.h"
#include #include #include #include #include #pragma comment(lib, "shlwapi.lib")
#pragma comment(lib,"ntdll.lib")
using namespace std;
//根據程序名字獲取pid
dword getpidfromname(wstring wsprocessname)
processentry32w pe = ;
bool bok;
for (bok = process32firstw(hsnapshot, &pe); bok; bok = process32nextw(hsnapshot, &pe))
}closehandle(hsnapshot);
return 0;
}//把wccacheindllpath dll檔案注入程序wsprocessname
bool injection_apc(const wstring &wsprocessname ,const wchar wccacheindllpath)
pvoid lpdata = virtualallocex(hprocess,
null,
1024,
mem_commit,
page_execute_readwrite);
dword dwret;
if (lpdata)
closehandle(hprocess);
//開始注入
threadentry32 te = ;
//得到執行緒快照
handle handlesnap = createtoolhelp32snapshot(th32cs_snapthread ,0);
if (invalid_handle_value == handlesnap)
bool bstat = false;
//得到第乙個執行緒
if (thread32first(handlesnap,&te))
//關閉控制代碼
closehandle(handlethread);
} }
//迴圈下乙個執行緒
} while (thread32next(handlesnap,&te));
} closehandle(handlesnap);
return bstat;
}//adds a user-mode asynchronous procedure call (apc)
int main(int argc, char* argv)
然後寫乙個測試dll:
然後再寫乙個被注入程式:
測試結果:
注入自己的程式成功:
隨便嘗試了下注入qq.exe,直接崩潰退出了。
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...
通過非同步過程呼叫 APC 注入DLL
關於apc的介紹,可以參考msdn對asynchronous procedure calls的介紹 索引apcs 下面是簡單翻譯的一段文字。apc asynchronous procedure calls,非同步過程呼叫 是指在乙個特定的執行緒環境中非同步的執行 當乙個apc被新增到乙個執行緒的ap...