青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

聚星亭

吾笨笨且懶散兮 急須改之而奮進
posts - 74, comments - 166, trackbacks - 0, articles - 0
  C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

[轉載] 檢測隱藏進程

Posted on 2009-04-05 17:31 besterChen 閱讀(970) 評論(0)  編輯 收藏 引用 所屬分類: 軟件安全中的JJXX
本人收集與網絡,不知原作者是誰……

一:序言
  下列情況不在討論之中(沒進程)
  1 通過CreateRemoteThread Inject代碼到另一個進程(有種病毒就用這種方法,實現內存感染的;其實還有更多應用)
  2 通過CreateRemoteThread LoadLibray一dll到另一個進程(屏蔽Ctrl+Alt+Del,就是通過這種方法和SetWindowLog實現)


二:進程隱藏
  1 Hook/InlineHook Api NtQuerySystemInformation(taskmgr.exe就是用這個函數得到Process list)
  2 Hook/InlineHook Api Process32Next
  3 把要隱藏的進程的EPROCESS從LIST_ENTRY中摘除
    a)ring0下驅動實現,注意:Nt/2000/xp/2003中PID和FLINK在EPROCESS中的offset不盡相同
    b)ring3下利用call gate結合\Device\PhysicalMemory內核對象實現
 

三:檢測進程隱藏
  我們重要討論一下殺毒軟件Kaspersky和rootkit檢測工具Icesword的兩種方法:
 
  1 kaspersky的方法:kaspersky從6.0中加入了主動防御功能,它detour了SwapContext.

lkd> u KiSwapThread L20
nt!KiSwapThread:
804dd66e 8bff             mov     edi
,edi
804dd670 
56               push    esi
804dd671 
57               push    edi
804dd672 3ea120f0dfff     mov     eax
,ds:[ffdff020]
804dd678 8bf0             mov     esi
,eax
804dd67a 8b4608           mov     eax
,[esi+0x8]
804dd67d 85c0             test    eax
,eax
804dd67f 8b7e04           mov     edi
,[esi+0x4]
804dd682 0f8557ba0000     jne     nt!KiSwapThread+0x16 (804e90df)
804dd688 
53               push    ebx
804dd689 0fbe5e10         movsx   ebx
,byte ptr [esi+0x10]
804dd68d 33d2             xor     edx
,edx
804dd68f 8bcb             mov     ecx
,ebx
804dd691 e86bffffff       call    nt!KiFindReadyThread (804dd601)
804dd696 85c0             test    eax
,eax
804dd698 0f843e990000     je      nt!KiSwapThread+0x2e (804e6fdc)
804dd69e 5b               pop     ebx
804dd69f 8bc8             mov     ecx
,eax
804dd6a1 e80cf7ffff       call    nt!KiSwapContext (804dcdb2)
804dd6a6 84c0             test    al
,al
804dd6a8 8a4f58           mov     cl
,[edi+0x58]
804dd6ab 8b7f54           mov     edi
,[edi+0x54]
804dd6ae 8b3570864d80     mov     esi
,[nt!_imp_KfLowerIrql (804d8670)]
804dd6b4 0f85d10a0100     jne     nt!KiSwapThread+0x56 (804ee18b)
804dd6ba ffd6             call    esi
804dd6bc 8bc7             mov     eax
,edi
804dd6be 5f               pop     edi
804dd6bf 5e               pop     esi
804dd6c0 c3               ret

lkd> u KiSwapContext L20
nt!KiSwapContext:
804dcdb2 83ec10           sub     esp
,0x10
804dcdb5 895c240c         mov     
[esp+0xc],ebx
804dcdb9 
89742408         mov     [esp+0x8],esi
804dcdbd 897c2404         mov     
[esp+0x4],edi
804dcdc1 892c24           mov     
[esp],ebp
804dcdc4 8b1d1cf0dfff     mov     ebx
,[ffdff01c]
804dcdca 8bf1             mov     esi
,ecx
804dcdcc 8bbb24010000     mov     edi
,[ebx+0x124]
804dcdd2 89b324010000     mov     
[ebx+0x124],esi
804dcdd8 8a4f58           mov     cl
,[edi+0x58]
804dcddb e8d9000000       call    nt!SwapContext (804dceb9)
804dcde0 8b2c24           mov     ebp
,[esp]
804dcde3 8b7c2404         mov     edi
,[esp+0x4]
804dcde7 8b742408         mov     esi
,[esp+0x8]
804dcdeb 8b5c240c         mov     ebx
,[esp+0xc]
804dcdef 83c410           add     esp
,0x10
804dcdf2 c3               ret


