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

S.l.e!ep.¢%

像打了激速一樣,以四倍的速度運轉,開心的工作
簡單、開放、平等的公司文化;尊重個性、自由與個人價值;
posts - 1098, comments - 335, trackbacks - 0, articles - 1
  C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

Rootkit 1: Detection Hide Process

Posted on 2009-10-24 20:50 S.l.e!ep.¢% 閱讀(280) 評論(0)  編輯 收藏 引用 所屬分類: RootKit

Rootkit 1: Detection Hide Process 收藏
Rootkit 1: Detection Hide Process
什么叫rootkit?
? 它是由有用的小型程序組成的工具包,使得攻擊者能夠保持訪問計算機上具有最高權限的用戶“root”.rootkit是能夠持久或可靠地、無法檢測地存在于計算機上的一組程序和代碼.

rootkit主要分為下列大類:
1 進程隱藏
2 文件隱藏
3 端口隱藏
4 注冊表隱藏
5 驅動服務隱藏


Part I: 進程隱藏
一:序言
? 下列情況不在討論之中(沒進程)
? 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的檢測方法部分參見匿名用戶的文章,非常感謝!)


原文: http://blog.vckbase.com/windowssky/archive/2007/07/16/27457.aspx


本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/syf442/archive/2009/07/13/4345216.aspx

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            性欧美videos另类喷潮| aa成人免费视频| 欧美一区二区成人6969| 国产综合欧美| 激情综合五月天| 国产日韩欧美夫妻视频在线观看| 欧美精品三区| 欧美日韩一区三区| 国产精品国产自产拍高清av| 国产精品h在线观看| 国产日韩欧美精品| 91久久极品少妇xxxxⅹ软件| 一区二区三区偷拍| 性久久久久久久久| 亚洲欧美日韩人成在线播放| 午夜激情一区| 美女精品国产| 免费国产一区二区| 日韩一级在线| 亚洲欧美日韩精品在线| 欧美一级视频精品观看| 久久亚洲色图| 欧美精品一区在线| 国产精品久久网| 国模套图日韩精品一区二区| 亚洲激情国产| 亚洲综合日韩在线| 久久精品夜色噜噜亚洲aⅴ| 免费成人激情视频| 亚洲精品国产系列| 亚洲尤物在线| 久久免费黄色| 欧美日韩一区在线| 国产三区精品| 日韩视频在线免费观看| 国内精品视频666| 欧美精品在线一区二区| 一区二区三区免费在线观看| 欧美激情一区二区三区全黄| 免费成人av| 亚洲精品国产精品国产自| 亚洲精品久久7777| 性色av香蕉一区二区| 欧美电影在线| 狠狠色丁香婷婷综合久久片| 一本久久综合| 欧美专区在线观看| 亚洲人成网站999久久久综合| 亚洲一区二区三区四区在线观看| 久久精品国产v日韩v亚洲| 欧美日韩视频免费播放| 在线观看av不卡| 亚洲免费视频成人| 亚洲二区视频| 久久精品中文字幕免费mv| 欧美日韩国产综合视频在线| 含羞草久久爱69一区| 亚洲午夜精品久久久久久浪潮| 欧美在线视频免费| 欧美α欧美αv大片| 国产视频久久| 在线综合亚洲欧美在线视频| 久久综合亚洲社区| 亚欧美中日韩视频| 国产精品欧美经典| 亚洲视频综合在线| 亚洲乱码久久| 欧美精品福利在线| 国产欧美日韩精品专区| 欧美激情久久久久| 国产精品入口夜色视频大尺度 | 欧美激情一二区| 久久黄金**| 国产欧美日韩精品一区| 亚洲网站视频福利| 亚洲精品一区二区三| 欧美激情亚洲国产| 国产裸体写真av一区二区| 亚洲综合国产| 亚洲综合第一页| 欧美系列电影免费观看| 中文国产一区| 一区二区成人精品| 欧美视频官网| 亚洲在线中文字幕| 亚洲一区二区三区精品在线观看 | 伊人久久婷婷色综合98网| 久久精品免费播放| 久久精品99国产精品酒店日本| 国产欧美va欧美va香蕉在| 久久精品三级| 久久久久久一区二区| 亚洲激情不卡| 夜夜嗨av一区二区三区免费区| 欧美日韩国产天堂| 亚洲亚洲精品在线观看| 亚洲欧美日韩国产中文| 一区二区三区自拍| 亚洲国产婷婷香蕉久久久久久99 | 欧美日韩国产成人| 午夜视频一区| 久久嫩草精品久久久久| 国产欧美精品| 亚洲一区二区三区四区视频| 亚洲精品视频一区二区三区| 男人插女人欧美| 亚洲人在线视频| 亚洲国产日韩欧美在线99| 欧美成人亚洲| 国产亚洲人成a一在线v站| 在线看成人片| 亚洲激情成人网| 欧美视频精品在线| 久久久噜噜噜久久狠狠50岁| 久久伊伊香蕉| 亚洲色在线视频| 欧美中文字幕视频| 国产精品99久久久久久白浆小说| 亚洲综合日韩在线| 91久久精品一区二区三区| 在线视频亚洲欧美| 国产一级一区二区| 亚洲精品一区在线观看| 国产一区自拍视频| 亚洲图片在线| 亚洲美女中文字幕| 欧美在线欧美在线| 亚洲校园激情| 欧美激情视频一区二区三区在线播放 | 一本久久综合亚洲鲁鲁五月天| 国产欧美日韩视频一区二区| 亚洲二区在线视频| 国产欧美一区二区在线观看| 欧美激情在线观看| 国产日韩综合一区二区性色av| 亚洲人久久久| 在线观看欧美亚洲| 亚洲图片欧洲图片日韩av| 亚洲黄色在线看| 欧美在线视频全部完| 亚洲综合好骚| 欧美另类一区二区三区| 欧美高清视频在线观看| 黄色成人91| 欧美专区在线观看一区| 午夜亚洲性色福利视频| 欧美日韩国产专区| 亚洲精品久久| 一区二区三区不卡视频在线观看 | 欧美精品亚洲一区二区在线播放| 久久人人爽人人| 国产欧美日韩亚州综合| 一区二区三区日韩在线观看| 艳女tv在线观看国产一区| 久热精品视频在线观看一区| 久久精品成人一区二区三区| 国产精品黄视频| 一本久道久久综合中文字幕| 一区二区三区精品久久久| 欧美日本精品一区二区三区| 农村妇女精品| 亚洲国产天堂久久国产91| 麻豆成人在线观看| 欧美福利视频网站| 亚洲人成在线免费观看| 欧美激情视频一区二区三区免费| 亚洲国产欧美日韩另类综合| 亚洲黄色性网站| 欧美国产日韩在线观看| 亚洲区欧美区| 欧美国产精品va在线观看| 亚洲欧美在线aaa| 国产精品一国产精品k频道56| 中文成人激情娱乐网| 午夜精品一区二区三区四区 | 国产免费亚洲高清| 欧美在线观看网址综合| 久久色中文字幕| 亚洲国产日韩一区二区| 欧美区一区二| 亚洲欧美第一页| 久久综合久久综合这里只有精品 | 欧美日韩成人综合在线一区二区 | 国产精品久久久久久五月尺| 午夜精品久久久久久久久久久| 久久免费高清视频| 亚洲免费观看视频| 国产精品综合久久久| 久久三级福利| 夜夜狂射影院欧美极品| 久久全国免费视频| 一本大道久久a久久精二百| 国产精品免费一区二区三区观看| 性感少妇一区| 亚洲精品视频在线播放| 久久精品综合一区| 一二三区精品| 在线播放日韩欧美| 欧美成熟视频| 久久久久.com|