免费A级毛片无码专区网站-成人国产精品视频一区二区-啊 日出水了 用力乖乖在线-国产黑色丝袜在线观看下-天天操美女夜夜操美女-日韩网站在线观看中文字幕-AV高清hd片XXX国产-亚洲av中文字字幕乱码综合-搬开女人下面使劲插视频

驅(qū)動(dòng)開(kāi)發(fā):內(nèi)核通過(guò)PEB得到進(jìn)程參數(shù)( 二 )

接著就來(lái)實(shí)現(xiàn)對(duì)PEB的獲取操作 , 以64位為例 , 我們需要調(diào)用PsGetProcessPeb()這個(gè)內(nèi)核函數(shù) , 因?yàn)樵搩?nèi)核函數(shù)沒(méi)有被公開(kāi)所以調(diào)用之前需要頭部導(dǎo)出 , 該函數(shù)需要傳入用戶(hù)進(jìn)程的EProcess結(jié)構(gòu) , 該結(jié)構(gòu)可用PsLookupProcessByProcessId函數(shù)動(dòng)態(tài)獲取到 , 獲取到以后直接KeStackAttachProcess()附加到應(yīng)用層進(jìn)程上 , 即可直接輸出進(jìn)程的PEB結(jié)構(gòu)信息 , 如下代碼 。
#include "peb.h"#include <ntifs.h>// 定義導(dǎo)出NTKERNELAPI PVOID NTAPI PsGetProcessPeb(_In_ PEPROCESS Process);VOID UnDriver(PDRIVER_OBJECT driver){ DbgPrint(("Uninstall Driver Is OK \n"));}NTSTATUS DriverEntry(IN PDRIVER_OBJECT Driver, PUNICODE_STRING RegistryPath){ DbgPrint("hello lyshark \n"); NTSTATUS status = STATUS_UNSUCCESSFUL; PEPROCESS eproc = NULL; KAPC_STATE kpc = { 0 }; PPEB64 pPeb64 = NULL; __try {// HANDLE)4656 進(jìn)程PIDstatus = PsLookupProcessByProcessId((HANDLE)4656, &eproc);// 得到64位PEBpPeb64 = (PPEB64)PsGetProcessPeb(eproc);DbgPrint("PEB64 = %p \n", pPeb64);if (pPeb64 != 0){// 驗(yàn)證可讀性ProbeForRead(pPeb64, sizeof(PEB32), 1);// 附加進(jìn)程KeStackAttachProcess(eproc, &kpc);DbgPrint("進(jìn)程基地址: 0x%p \n", pPeb64->ImageBaseAddress);DbgPrint("ProcessHeap = 0x%p \n", pPeb64->ProcessHeap);DbgPrint("BeingDebugged = %d \n", pPeb64->BeingDebugged);// 脫離進(jìn)程KeUnstackDetachProcess(&kpc);} } __except (EXCEPTION_EXECUTE_HANDLER) {Driver->DriverUnload = UnDriver;return STATUS_SUCCESS; } Driver->DriverUnload = UnDriver; return STATUS_SUCCESS;}PEB64代碼運(yùn)行后 , 我們加載驅(qū)動(dòng)即可看到如下結(jié)果:

驅(qū)動(dòng)開(kāi)發(fā):內(nèi)核通過(guò)PEB得到進(jìn)程參數(shù)

文章插圖
而相對(duì)于64位進(jìn)程來(lái)說(shuō) , 獲取32位進(jìn)程的PEB信息可以直接調(diào)用PsGetProcessWow64Process()函數(shù)得到 , 該函數(shù)已被導(dǎo)出可以任意使用 , 獲取PEB代碼如下 。
#include "peb.h"#include <ntifs.h>// 定義導(dǎo)出NTKERNELAPI PVOID NTAPI PsGetProcessPeb(_In_ PEPROCESS Process);VOID UnDriver(PDRIVER_OBJECT driver){ DbgPrint(("Uninstall Driver Is OK \n"));}NTSTATUS DriverEntry(IN PDRIVER_OBJECT Driver, PUNICODE_STRING RegistryPath){ DbgPrint("hello lyshark \n"); NTSTATUS status = STATUS_UNSUCCESSFUL; PEPROCESS eproc = NULL; KAPC_STATE kpc = { 0 }; PPEB32 pPeb32 = NULL; __try {// HANDLE)4656 進(jìn)程PIDstatus = PsLookupProcessByProcessId((HANDLE)6164, &eproc);// 得到32位PEBpPeb32 = (PPEB32)PsGetProcessWow64Process(eproc);DbgPrint("PEB32 = %p \n", pPeb32);if (pPeb32 != 0){// 驗(yàn)證可讀性ProbeForRead(pPeb32, sizeof(PEB32), 1);// 附加進(jìn)程KeStackAttachProcess(eproc, &kpc);DbgPrint("進(jìn)程基地址: 0x%p \n", pPeb32->ImageBaseAddress);DbgPrint("ProcessHeap = 0x%p \n", pPeb32->ProcessHeap);DbgPrint("BeingDebugged = %d \n", pPeb32->BeingDebugged);// 脫離進(jìn)程KeUnstackDetachProcess(&kpc);} } __except (EXCEPTION_EXECUTE_HANDLER) {Driver->DriverUnload = UnDriver;return STATUS_SUCCESS; } Driver->DriverUnload = UnDriver; return STATUS_SUCCESS;}

經(jīng)驗(yàn)總結(jié)擴(kuò)展閱讀