lkd> u SwapContext L10
nt!SwapContext:
804dceb9 0ac9             or      cl
,cl
804dcebb 26c6462d02       mov     byte ptr es:
[esi+0x2d],0x2
804dcec0 9c               pushfd
804dcec1 8b0b             mov     ecx
,[ebx]
804dcec3 e948cfa077       jmp     f7ee9e10(注意:這個地址不在NTOSKRNL.EXE范圍中
,落在klif.sys范圍中,<它用了相對轉跳,這樣可以節約兩個字節,cs:08>)
804dcec8 
90               nop
804dcec9 
90               nop
804dceca 
51               push    ecx
804dcecb 0f8534010000     jne     nt!SwapContext+0x14d (804dd005)
804dced1 833d8c29568000 cmp dword ptr 
[nt!PPerfGlobalGroupMask (8056298c)],0x0
804dced8 0f85fe000000     jne     nt!SwapContext+0x124 (804dcfdc)
804dcede 0f20c5           mov     ebp
,cr0
804dcee1 8bd5             mov     edx
,ebp
804dcee3 8a4e2c           mov     cl
,[esi+0x2c]
804dcee6 884b50           mov     
[ebx+0x50],cl
804dcee9 fa               cli

考慮到機器的效率,SwapContext是用匯編代碼實現的,看看它具體功能(實現自己看代碼吧:)):
;++
;
; Routine Description:
;
;    This routine is called to swap context from one thread to the next.
;    It swaps context, flushes the data, instruction, and translation
;    buffer caches, restores nonvolatile integer registers, and returns
;    to its caller.
;
;    N.B. It is assumed that the caller (only caller's are within this
;         module) saved the nonvolatile registers, ebx, esi, edi, and
;         ebp. This enables the caller to have more registers available.
;
; Arguments:
;
;    cl - APC interrupt bypass disable (zero enable, nonzero disable).
;    edi - Address of previous thread.
;    esi - Address of next thread.
;    ebx - Address of PCR.
;
; Return value:
;
;    al - Kernel APC pending.
;    ebx - Address of PCR.
;    esi - Address of current thread object.
;
;--

(雖然懸掛或等待的線程,不會獲得cpu時間,但在SwapContext的時候仍然要檢測,知道Thread了,得到對應Process也就容易了)
注:這個方法最初是J. Butler提出的,參見:
http://ieeexplore.ieee.org/xpl/freeabs_all.jsp?arnumber=1232409

 
  2 IceSword的方法:以前的方法是檢測EPRCOESS,后來改成了PspCidTable
  
  a)全局變量PspCidTable是一個HANDLE_TABLE的指針,這個變量并沒有被NTOSKRNL導出,這個HANDLE_TABLE的表保存著所有進程和線程對象的指針.

  b)PID(進程ID)和 ThreadID(線程ID)就是在這個句柄表中的索引,這個HANDLE_TABLE不屬于任何進程,也沒有鏈在HANDLE_TABLE鏈上.

  c)PspCidTable在PsLookupProcessByProcessId中被用到,所以可以在此函數中搜索PspCidTalbe變量以定位其地址.

  d)得到PspCidTable這個句柄表地址后,IceSword調用ExEnumHandleTable.

這個函數的函數原形是:
BOOLEAN ExEnumHandleTable(
IN PHANDLE_TABLE HandleTable,
IN EX_ENUMERATE_HANDLE_ROUTINE EnumHandleProcedure,
IN PVOID EnumParameter,
OUT PHANDLE Handle OPTIONAL)

參數說明:
HandleTable        : 句柄表,可以用PspCidTable做參數.
EnumHandleProcedure: 類型為BOOLEAN (*EX_ENUMERATE_HANDLE_ROUTINE)(HANDLE_TALBE_ENTRY*,DWORD PID,PVOID Param)函數指針.
EnumParameter      : 傳送給EnumHandleProcedure函數的參數.
Handle             : 此函數返回True時此參數才有效,為停止枚舉前所枚舉的句柄(可選).

功能說明:
調用ExEnumHandleTable函數的時,在每次枚舉到表中的一個句柄時都會調用一次回調函數;
回調函數返回值為FALSE時繼續枚舉句柄表,返回TRUE時則停止枚舉.

我們來看看他的具體實現吧!

 

BOOLEAN
ExEnumHandleTable(
    IN PHANDLE_TABLE HandleTable,
    IN EX_ENUMERATE_HANDLE_ROUTINE EnumHandleProcedure,
    IN PVOID EnumParameter,
    OUT PHANDLE Handle OPTIONAL
    )
