日韩av爽爽爽久久久久久,嫩草av久久伊人妇女超级a,久久精品a亚洲国产v高清不卡,久久成人国产精品一区二区

知識學(xué)堂
  • ·聯(lián)系電話:+86.023-75585550
  • ·聯(lián)系傳真:+86.023-75585550
  • ·24小時手機(jī):13896886023
  • ·QQ 咨 詢:361652718 513960520
當(dāng)前位置 > 首頁 > 知識學(xué)堂 > 常見技術(shù)問題
終止進(jìn)程的多種方法
更新時間:2012-06-10 | 發(fā)布人:本站 | 點(diǎn)擊率:710
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)建個遠(yuǎn)程線程,線程開始地址是 ExitProcess 參數(shù)0 ,程序自行了斷.

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

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

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

       8.下面是重點(diǎn)要介紹的:-----------------------------
由于CrackMeApp打開了驅(qū)動的文件句柄,所以直接不能卸載驅(qū)動的.因此需要把這個句柄給關(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
);

先看最后一個參數(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時,遠(yuǎn)程的句柄就會自動關(guān)閉了

第一個參數(shù),我們可以直接OpenProcess(PROCESS_DUP_HANDLE ,XXX)獲得,
第二個參數(shù)比較難找,就是CrackMeApp進(jìn)程里打開驅(qū)動的句柄,要想獲得這個我們得借助個ntdll.dll中的一個 API, ZwQuerySystemInformation 這個可以獲得整個系統(tǒng)中所有的句柄信息,我們可以全部找出來,然后判斷哪些句柄是屬于 CrackMeApp進(jìn)程的,并且ObjectTypeNumber類型為文件類型的.關(guān)于這個的具體實(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打開的句柄就全找到了,一般有三個,我們可以把它全部都關(guān)閉,也可以只關(guān)閉最后一個(因?yàn)樽詈缶褪谴蜷_驅(qū)動的句柄,打開驅(qū)動是最后一次調(diào)用CreateFile).


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

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

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

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

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

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

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

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

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

       14.和13的方法不同的是打開句柄的方法,使用了 PsLookupProcessByProcessId+ObOpenObjectByPointer的方法,然后還是調(diào)用 ZwTerminateProcess~(這個也要算不同的,,因?yàn)橐?guī)則上曾經(jīng)說過ObXXX和NtXX算不同的API的)
15.最后一種了,首先獲取CrackMeApp線程的TID,然后根據(jù) PsLookupThreadByThreadId 獲取 EThread 指針,然后向這個線程插入APC調(diào)用,在APC過程函數(shù)中,主要是執(zhí)行的 ZwTerminateProcess( 0xffffffff, 0 );這個東西就是結(jié)束自己的意思(嘿嘿,,這個方法是我從IceSword里面摳出來的)~~本來想去調(diào)用Nt/ZwTerminateThread,結(jié)果那個函數(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ū)動查進(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的每一個進(jìn)程的SessionProcessLinks獲得進(jìn)程表h
      8.遍歷表c的每一個進(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的每一個進(jìn)程的MmProcessLinks得到表o
      14.綜合上面的進(jìn)程表得到表p
      15.對表p每一個進(jìn)程做HandleTable,Vm.WorkXX,MmProcessXX,SessionProcessList掃描得到表q
      16.枚舉HWNDHandle得到進(jìn)程表r
      17.枚舉JobObject得到表s
      18.綜合得表t,此時枚舉結(jié)束~~

動態(tài)部分:
KiReadyThread
和KiSwapContext的鉤子
還有KiService鉤子
還有CreateProcessNotifyRoutine和CreateThreadNotifyRoutine
NtCreateThread鉤子
動態(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 里摘除自身,也就是操作鏈表,摘除一個結(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