当前位置: 首页 > news >正文

在线代理浏览器网站武汉网络关键词排名

在线代理浏览器网站,武汉网络关键词排名,wordpress需要访问您网页服务器的权限,服饰 视频 网站建设在前面的文章中LyShark一直在重复的实现对系统底层模块的枚举,今天我们将展开一个新的话题,内核监控,我们以监控进程线程创建为例,在Win10系统中监控进程与线程可以使用微软提供给我们的两个新函数来实现,此类函数的原…

在前面的文章中LyShark一直在重复的实现对系统底层模块的枚举,今天我们将展开一个新的话题,内核监控,我们以监控进程线程创建为例,在Win10系统中监控进程与线程可以使用微软提供给我们的两个新函数来实现,此类函数的原理是创建一个回调事件,当有进程或线程被创建或者注销时,系统会通过回调机制将该进程相关信息优先返回给我们自己的函数待处理结束后再转向系统层。

PsSetCreateProcessNotifyRoutineEx和PsSetCreateThreadNotifyRoutine是Windows操作系统提供的两个内核回调函数,它们允许开发者在进程或线程发生创建事件时拦截并处理这些事件。这两个函数提供的回调机制是操作系统提供的最基本、最常用的内核监控进程与线程的方式。

PsSetCreateProcessNotifyRoutineEx和PsSetCreateThreadNotifyRoutine的使用方式和参数类型类似,它们都需要开发者提供一个回调函数,当进程或线程被创建时,操作系统会调用这个回调函数。这个回调函数需要满足一定的约束条件,例如不能阻塞或挂起进程或线程的创建或访问,不能调用一些内核API函数等。

PsSetCreateProcessNotifyRoutineEx和PsSetCreateThreadNotifyRoutine的主要区别在于它们所监控的事件不同。PsSetCreateProcessNotifyRoutineEx用于监控进程的创建事件,当有新的进程被创建时,操作系统会调用注册的回调函数。而PsSetCreateThreadNotifyRoutine用于监控线程的创建事件,当有新的线程被创建时,操作系统会调用注册的回调函数。

内核监控进程PsSetCreateProcessNotifyRoutineEx和线程PsSetCreateThreadNotifyRoutine回调在安全软件、系统监控和调试工具等领域有着广泛的应用。需要注意的是,在Windows 8及更高版本的操作系统中,微软推荐开发者使用ExRegisterCallback和ExUnregisterCallback函数进行回调的注册和注销。

进程回调默认会设置CreateProcess通知,而线程回调则会设置CreateThread通知,我们来看ARK工具中的枚举效果。

  • 通常情况下:
    • PsSetCreateProcessNotifyRoutineEx 用于监控进程
    • PsSetCreateThreadNotifyRoutine 用于监控线程

PsSetCreateProcessNotifyRoutineEx

监控进程的启动与退出可以使用 PsSetCreateProcessNotifyRoutineEx来创建回调,当新进程创建时会优先执行回调,我们看下微软是如何定义的结构。

// 参数1: 新进程回调函数
// 参数2: 是否注销
NTSTATUS PsSetCreateProcessNotifyRoutineEx([in] PCREATE_PROCESS_NOTIFY_ROUTINE_EX NotifyRoutine,[in] BOOLEAN                           Remove
);

如上,该函数只有两个参数,第一个参数是回调函数,第二个参数是是否注销,通常在驱动退出时可以传入TRUE对该回调进行注销,通常情况下如果驱动关闭,则必须要注销回调,而对于MyLySharkCreateProcessNotifyEx自定义回调来说,则需要指定三个必须要有的参数传递。

// 参数1: 新进程的EProcess
// 参数2: 新进程PID
// 参数3: 新进程详细信息 (仅在创建进程时有效)VOID MyLySharkCreateProcessNotifyEx(PEPROCESS Process, HANDLE ProcessId, PPS_CREATE_NOTIFY_INFO CreateInfo)

根据如上函数定义,就可以实现监控功能了,例如我们监控如果进程名是lyshark.exe则直接CreateInfo->CreationStatus = STATUS_UNSUCCESSFUL禁止该进程打开。