/*++

Routine Description:

    This function enumerates all the valid handles in a handle table.
    For each valid handle in the handle table, the specified eumeration
    function is called. If the enumeration function returns TRUE, then
    the enumeration is stopped, the current handle is returned to the
    caller via the optional Handle parameter, and this function returns
    TRUE to indicated that the enumeration stopped at a specific handle.

Arguments:

    HandleTable - Supplies a pointer to a handle table.

    EnumHandleProcedure - Supplies a pointer to a fucntion to call for
        each valid handle in the enumerated handle table.

    EnumParameter - Supplies an uninterpreted 32-bit value that is passed
        to the EnumHandleProcedure each time it is called.

    Handle - Supplies an optional pointer a variable that receives the
        Handle value that the enumeration stopped at. Contents of the
        variable only valid if this function returns TRUE.

Return Value:

    If the enumeration stopped at a specific handle, then a value of TRUE
    is returned. Otherwise, a value of FALSE is returned.

--
*/

{

    PHANDLE_ENTRY HandleEntry;
    BOOLEAN ResultValue;
    PHANDLE_ENTRY TableEntries;
    PHANDLE_ENTRY TableBound;
    ULONG TableIndex;

    PAGED_CODE();

    ASSERT(HandleTable 
!= NULL);

    
//
    
// Lock the handle table exclusive and enumerate the handle entries.
    
//

    ResultValue 
= FALSE;
    ExLockHandleTableShared(HandleTable);
    TableBound 
= HandleTable->TableBound;
    TableEntries 
= HandleTable->TableEntries;
    HandleEntry 
= &TableEntries[1];
    
while (HandleEntry < TableBound) {
        
if (ExIsEntryUsed(TableEntries, TableBound, HandleEntry)) {
            TableIndex 
= HandleEntry - TableEntries;
            
if ((*EnumHandleProcedure)(HandleEntry,
                                        INDEX_TO_HANDLE(TableIndex),
                                        EnumParameter)) {

                
if (ARGUMENT_PRESENT(Handle)) {
                    
*Handle = INDEX_TO_HANDLE(TableIndex);
                }

                ResultValue 
= TRUE;
                
break;
            }
        }

        HandleEntry 
+= 1;
    }

    ExUnlockHandleTableShared(HandleTable);
    
return ResultValue;
}


