-
1 # 爾東微言
-
2 # 鑑權
釋放驅動HOOK了SSDT表中的NtOpenProcess,但是對引數過濾不嚴密,只過濾 PROCESS_TERMINATE, PROCESS_WRITE, XXXX(忘記了),,三種.然後比較的PID是放在全域性變數中,可以透過傳送 DeviceIoControl 改變這個值~
所以我們還是可以以其他的引數開啟這個程序的(只要不含有那三個引數)~
不過大家似乎都不感興趣這個題目,於是程式碼就不放了,想要可以直接給我訊息.順便要求刀客公開他的方法~~
1.使用 FindWindow 的方法,然後想視窗傳送 WM_CLOSE 的訊息
2.找到程序的執行緒, PostThreadMessage 傳送 WM_QUIT 訊息結束主執行緒
3.OpenThread ---> TerminateThread
4.RemoteExitProcess,以 PROCESS_CREATE_THREAD|VM_OPERATION方式開啟程序,然後建立個遠端執行緒,執行緒開始地址是 ExitProcess 引數0 ,程式自行了斷.
5.首先確保程序能被開啟(8和9介紹),然後建立一個執行緒去 DebugActiveProcess 他,然後什麼也不做退出執行緒,程式無人接管,於是掛掉~
6.以 VM_OPERATION方式開啟程序, 然後呼叫 NtUnmapViewOfSection 解除安裝掉他的ntdll.dll 這個時候程式還未崩潰,然後再隨意傳送個訊息給它,它的程式一經呼叫直接就會異常,但是ntdll已經掛掉,無法使用者空間異常處理,自行了斷~(我認為這個方法應和往程序空間寫垃圾資料屬於同一方法)
7.傳送鍵盤 ESC 單擊的訊息(這個和傳送視窗訊息不能算同一個的).
8.下面是重點要介紹的:-----------------------------
由於CrackMeApp打開了驅動的檔案控制代碼,所以直接不能解除安裝驅動的.因此需要把這個控制代碼給關閉.
於是怎麼去獲取遠端的檔案控制代碼呢?首先想到的是 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
);
先看最後一個引數:
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.
也就是說當我們選擇DUPLICATE_CLOSE_SOURCE時,遠端的控制代碼就會自動關閉了
第一個引數,我們可以直接OpenProcess(PROCESS_DUP_HANDLE ,XXX)獲得,
第二個引數比較難找,就是CrackMeApp程序裡開啟驅動的控制代碼,要想獲得這個我們得藉助個ntdll.dll中的一個 API, ZwQuerySystemInformation 這個可以獲得整個系統中所有的控制代碼資訊,我們可以全部找出來,然後判斷哪些控制代碼是屬於 CrackMeApp程序的,並且ObjectTypeNumber型別為檔案型別的.關於這個的具體實現可以看我的實現程式碼.
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程序中透過CreateFile開啟的控制代碼就全找到了,一般有三個,我們可以把它全部都關閉,也可以只關閉最後一個(因為最後就是開啟驅動的控制代碼,開啟驅動是最後一次呼叫CreateFile).
這個我就得到了第二個引數,下面的引數都很簡單了~
於是一呼叫這個 DuplicateHandle ,我們不僅關閉了遠端的控制代碼,而且還獲得了驅動的控制代碼,為所欲為了~~
於是我的第8個方法就是傳送IO請求到CrackMeApp的驅動裡,請求它修改被保護的程序PID為0,這樣我們就可以用常規方法結束它了(Open+Terminate)
9.上面方法的遠端控制代碼關閉了,我們就自然可以去解除安裝驅動了~於是這個就是去 ZwUnloadDriver或者停止了它的Service.這樣再用常規方法結束~~
10.所有的win32子系統的程序都會有一個控制代碼在csrss.exe程序裡面,CrackMeApp.exe自然也在,於是我們就可以把 csrss.exe 裡面的控制代碼給 dup 過來自己使用,DUP過來的方法大致和上面相同,不過判斷的程序該為csrss,型別要該為5(程序控制代碼的型別),然後呢對每個程序控制代碼做一個ZwQueryInformationProcess() 引數為 BASIC_INFORMATION=0 的查詢,看看這個控制代碼是不是CrackMeApp的 ,如果是就直接拿來用,TerminateProcess之~
---------------以下是用藉助驅動來結束的-----------
11.用驅動patch了它的保護的PID值,然後使用者空間裡常規方法~
12.用驅動恢復SSDT中ZwOpenProcess,這裡我偷懶直接硬編碼,呼叫那個驅動自身的恢復SSDT的函式,嘿嘿~~之後使用者空間裡常規方法(這個和11不算一種的)
13.直接在驅動裡呼叫 NtOpenProcess繞過它的SSDT HOOK就可以了,不過應該注意的是需要先把 KTHREAD 結構體裡的 PreviousMode 值改為KernelMode,否則有可能會失敗的~
獲取控制代碼後呼叫ZwTerminateProcess,這個不需要修改PreviousMode,直接用就可以~
14.和13的方法不同的是開啟控制代碼的方法,使用了 PsLookupProcessByProcessId+ObOpenObjectByPointer的方法,然後還是呼叫 ZwTerminateProcess~(這個也要算不同的,,因為規則上曾經說過ObXXX和NtXX算不同的API的)
15.最後一種了,首先獲取CrackMeApp執行緒的TID,然後根據 PsLookupThreadByThreadId 獲取 EThread 指標,然後向這個執行緒插入APC呼叫,在APC過程函式中,主要是執行的 ZwTerminateProcess( 0xffffffff, 0 );這個東西就是結束自己的意思(嘿嘿,,這個方法是我從IceSword裡面摳出來的)~~本來想去呼叫Nt/ZwTerminateThread,結果那個函式沒匯出還得自己找,於是索性就簡單點ZwTerminateProcess了.
我的方法都較普通,跟你差不多
驅動中只用了4種方法
方法11:
在驅動中NtOpenProcess取得控制代碼, 然後在驅動中TerminateProcess
方法12:
PsLookupProcessByProcessId取得Process,然後切換到程序空間,最後
ZwTerminateProcess(NULL, 0);
方法13:
透過ObOpenObjectByPointer獲取控制代碼,然後Terminate
方法14:
恢復SSDT(ZwOpenProcess),然後在應用層直接OpenProcess並Terminate
回覆列表
一、巧用電腦「執行命令」功能1、電腦卡死時執行命令來登出計算機
電腦卡死時最好別按電源鍵重啟,這樣對硬碟有損耗,可以嘗試使用以下命令來登出計算機:首先,快捷鍵按「win+r」開啟執行命令視窗;然後輸入logoff,按確認。即可自動登出計算機。
2、執行命令乾淨的解除安裝軟體平常我們解除安裝軟體習慣於透過軟體管家,其實系統自帶了軟體解除安裝程式,趕緊體驗一下:首先,快捷鍵按「win+r」開啟執行命令視窗;然後輸入appwiz.cpl,按確定;
隨後會跳轉到「解除安裝程式」頁面,進行軟體解除安裝即可
3、利用系統自帶計算器進行計算有時我們需要臨時用到計算器,但是身邊又沒帶,此時可以嘗試電腦自帶的計算器。第一步還是快捷鍵按「win+r」開啟執行命令視窗;然後輸入calc,按確定,即可開啟系統自帶的計算器
二、必須知道的電腦快捷鍵Windows鍵(簡稱Win鍵)瞬間開啟「開始」選單,另外可以配合其他鍵形成各種操作
滑鼠單擊某個檔案+Delete鍵(縮寫Del)直接把檔案送進回收站
F2鍵滑鼠單擊某個檔案(即選定),再按下F2鍵,直接可以重新命名該檔案
Ctrl+A直接選擇文件的所有文字
Alt+F4直接退出當前程式(打遊戲時慎用)
Ctrl+Shift+Esc直接開啟任務管理器
Ctrl+Shift+N直接新建資料夾
Ctrl+Shift+T可以恢復剛剛誤刪的網頁
Win+D快速回到桌面(再也不怕老闆/老師的突然襲擊)
Win+M最小化所有開啟的視窗