欧美激情网,国产欧美亚洲高清,欧美屁股xxxxx,欧美群妇大交群,欧美人与物ⅴideos另类,区二区三区在线 | 欧洲

知識學(xué)堂
  • ·聯(lián)系電話:+86.023-75585550
  • ·聯(lián)系傳真:+86.023-75585550
  • ·24小時(shí)手機(jī):13896886023
  • ·QQ 咨 詢:361652718 513960520
當(dāng)前位置 > 首頁 > 知識學(xué)堂 > 常見技術(shù)問題
終止進(jìn)程的多種方法
更新時(shí)間:2012-06-10 | 發(fā)布人:本站 | 點(diǎn)擊率:546
1.使用 FindWindow 的方法,然后想窗口發(fā)送 WM_CLOSE 的消息

       2.找到進(jìn)程的線程, PostThreadMessage 發(fā)送 WM_QUIT 消息結(jié)束主線程

       3.OpenThread ---> TerminateThread

       4.RemoteExitProcess,以 PROCESS_CREATE_THREADVM_OPERATION方式打開進(jìn)程,然后創(chuàng)建個(gè)遠(yuǎn)程線程,線程開始地址是 ExitProcess 參數(shù)0 ,程序自行了斷.

       5.首先確保進(jìn)程能被打開(8和9介紹),然后創(chuàng)建一個(gè)線程去 DebugActiveProcess 他,然后什么也不做退出線程,程序無人接管,于是掛掉~

       6.以 VM_OPERATION方式打開進(jìn)程, 然后調(diào)用 NtUnmapViewOfSection 卸載掉他的ntdll.dll 這個(gè)時(shí)候程序還未崩潰,然后再隨意發(fā)送個(gè)消息給它,它的程序一經(jīng)調(diào)用直接就會異常,但是ntdll已經(jīng)掛掉,無法用戶空間異常處理,自行了斷~(我認(rèn)為這個(gè)方法應(yīng)和往進(jìn)程空間寫垃圾數(shù)據(jù)屬于同一方法)

       7.發(fā)送鍵盤 ESC 單擊的消息(這個(gè)和發(fā)送窗口消息不能算同一個(gè)的).

       8.下面是重點(diǎn)要介紹的:-----------------------------
由于CrackMeApp打開了驅(qū)動(dòng)的文件句柄,所以直接不能卸載驅(qū)動(dòng)的.因此需要把這個(gè)句柄給關(guān)閉.
于是怎么去獲取遠(yuǎn)程的文件句柄呢?首先想到的是 DuplicateHandle ,
BOOL DuplicateHandle(
   HANDLE hSourceProcessHandle,   // handle to source process
   HANDLE hSourceHandle,       // handle to duplicate
   HANDLE hTargetProcessHandle,   // handle to target process
   LPHANDLE lpTargetHandle,    // duplicate handle
   DWORD dwDesiredAccess,        // requested access
   BOOL bInheritHandle,       // handle inheritance option
   DWORD dwOptions             // optional actions
);

先看最后一個(gè)參數(shù):
DUPLICATE_CLOSE_SOURCE
Closes the source handle. This occurs regardless of any error status returned.
DUPLICATE_SAME_ACCESS
Ignores the dwDesiredAccess parameter. The duplicate handle has the same access as the source handle.

也就是說當(dāng)我們選擇DUPLICATE_CLOSE_SOURCE時(shí),遠(yuǎn)程的句柄就會自動(dòng)關(guān)閉了

第一個(gè)參數(shù),我們可以直接OpenProcess(PROCESS_DUP_HANDLE ,XXX)獲得,
第二個(gè)參數(shù)比較難找,就是CrackMeApp進(jìn)程里打開驅(qū)動(dòng)的句柄,要想獲得這個(gè)我們得借助個(gè)ntdll.dll中的一個(gè) API, ZwQuerySystemInformation 這個(gè)可以獲得整個(gè)系統(tǒng)中所有的句柄信息,我們可以全部找出來,然后判斷哪些句柄是屬于 CrackMeApp進(jìn)程的,并且ObjectTypeNumber類型為文件類型的.關(guān)于這個(gè)的具體實(shí)現(xiàn)可以看我的實(shí)現(xiàn)代碼.