(PS:IceSword的檢測方法部分參見匿名用戶的文章,非常感謝!)

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲精品乱码久久久久久蜜桃麻豆 | 国产一区二区精品丝袜| 一区二区欧美亚洲| 亚洲精品自在在线观看| 欧美日韩国产综合久久| 亚洲视频网站在线观看| 亚洲巨乳在线| 国产精品人成在线观看免费| 亚洲一区二区三区精品在线观看| 中文在线资源观看网站视频免费不卡 | 亚洲无亚洲人成网站77777| 亚洲国产精品999| 欧美激情精品久久久久久黑人| 亚洲精选大片| 亚洲欧美卡通另类91av| 国内久久视频| 日韩天堂av| 国产一区二区精品在线观看| 欧美成年人视频网站| 欧美激情精品久久久久久蜜臀| 亚洲网站在线观看| 亚洲欧美高清| 久久成人免费网| 亚洲精品一区二区三| 亚洲一区二区黄色| 欧美在线黄色| 一本色道久久综合亚洲精品婷婷 | 欧美一区二区三区免费视频| 久久精品免费观看| 亚洲伊人伊色伊影伊综合网| 欧美资源在线观看| 欧美jizzhd精品欧美喷水| 亚洲天堂av电影| 久久gogo国模啪啪人体图| 亚洲精品黄色| 欧美一区二区三区四区在线| 99精品久久| 久久久久久久综合日本| 亚洲自拍偷拍麻豆| 欧美黄色片免费观看| 国产精品日韩欧美一区二区| 欧美高清免费| 国产一区二区三区四区| 日韩午夜在线观看视频| 亚洲国产aⅴ天堂久久| 新片速递亚洲合集欧美合集| 9色porny自拍视频一区二区| 久久av资源网| 欧美中文在线观看国产| 欧美视频一区二区三区四区| 亚洲国产精品一区制服丝袜| 国内久久精品| 午夜久久一区| 欧美一级在线播放| 欧美日韩一区高清| 亚洲人体大胆视频| 91久久极品少妇xxxxⅹ软件| 久久99伊人| 久久精品青青大伊人av| 国产精品成人观看视频免费| 亚洲精品黄色| 99视频精品| 欧美区亚洲区| 亚洲性视频h| 欧美日本成人| 亚洲国产精品久久久久婷婷老年| 亚洲风情亚aⅴ在线发布| 久久国产精品久久久| 久久久999国产| 国产亚洲欧美另类一区二区三区| 亚洲一区精品视频| 欧美一级久久久| 国产精品一区二区久久久| 亚洲午夜国产一区99re久久| 亚洲欧美国产77777| 欧美日韩亚洲精品内裤| 中文亚洲欧美| 久久久久国产一区二区| 黑丝一区二区| 美女国产精品| 在线中文字幕一区| 欧美视频亚洲视频| 亚洲网站在线观看| 久久久91精品国产一区二区三区 | 欧美女激情福利| 洋洋av久久久久久久一区| 国产日韩欧美二区| 欧美一区二区三区男人的天堂| 久久精品亚洲精品| 亚洲第一精品夜夜躁人人爽| 美乳少妇欧美精品| 99视频在线观看一区三区| 午夜一区在线| 亚洲电影免费观看高清完整版| 欧美18av| 国产精品99久久久久久久久| 久久不射中文字幕| 亚洲人永久免费| 国产精品视频不卡| 久久视频在线看| 99精品福利视频| 久久久久久久精| 日韩视频免费在线| 国产日韩欧美在线| 欧美黄网免费在线观看| 亚洲欧美激情一区| 亚洲国产高清一区二区三区| 亚洲香蕉伊综合在人在线视看| 国产日韩欧美一区二区三区四区| 榴莲视频成人在线观看| 亚洲午夜伦理| 亚洲狠狠丁香婷婷综合久久久| 欧美在线观看网址综合| 亚洲精品一区二区三区福利| 国产农村妇女毛片精品久久莱园子| 欧美成人黑人xx视频免费观看| 一区二区久久| 亚洲国产精品成人综合| 久久精品色图| 亚洲欧美文学| 国产精品欧美风情| 欧美大片免费久久精品三p | 久久资源在线| 亚洲女同精品视频| 亚洲人成在线观看| 欧美成人精品高清在线播放| 久久岛国电影| 亚洲欧美成人| 亚洲视频香蕉人妖| 亚洲日本在线视频观看| 在线观看亚洲一区| 国产日韩久久| 国产精品亚洲欧美| 欧美亚韩一区| 欧美三级午夜理伦三级中文幕| 男人的天堂亚洲| 久久久噜噜噜久久狠狠50岁| 欧美一区二区三区视频免费| 在线一区二区三区做爰视频网站| 亚洲精品国产无天堂网2021| 欧美激情一区二区三区全黄 | 香蕉久久久久久久av网站| 欧美寡妇偷汉性猛交| 久久亚洲精品网站| 久久久国产成人精品| 欧美一区在线视频| 午夜在线视频一区二区区别| 午夜伦理片一区| 午夜精品偷拍| 久久成人18免费观看| 亚洲免费在线精品一区| 亚洲欧美成人精品| 欧美在线999| 久久人人爽爽爽人久久久| 久久久av毛片精品| 久久久亚洲影院你懂的| 麻豆精品精品国产自在97香蕉| 久久综合色婷婷| 欧美黄色精品| 亚洲三级影院| 亚洲天堂av在线免费观看| 亚洲摸下面视频| 久久成人免费日本黄色| 蜜桃av综合| 91久久夜色精品国产九色| 日韩亚洲一区在线播放| 亚洲一级片在线观看| 欧美伊人久久久久久午夜久久久久| 欧美一级在线播放| 免费亚洲电影在线| 欧美三区在线视频| 国产欧美一级| 91久久久在线| 亚洲欧美在线一区| 免费亚洲电影| 99精品视频一区| 久久99在线观看| 亚洲大片免费看| 亚洲视频免费在线观看| 久久激情婷婷| 欧美日韩在线大尺度| 国产啪精品视频| 亚洲精品在线免费| 久久精品视频在线播放| 亚洲欧洲精品一区| 午夜精品一区二区三区电影天堂| 狼人天天伊人久久| 9久草视频在线视频精品| 午夜精品一区二区三区在线播放| 久久久综合网站| 国产精品美女久久久免费| 亚洲国产精品一区在线观看不卡 | 欧美影院久久久| 亚洲精品影视| 久久精品二区| 夜夜夜久久久| 欧美不卡高清| 精品99视频| 午夜视黄欧洲亚洲| 亚洲精品美女在线|