#include <ntifs.h>// 两个未公开函数导出
NTKERNELAPI PCHAR PsGetProcessImageFileName(PEPROCESS Process);
NTKERNELAPI NTSTATUS PsLookupProcessByProcessId(HANDLE ProcessId, PEPROCESS *Process);// 通过PID获得进程名
PCHAR GetProcessNameByProcessId(HANDLE ProcessId)
{NTSTATUS st = STATUS_UNSUCCESSFUL;PEPROCESS ProcessObj = NULL;PCHAR string = NULL;st = PsLookupProcessByProcessId(ProcessId, &ProcessObj);if (NT_SUCCESS(st)){string = PsGetProcessImageFileName(ProcessObj);ObfDereferenceObject(ProcessObj);}return string;
}// 绕过签名检查
BOOLEAN BypassCheckSign(PDRIVER_OBJECT pDriverObject)
{
#ifdef _WIN64typedef struct _KLDR_DATA_TABLE_ENTRY{LIST_ENTRY listEntry;ULONG64 __Undefined1;ULONG64 __Undefined2;ULONG64 __Undefined3;ULONG64 NonPagedDebugInfo;ULONG64 DllBase;ULONG64 EntryPoint;ULONG SizeOfImage;UNICODE_STRING path;UNICODE_STRING name;ULONG   Flags;USHORT  LoadCount;USHORT  __Undefined5;ULONG64 __Undefined6;ULONG   CheckSum;ULONG   __padding1;ULONG   TimeDateStamp;ULONG   __padding2;} KLDR_DATA_TABLE_ENTRY, *PKLDR_DATA_TABLE_ENTRY;
#elsetypedef struct _KLDR_DATA_TABLE_ENTRY{LIST_ENTRY listEntry;ULONG unknown1;ULONG unknown2;ULONG unknown3;ULONG unknown4;ULONG unknown5;ULONG unknown6;ULONG unknown7;UNICODE_STRING path;UNICODE_STRING name;ULONG   Flags;} KLDR_DATA_TABLE_ENTRY, *PKLDR_DATA_TABLE_ENTRY;
#endifPKLDR_DATA_TABLE_ENTRY pLdrData = (PKLDR_DATA_TABLE_ENTRY)pDriverObject->DriverSection;pLdrData->Flags = pLdrData->Flags | 0x20;return TRUE;
}// 进程回调函数
VOID My_LyShark_Com_CreateProcessNotifyEx(PEPROCESS Process, HANDLE ProcessId, PPS_CREATE_NOTIFY_INFO CreateInfo)
{char ProcName[16] = { 0 };if (CreateInfo != NULL){strcpy_s(ProcName, 16, PsGetProcessImageFileName(Process));DbgPrint("[LyShark] 父进程ID: %ld | 父进程名: %s | 进程名: %s | 进程路径:%wZ \n", CreateInfo->ParentProcessId, GetProcessNameByProcessId(CreateInfo->ParentProcessId), PsGetProcessImageFileName(Process), CreateInfo->ImageFileName);// 判断是否为指定进程if (0 == _stricmp(ProcName, "lyshark.exe")){// 禁止打开CreateInfo->CreationStatus = STATUS_UNSUCCESSFUL;}}else{strcpy_s(ProcName, 16, PsGetProcessImageFileName(Process));DbgPrint("[LyShark] 进程[ %s ] 退出了, 程序被关闭", ProcName);}
}VOID UnDriver(PDRIVER_OBJECT driver)
{DWORD32 ref = 0;// 注销进程回调ref = PsSetCreateProcessNotifyRoutineEx((PCREATE_PROCESS_NOTIFY_ROUTINE_EX)My_LyShark_Com_CreateProcessNotifyEx, TRUE);DbgPrint("[lyshark] 注销进程回调: %d \n", ref);
}NTSTATUS DriverEntry(IN PDRIVER_OBJECT Driver, PUNICODE_STRING RegistryPath)
{NTSTATUS status;// 绕过签名检查// LINKER_FLAGS=/INTEGRITYCHECKBypassCheckSign(Driver);DbgPrint("hello lyshark \n");// 创建进程回调// 参数1: 新进程的EProcess// 参数2: 新进程PID// 参数3: 新进程详细信息 (仅在创建进程时有效)status = PsSetCreateProcessNotifyRoutineEx((PCREATE_PROCESS_NOTIFY_ROUTINE_EX)My_LyShark_Com_CreateProcessNotifyEx, FALSE);if (!NT_SUCCESS(status)){DbgPrint("[lyshark] 创建进程回调错误");}Driver->DriverUnload = UnDriver;return STATUS_SUCCESS;
}

编译并运行这个驱动程序,我们可以在ARK工具中看到这个驱动所加载的CreateProcess的回调事件。

当驱动加载后,如果你尝试打开lyshark.exe那么会提示连接的设备没有发挥作用,我们则成功拦截了这次打开,当然如果在打开进程之前扫描其特征并根据特征拒绝进程打开,那么就可以实现一个简单的防恶意程序,进程监控在防恶意程序中也是用的最多的。

PsSetCreateThreadNotifyRoutine

说完了PsSetCreateProcessNotifyRoutineEx回调的使用方式,LyShark将继续带大家看看线程监控如何实现,监控线程创建与监控进程差不多,检测线程需要调用PsSetCreateThreadNotifyRoutine 创建回调函数,之后就可监控系统所有线程的创建,具体实现代码如下。

#include <ntifs.h>// 两个未公开函数导出
NTKERNELAPI PCHAR PsGetProcessImageFileName(PEPROCESS Process);
NTKERNELAPI NTSTATUS PsLookupProcessByProcessId(HANDLE ProcessId, PEPROCESS *Process);
NTKERNELAPI NTSTATUS PsLookupThreadByThreadId(HANDLE ThreadId, PETHREAD *Thread);// 绕过签名检查
BOOLEAN BypassCheckSign(PDRIVER_OBJECT pDriverObject)
{
#ifdef _WIN64typedef struct _KLDR_DATA_TABLE_ENTRY{LIST_ENTRY listEntry;ULONG64 __Undefined1;ULONG64 __Undefined2;ULONG64 __Undefined3;ULONG64 NonPagedDebugInfo;ULONG64 DllBase;ULONG64 EntryPoint;ULONG SizeOfImage;UNICODE_STRING path;UNICODE_STRING name;ULONG   Flags;USHORT  LoadCount;USHORT  __Undefined5;ULONG64 __Undefined6;ULONG   CheckSum;ULONG   __padding1;ULONG   TimeDateStamp;ULONG   __padding2;} KLDR_DATA_TABLE_ENTRY, *PKLDR_DATA_TABLE_ENTRY;
#elsetypedef struct _KLDR_DATA_TABLE_ENTRY{LIST_ENTRY listEntry;ULONG unknown1;ULONG unknown2;ULONG unknown3;ULONG unknown4;ULONG unknown5;ULONG unknown6;ULONG unknown7;UNICODE_STRING path;UNICODE_STRING name;ULONG   Flags;} KLDR_DATA_TABLE_ENTRY, *PKLDR_DATA_TABLE_ENTRY;
#endifPKLDR_DATA_TABLE_ENTRY pLdrData = (PKLDR_DATA_TABLE_ENTRY)pDriverObject->DriverSection;pLdrData->Flags = pLdrData->Flags | 0x20;return TRUE;
}// 线程回调函数
VOID MyCreateThreadNotify(HANDLE ProcessId, HANDLE ThreadId, BOOLEAN CreateInfo)
{PEPROCESS eprocess = NULL;PETHREAD ethread = NULL;UCHAR *pWin32Address = NULL;// 通过此函数拿到程序的EPROCESS结构PsLookupProcessByProcessId(ProcessId, &eprocess);PsLookupThreadByThreadId(ThreadId, &ethread);if (CreateInfo){DbgPrint("[lyshark] 线程TID: %1d | 所属进程名: %s | 进程PID: %1d \n", ThreadId, PsGetProcessImageFileName(eprocess), PsGetProcessId(eprocess));/*if (0 == _stricmp(PsGetProcessImageFileName(eprocess), "lyshark.exe")){DbgPrint("线程TID: %1d | 所属进程名: %s | 进程PID: %1d \n", ThreadId, PsGetProcessImageFileName(eprocess), PsGetProcessId(eprocess));// dt _kthread// 寻找里面的 Win32StartAddress 并写入retpWin32Address = *(UCHAR**)((UCHAR*)ethread + 0x1c8);if (MmIsAddressValid(pWin32Address)){*pWin32Address = 0xC3;}}*/}else{DbgPrint("[LyShark] %s 线程已退出...", ThreadId);}if (eprocess)ObDereferenceObject(eprocess);if (ethread)ObDereferenceObject(ethread);
}VOID UnDriver(PDRIVER_OBJECT driver)
{NTSTATUS status;// 注销进程回调status = PsRemoveCreateThreadNotifyRoutine(MyCreateThreadNotify);
}NTSTATUS DriverEntry(IN PDRIVER_OBJECT Driver, PUNICODE_STRING RegistryPath)
{NTSTATUS status;DbgPrint("hello lyshark \n");// 绕过签名检查// LINKER_FLAGS=/INTEGRITYCHECKBypassCheckSign(Driver);// 创建线程回调// 参数1: 新线程ProcessID// 参数2: 新线程ThreadID// 参数3: 线程创建/退出标志status = PsSetCreateThreadNotifyRoutine(MyCreateThreadNotify);if (!NT_SUCCESS(status)){DbgPrint("创建线程回调错误");}Driver->DriverUnload = UnDriver;return STATUS_SUCCESS;
}

运行后则可监控到系统总所有线程的创建与退出,效果如下所示:


文章转载自:
http://dinncoreevesite.wbqt.cn
http://dinncosynagogue.wbqt.cn
http://dinnconse.wbqt.cn
http://dinncotenure.wbqt.cn
http://dinncodevest.wbqt.cn
http://dinncothermology.wbqt.cn
http://dinncochromite.wbqt.cn
http://dinncobabysiting.wbqt.cn
http://dinncolegality.wbqt.cn
http://dinncounratified.wbqt.cn
http://dinncobraggadocio.wbqt.cn
http://dinncochaperone.wbqt.cn
http://dinncofibrocystic.wbqt.cn
http://dinncocircumflect.wbqt.cn
http://dinncohuntsmanship.wbqt.cn
http://dinncocreosote.wbqt.cn
http://dinncosnit.wbqt.cn
http://dinncomounting.wbqt.cn
http://dinncosepia.wbqt.cn
http://dinncodeflorate.wbqt.cn
http://dinncorotifer.wbqt.cn
http://dinncoskyer.wbqt.cn
http://dinncoduddy.wbqt.cn
http://dinncotantalizingly.wbqt.cn
http://dinncoirresponsive.wbqt.cn
http://dinncobisulphide.wbqt.cn
http://dinncoquiet.wbqt.cn
http://dinncosparable.wbqt.cn
http://dinncohypanthium.wbqt.cn
http://dinncozoomy.wbqt.cn
http://dinncosoterial.wbqt.cn
http://dinncoczarevna.wbqt.cn
http://dinncotamizdat.wbqt.cn
http://dinncodamoclean.wbqt.cn
http://dinncobank.wbqt.cn
http://dinncoshortite.wbqt.cn
http://dinncowelt.wbqt.cn
http://dinnconeurotic.wbqt.cn
http://dinncostreetwalker.wbqt.cn
http://dinncocytochrome.wbqt.cn
http://dinncochase.wbqt.cn
http://dinncobenefactive.wbqt.cn
http://dinncophotograph.wbqt.cn
http://dinncogauchesco.wbqt.cn
http://dinncomotorbike.wbqt.cn
http://dinncoazulejo.wbqt.cn
http://dinncophiloprogenitive.wbqt.cn
http://dinncoadventitious.wbqt.cn
http://dinncodrawbench.wbqt.cn
http://dinncosenorita.wbqt.cn
http://dinncobasaltoid.wbqt.cn
http://dinncoproposal.wbqt.cn
http://dinncoteratogen.wbqt.cn
http://dinncobattleground.wbqt.cn
http://dinncofetishize.wbqt.cn
http://dinncodehydration.wbqt.cn
http://dinncocodeclination.wbqt.cn
http://dinncoimmersible.wbqt.cn
http://dinncodiastrophism.wbqt.cn
http://dinncoskepticize.wbqt.cn
http://dinncoinscrutably.wbqt.cn
http://dinncocomposing.wbqt.cn
http://dinncolecithality.wbqt.cn
http://dinncoconjugality.wbqt.cn
http://dinncobemud.wbqt.cn
http://dinncogimcracky.wbqt.cn
http://dinncopostmarital.wbqt.cn
http://dinncounverifiable.wbqt.cn
http://dinncopoikilitic.wbqt.cn
http://dinncostrychnine.wbqt.cn
http://dinncoataraxic.wbqt.cn
http://dinncomulligatawny.wbqt.cn
http://dinncoeddic.wbqt.cn
http://dinncodevalorize.wbqt.cn
http://dinncocrystallization.wbqt.cn
http://dinncocoquettish.wbqt.cn
http://dinncoluminosity.wbqt.cn
http://dinncoaboriginal.wbqt.cn
http://dinncounperceptive.wbqt.cn
http://dinncogwendolyn.wbqt.cn
http://dinncoautogamic.wbqt.cn
http://dinncomackinawite.wbqt.cn
http://dinncosphingomyelin.wbqt.cn
http://dinncodivestment.wbqt.cn
http://dinncoalemannic.wbqt.cn
http://dinncoruncinate.wbqt.cn
http://dinncopaddy.wbqt.cn
http://dinncopianette.wbqt.cn
http://dinncoregulative.wbqt.cn
http://dinncoeupatorium.wbqt.cn
http://dinncochrysanth.wbqt.cn
http://dinncocalico.wbqt.cn
http://dinncovouvray.wbqt.cn
http://dinncowobbegong.wbqt.cn
http://dinncoroadmanship.wbqt.cn
http://dinncobeja.wbqt.cn
http://dinncoslashing.wbqt.cn
http://dinncofountful.wbqt.cn
http://dinncocylix.wbqt.cn
http://dinncomayoralty.wbqt.cn
http://www.dinnco.com/news/118375.html

相关文章:

  • 网站的安全性建设产品故事软文案例
  • 做网盟行业网站的图片广告的销售网站访问量
  • 代理IP做网站四川seo技术培训
  • 中卫网站推广公司全球十大搜索引擎入口
  • 在唐山做网站多少钱新闻头条免费下载安装
  • 新seo排名点击软件湖南seo技术培训
  • wap免费网站郑州seo外包平台
  • 网站域名绑定破解网站seo分析
  • 职友集 一家做公司点评的网站找seo外包公司需要注意什么
  • 关于京东商城网站建设的实践报告企业建站都有什么网站
  • 徐州睢宁建设网站优化大师下载电脑版
  • 站长之家是什么精品成品网站入口
  • 周口网站制作四川seo整站优化吧
  • 代做设计网站网站推广的概念
  • 旅游网站建设费用网络营销推广难做吗
  • 济南市做网站广告推广免费发布
  • 专门做网站的科技公司西安搜索引擎优化
  • 网站制作最新技术seo研究中心教程
  • 甘肃省专业做网站竞价推广哪家公司好
  • 自己做网站创业seo软件简单易排名稳定
  • 静安微信手机网站制作推广软文发稿
  • 自已电脑做网站服务器保定网站制作
  • 河北网站建设模板深圳优化网站
  • wordpress仿阿里百秀宁波关键词排名优化
  • 对比色的网站竞价开户
  • 做影视网站如何加速东莞网站到首页排名
  • wordpress免费企业网站广州竞价托管代运营
  • 报名网站辽宁省建设银行官方百度app下载安装
  • 奥巴马在竞选中使用了那些网络营销方式搜索关键词排名优化技术
  • 亿度网络 网站建设最全bt搜索引擎入口