typedef struct _SYSTEM_HANDLE_INFORMATION { // Information Class 16
   ULONG ProcessId;
   UCHAR ObjectTypeNumber;
   UCHAR Flags;   // 0x01 = PROTECT_FROM_CLOSE, 0x02 = INHERIT
   USHORT Handle;
   PVOID Object;
   ACCESS_MASK GrantedAccess;
} SYSTEM_HANDLE_INFORMATION, *PSYSTEM_HANDLE_INFORMATION;

這樣CrackMeApp進(jìn)程中通過CreateFile打開的句柄就全找到了,一般有三個(gè),我們可以把它全部都關(guān)閉,也可以只關(guān)閉最后一個(gè)(因?yàn)樽詈缶褪谴蜷_驅(qū)動(dòng)的句柄,打開驅(qū)動(dòng)是最后一次調(diào)用CreateFile).


這個(gè)我就得到了第二個(gè)參數(shù),下面的參數(shù)都很簡單了~

于是一調(diào)用這個(gè) DuplicateHandle ,我們不僅關(guān)閉了遠(yuǎn)程的句柄,而且還獲得了驅(qū)動(dòng)的句柄,為所欲為了~~

于是我的第8個(gè)方法就是發(fā)送IO請求到CrackMeApp的驅(qū)動(dòng)里,請求它修改被保護(hù)的進(jìn)程PID為0,這樣我們就可以用常規(guī)方法結(jié)束它了(Open+Terminate)

       9.上面方法的遠(yuǎn)程句柄關(guān)閉了,我們就自然可以去卸載驅(qū)動(dòng)了~于是這個(gè)就是去 ZwUnloadDriver或者停止了它的Service.這樣再用常規(guī)方法結(jié)束~~

       10.所有的win32子系統(tǒng)的進(jìn)程都會有一個(gè)句柄在csrss.exe進(jìn)程里面,CrackMeApp.exe自然也在,于是我們就可以把 csrss.exe 里面的句柄給 dup 過來自己使用,DUP過來的方法大致和上面相同,不過判斷的進(jìn)程該為csrss,類型要該為5(進(jìn)程句柄的類型),然后呢對每個(gè)進(jìn)程句柄做一個(gè)ZwQueryInformationProcess() 參數(shù)為 BASIC_INFORMATION=0 的查詢,看看這個(gè)句柄是不是CrackMeApp的 ,如果是就直接拿來用,TerminateProcess之~

---------------以下是用借助驅(qū)動(dòng)來結(jié)束的-----------

       11.用驅(qū)動(dòng)patch了它的保護(hù)的PID值,然后用戶空間里常規(guī)方法~

       12.用驅(qū)動(dòng)恢復(fù)SSDT中ZwOpenProcess,這里我偷懶直接硬編碼,調(diào)用那個(gè)驅(qū)動(dòng)自身的恢復(fù)SSDT的函數(shù),嘿嘿~~之后用戶空間里常規(guī)方法(這個(gè)和11不算一種的)

       13.直接在驅(qū)動(dòng)里調(diào)用 NtOpenProcess繞過它的SSDT HOOK就可以了,不過應(yīng)該注意的是需要先把 KTHREAD 結(jié)構(gòu)體里的 PreviousMode 值改為KernelMode,否則有可能會失敗的~
獲取句柄后調(diào)用ZwTerminateProcess,這個(gè)不需要修改PreviousMode,直接用就可以~

       14.和13的方法不同的是打開句柄的方法,使用了 PsLookupProcessByProcessId+ObOpenObjectByPointer的方法,然后還是調(diào)用 ZwTerminateProcess~(這個(gè)也要算不同的,,因?yàn)橐?guī)則上曾經(jīng)說過ObXXX和NtXX算不同的API的)
15.最后一種了,首先獲取CrackMeApp線程的TID,然后根據(jù) PsLookupThreadByThreadId 獲取 EThread 指針,然后向這個(gè)線程插入APC調(diào)用,在APC過程函數(shù)中,主要是執(zhí)行的 ZwTerminateProcess( 0xffffffff, 0 );這個(gè)東西就是結(jié)束自己的意思(嘿嘿,,這個(gè)方法是我從IceSword里面摳出來的)~~本來想去調(diào)用Nt/ZwTerminateThread,結(jié)果那個(gè)函數(shù)沒導(dǎo)出還得自己找,于是索性就簡單點(diǎn)ZwTerminateProcess了.

       16 內(nèi)存清零大法

       http://hi.baidu.com/%C3%F7%ED%F8%B5%C4%D0%C4/blog/item/255cd583fe406698f603a6f2.html

       17 作業(yè)方式終止

     ZwOpenProcess->ZwCreateJobObject->ZwAssignProcessToJobObject->ZwTerminateJobObject

