「暴力」注入explorer
pjf([email protected])
寫點無聊的東西,一段時間blog弄得不成樣子了。
向乙個執行中的程序注入自己的**,最自然莫過於使用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)}}
......
其中injectdll:
void injectdll(handle hprocess, handle hthread, dword param)
loadlibrarya被呼叫後即將你的dll加載入目標程序explorer,執行是在目標程序的某
個執行緒環境中,一般你的dll可以這時建立自己的執行緒。
這樣,整個過程雖然有些暴力(原因很明顯,比如原本userapcpending為true的執行緒
被弄成了false等等),並且僅是一次性插入,缺陷是明顯的,不過插入過程的確更為隱蔽。
針對使用這種的「無恥」方法的程式
ntqueueapcthread的合理監測等等。
暴力」注入Explorer
暴力 注入explorer pjf jfpan20000 sina.com 向乙個執行中的程序注入自己的 最自然莫過於使用createremotethread,如今遠執行緒注入已經是氾濫成災,同樣的監測遠執行緒注入 防止遠執行緒注入的工具也 舉不勝舉,乙個木馬或後門啟動時向explorer或ie的注...
暴力注入Explorer
暴力 注入explorer pjf jfpan20000 sina.com 向乙個執行中的程序注入自己的 最自然莫過於使用createremotethread,如今遠執行緒注入已經是氾濫成災,同樣的監測遠執行緒注入 防止遠執行緒注入的工具也 舉不勝舉,乙個木馬或後門啟動時向explorer或ie的注...
暴力」注入Explorer
暴力 注入explorer pjf jfpan20000 sina.com 向乙個執行中的程序注入自己的 最自然莫過於使用createremotethread,如今遠執行緒注入已經是氾濫成災,同樣的監測遠執行緒注入 防止遠執行緒注入的工具也 舉不勝舉,乙個木馬或後門啟動時向explorer或ie的注...