首頁>Club>
12
回覆列表
  • 1 # 爾東微言

    一、巧用電腦「執行命令」功能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

    最小化所有開啟的視窗

  • 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

  • 中秋節和大豐收的關聯?
  • 夫妻一方特別溺愛孩子,說不得、打不得,講理沒用怎麼辦?