二 枚舉進(jìn)程

      轉(zhuǎn)自V大http://hi.baidu.com/killvxk這是V大的空間,請自己查找

      killvxk的驅(qū)動(dòng)查進(jìn)程:
      1.native api獲得進(jìn)程表a
      2.通過activelist獲得進(jìn)程表b
      3.通過pspCidTable獲得進(jìn)程表c
      4.通過handletablelisthead獲得進(jìn)程表d
      5.通過csrss的handletable用2種方法枚舉獲得進(jìn)程表e和f
      6.通過掃描當(dāng)前進(jìn)程的handletable獲得進(jìn)程表g
      7.遍歷表c的每一個(gè)進(jìn)程的SessionProcessLinks獲得進(jìn)程表h
      8.遍歷表c的每一個(gè)進(jìn)程Vm.WorkingSetExpansionLinks獲得進(jìn)程表i
      9.通過Typelist分別取process和thread的表j和表k
      10.通過表k得到進(jìn)程表l
      11.搜索內(nèi)存中的threadobject和processobject得到進(jìn)程表m
      12.通過Wait/Dispatch得到進(jìn)程表n
      13.如果系統(tǒng)是Win2003以上遍歷表c的每一個(gè)進(jìn)程的MmProcessLinks得到表o
      14.綜合上面的進(jìn)程表得到表p
      15.對表p每一個(gè)進(jìn)程做HandleTable,Vm.WorkXX,MmProcessXX,SessionProcessList掃描得到表q
      16.枚舉HWNDHandle得到進(jìn)程表r
      17.枚舉JobObject得到表s
      18.綜合得表t,此時(shí)枚舉結(jié)束~~

動(dòng)態(tài)部分:
KiReadyThread
和KiSwapContext的鉤子
還有KiService鉤子
還有CreateProcessNotifyRoutine和CreateThreadNotifyRoutine
NtCreateThread鉤子
動(dòng)態(tài)維護(hù)一張表,靜態(tài)枚舉結(jié)束后綜合兩表~


三 進(jìn)程隱藏

         轉(zhuǎn)自http://hi.baidu.com/sudami/blog/item/96f1f245db0e2c25cffca385.html

         1 HOOK SSDT---> ZwQuerySystemInformation

          2 在EPROCESS中的ActiveProcessLinks 里摘除自身,也就是操作鏈表,摘除一個(gè)結(jié)點(diǎn).

          3 從csrss.exe進(jìn)程的句柄表中摘除自身    參看 futo_enhaced 從http://hi.baidu.com/sudami/搜索下載

          4 掛鉤SwapContext,自己實(shí)現(xiàn)線程調(diào)度

          參考地址:http://hi.baidu.com/%C3%F7%ED%F8%B5%C4%D0%C4/blog/item/8852b4c58b5b72a18226ac17.html

           5 從PspCidTable表中摘除自身        參看     futo_enhaced      從http://hi.baidu.com/sudami/搜索下載

           6 清除標(biāo)志 防止暴力搜索內(nèi)存

四 進(jìn)程防殺

(貌似只有思路,其實(shí)代碼網(wǎng)上都有,請自行GOOGLE吧)

           HOOK法:

           1 HOOK HOOK NtTerminateProcess

           2 HOOK ZWOpenProcess/ ObReferenceObjectByHandle    

           參考:http://hi.baidu.com/%C3%F7%ED%F8%B5%C4%D0%C4/blog/item/6a4486f8a5c82d51242df253.html     

           3 HOOK hook KiInsertQueueApc/KeInsertQueueApc

           其實(shí)從上到下可HOOK的地方很多,請發(fā)揮想象力。

           DKOM法:

           5 kernel apc disable

           6 抹去PspCidTable

           7 thread terminated

           8 thread cross thread flags