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

做视频链接的网站吗韩国网站如何切换中文

做视频链接的网站吗,韩国网站如何切换中文,网站有后台更新不了,夜月直播app下载视频在笔者前一篇文章《内核枚举Registry注册表回调》中实现了对注册表的枚举#xff0c;本章将实现对注册表的监控#xff0c;不同于32位系统在64位系统中#xff0c;微软为我们提供了两个针对注册表的专用内核监控函数#xff0c;通过这两个函数可以在不劫持内核API的前提下实…在笔者前一篇文章《内核枚举Registry注册表回调》中实现了对注册表的枚举本章将实现对注册表的监控不同于32位系统在64位系统中微软为我们提供了两个针对注册表的专用内核监控函数通过这两个函数可以在不劫持内核API的前提下实现对注册表增加删除创建等事件的有效监控注册表监视通常会通过CmRegisterCallback创建监控事件并传入自己的回调函数与该创建对应的是CmUnRegisterCallback当注册表监控结束后可用于注销回调。 CmRegisterCallback和CmUnRegisterCallback是Windows操作系统提供的两个内核API函数用于注册和取消注册注册表回调函数。 注册表回调函数是一种内核回调函数它可以用于监视和拦截系统中的注册表操作例如键值的创建、修改和删除等。当有相关操作发生时操作系统会调用注册的注册表回调函数并将操作相关的信息传递给回调函数。 CmRegisterCallback函数用于注册注册表回调函数而CmUnRegisterCallback函数则用于取消注册已经注册的回调函数。开发者可以在注册表回调函数中执行自定义的逻辑例如记录日志、过滤敏感数据、或者阻止某些操作。 需要注意的是注册表回调函数的注册和取消注册必须在内核模式下进行并且需要开发者有一定的内核开发经验。同时注册表回调函数也需要遵守一些约束条件例如不能阻塞或挂起进程或线程的创建或访问不能调用一些内核API函数等。 内核监控Register注册表回调在安全软件、系统监控和调试工具等领域有着广泛的应用。开发者可以利用这个机制来监视和拦截系统中的注册表操作以保护系统安全。 CmRegisterCallback 设置注册表回调CmUnRegisterCallback 注销注册表回调 默认情况下CmRegisterCallback需传入三个参数参数一回调函数地址参数二空余参数三回调句柄微软定义如下。 // 参数1回调函数地址 // 参数2无作用 // 参数3回调句柄 NTSTATUS CmRegisterCallback([in] PEX_CALLBACK_FUNCTION Function,[in, optional] PVOID Context,[out] PLARGE_INTEGER Cookie );自定义注册表回调函数MyLySharkCallback需要保留三个参数CallbackContext回调上下文Argument1是操作类型Argument2定义详细结构体指针。 NTSTATUS MyLySharkCallback(_In_ PVOID CallbackContext, _In_opt_ PVOID Argument1, _In_opt_ PVOID Argument2)在自定义回调函数内Argument1则可获取到操作类型类型是一个REG_NOTIFY_CLASS枚举结构微软对其的具体定义如下所示。 typedef enum _REG_NOTIFY_CLASS {RegNtDeleteKey,RegNtPreDeleteKey RegNtDeleteKey,RegNtSetValueKey,RegNtPreSetValueKey RegNtSetValueKey,RegNtDeleteValueKey,RegNtPreDeleteValueKey RegNtDeleteValueKey,RegNtSetInformationKey,RegNtPreSetInformationKey RegNtSetInformationKey,RegNtRenameKey,RegNtPreRenameKey RegNtRenameKey,RegNtEnumerateKey,RegNtPreEnumerateKey RegNtEnumerateKey,RegNtEnumerateValueKey,RegNtPreEnumerateValueKey RegNtEnumerateValueKey,RegNtQueryKey,RegNtPreQueryKey RegNtQueryKey,RegNtQueryValueKey,RegNtPreQueryValueKey RegNtQueryValueKey,RegNtQueryMultipleValueKey,RegNtPreQueryMultipleValueKey RegNtQueryMultipleValueKey,RegNtPreCreateKey,RegNtPostCreateKey,RegNtPreOpenKey,RegNtPostOpenKey,RegNtKeyHandleClose,RegNtPreKeyHandleClose RegNtKeyHandleClose,//// .Net only// RegNtPostDeleteKey,RegNtPostSetValueKey,RegNtPostDeleteValueKey,RegNtPostSetInformationKey,RegNtPostRenameKey,RegNtPostEnumerateKey,RegNtPostEnumerateValueKey,RegNtPostQueryKey,RegNtPostQueryValueKey,RegNtPostQueryMultipleValueKey,RegNtPostKeyHandleClose,RegNtPreCreateKeyEx,RegNtPostCreateKeyEx,RegNtPreOpenKeyEx,RegNtPostOpenKeyEx,//// new to Windows Vista//RegNtPreFlushKey,RegNtPostFlushKey,RegNtPreLoadKey,RegNtPostLoadKey,RegNtPreUnLoadKey,RegNtPostUnLoadKey,RegNtPreQueryKeySecurity,RegNtPostQueryKeySecurity,RegNtPreSetKeySecurity,RegNtPostSetKeySecurity,//// per-object context cleanup//RegNtCallbackObjectContextCleanup,//// new in Vista SP2 //RegNtPreRestoreKey,RegNtPostRestoreKey,RegNtPreSaveKey,RegNtPostSaveKey,RegNtPreReplaceKey,RegNtPostReplaceKey,MaxRegNtNotifyClass //should always be the last enum } REG_NOTIFY_CLASS;其中对于注册表最常用的监控项为以下几种类型当然为了实现监控则我们必须要使用之前如果使用之后则只能起到监视而无法做到监控的目的。 RegNtPreCreateKey 创建注册表之前RegNtPreOpenKey 打开注册表之前RegNtPreDeleteKey 删除注册表之前RegNtPreDeleteValueKey 删除键值之前RegNtPreSetValueKey 修改注册表之前 如果需要实现监视则首先CmRegisterCallback注册一个自定义回调当有消息时则触发MyLySharkCallback其内部获取到lOperateType操作类型并通过switch选择不同的处理例程每个处理例程都通过GetFullPath得到注册表完整路径并打印出来这段代码实现如下。 #include ntifs.h #include windef.h// 未导出函数声明 pEProcess - PID PUCHAR PsGetProcessImageFileName(PEPROCESS pEProcess);NTSTATUS ObQueryNameString(_In_ PVOID Object,_Out_writes_bytes_opt_(Length) POBJECT_NAME_INFORMATION ObjectNameInfo,_In_ ULONG Length,_Out_ PULONG ReturnLength);// 注册表回调Cookie LARGE_INTEGER g_liRegCookie;// 获取注册表完整路径 BOOLEAN GetFullPath(PUNICODE_STRING pRegistryPath, PVOID pRegistryObject) {// 判断数据地址是否有效if ((FALSE MmIsAddressValid(pRegistryObject)) ||(NULL pRegistryObject)){return FALSE;}// 申请内存ULONG ulSize 512;PVOID lpObjectNameInfo ExAllocatePool(NonPagedPool, ulSize);if (NULL lpObjectNameInfo){return FALSE;}// 获取注册表路径ULONG ulRetLen 0;NTSTATUS status ObQueryNameString(pRegistryObject, (POBJECT_NAME_INFORMATION)lpObjectNameInfo, ulSize, ulRetLen);if (!NT_SUCCESS(status)){ExFreePool(lpObjectNameInfo);return FALSE;}// 复制RtlCopyUnicodeString(pRegistryPath, (PUNICODE_STRING)lpObjectNameInfo);// 释放内存ExFreePool(lpObjectNameInfo);return TRUE; }// 注册表回调函数 NTSTATUS MyLySharkCallback(_In_ PVOID CallbackContext, _In_opt_ PVOID Argument1, _In_opt_ PVOID Argument2) {NTSTATUS status STATUS_SUCCESS;UNICODE_STRING ustrRegPath;// 获取操作类型LONG lOperateType (REG_NOTIFY_CLASS)Argument1;// 申请内存ustrRegPath.Length 0;ustrRegPath.MaximumLength 1024 * sizeof(WCHAR);ustrRegPath.Buffer ExAllocatePool(NonPagedPool, ustrRegPath.MaximumLength);if (NULL ustrRegPath.Buffer){return status;}RtlZeroMemory(ustrRegPath.Buffer, ustrRegPath.MaximumLength);// 判断操作switch (lOperateType){// 创建注册表之前case RegNtPreCreateKey:{// 获取注册表路径GetFullPath(ustrRegPath, ((PREG_CREATE_KEY_INFORMATION)Argument2)-RootObject);DbgPrint([创建注册表][%wZ][%wZ]\n, ustrRegPath, ((PREG_CREATE_KEY_INFORMATION)Argument2)-CompleteName);break;}// 打开注册表之前case RegNtPreOpenKey:{// 获取注册表路径GetFullPath(ustrRegPath, ((PREG_CREATE_KEY_INFORMATION)Argument2)-RootObject);DbgPrint([打开注册表][%wZ][%wZ]\n, ustrRegPath, ((PREG_CREATE_KEY_INFORMATION)Argument2)-CompleteName);break;}// 删除键之前case RegNtPreDeleteKey:{// 获取注册表路径GetFullPath(ustrRegPath, ((PREG_DELETE_KEY_INFORMATION)Argument2)-Object);DbgPrint([删除键][%wZ] \n, ustrRegPath);break;}// 删除键值之前case RegNtPreDeleteValueKey:{// 获取注册表路径GetFullPath(ustrRegPath, ((PREG_DELETE_VALUE_KEY_INFORMATION)Argument2)-Object);DbgPrint([删除键值][%wZ][%wZ] \n, ustrRegPath, ((PREG_DELETE_VALUE_KEY_INFORMATION)Argument2)-ValueName);// 获取当前进程, 即操作注册表的进程PEPROCESS pEProcess PsGetCurrentProcess();if (NULL ! pEProcess){UCHAR *lpszProcessName PsGetProcessImageFileName(pEProcess);if (NULL ! lpszProcessName){DbgPrint(进程 [%s] 删除了键值对 \n, lpszProcessName);}}break;}// 修改键值之前case RegNtPreSetValueKey:{// 获取注册表路径GetFullPath(ustrRegPath, ((PREG_SET_VALUE_KEY_INFORMATION)Argument2)-Object);DbgPrint([修改键值][%wZ][%wZ] \n, ustrRegPath, ((PREG_SET_VALUE_KEY_INFORMATION)Argument2)-ValueName);break;}default:break;}// 释放内存if (NULL ! ustrRegPath.Buffer){ExFreePool(ustrRegPath.Buffer);ustrRegPath.Buffer NULL;}return status; }VOID UnDriver(PDRIVER_OBJECT driver) {DbgPrint((Uninstall Driver Is OK \n));// 注销当前注册表回调if (0 g_liRegCookie.QuadPart){CmUnRegisterCallback(g_liRegCookie);} }NTSTATUS DriverEntry(IN PDRIVER_OBJECT Driver, PUNICODE_STRING RegistryPath) {DbgPrint((hello lyshark \n));// 设置注册表回调NTSTATUS status CmRegisterCallback(MyLySharkCallback, NULL, g_liRegCookie);if (!NT_SUCCESS(status)){g_liRegCookie.QuadPart 0;return status;}Driver-DriverUnload UnDriver;return STATUS_SUCCESS; }运行驱动程序则会输出当前系统中所有针对注册表的操作如下图所示。 如上的代码只能实现注册表项的监视而如果需要监控则需要在回调函数MyLySharkCallback判断如果指定注册表项是需要保护的则直接返回status STATUS_ACCESS_DENIED;从而达到保护注册表的目的核心代码如下所示。 // 反注册表删除回调 NTSTATUS MyLySharkCallback(_In_ PVOID CallbackContext, _In_opt_ PVOID Argument1, _In_opt_ PVOID Argument2) {NTSTATUS status STATUS_SUCCESS;UNICODE_STRING ustrRegPath;// 获取操作类型LONG lOperateType (REG_NOTIFY_CLASS)Argument1;ustrRegPath.Length 0;ustrRegPath.MaximumLength 1024 * sizeof(WCHAR);ustrRegPath.Buffer ExAllocatePool(NonPagedPool, ustrRegPath.MaximumLength);if (NULL ustrRegPath.Buffer){return status;}RtlZeroMemory(ustrRegPath.Buffer, ustrRegPath.MaximumLength);// 判断操作switch (lOperateType){// 删除键值之前case RegNtPreDeleteValueKey:{// 获取注册表路径GetFullPath(ustrRegPath, ((PREG_DELETE_VALUE_KEY_INFORMATION)Argument2)-Object);DbgPrint([删除键值][%wZ][%wZ]\n, ustrRegPath, ((PREG_DELETE_VALUE_KEY_INFORMATION)Argument2)-ValueName);// 如果要删除指定注册表项则拒绝PWCH pszRegister L\\REGISTRY\\MACHINE\\SOFTWARE\\lyshark;if (wcscmp(ustrRegPath.Buffer, pszRegister) 0){DbgPrint([lyshark] 注册表项删除操作已被拦截! \n);// 拒绝操作status STATUS_ACCESS_DENIED;}break;}default:break;}// 释放内存if (NULL ! ustrRegPath.Buffer){ExFreePool(ustrRegPath.Buffer);ustrRegPath.Buffer NULL;}return status; }运行驱动程序然后我们尝试删除\\LyShark\HKEY_LOCAL_MACHINE\SOFTWARE\lyshark里面的子项则会提示如下信息。 当然这里的RegNtPreDeleteValueKey是指的删除操作如果将其替换成RegNtPreSetValueKey那么只有当注册表被创建才会拦截此时就会变成拦截创建。 // 拦截创建操作 NTSTATUS MyLySharkCallback(_In_ PVOID CallbackContext, _In_opt_ PVOID Argument1, _In_opt_ PVOID Argument2) {NTSTATUS status STATUS_SUCCESS;UNICODE_STRING ustrRegPath;// 获取操作类型LONG lOperateType (REG_NOTIFY_CLASS)Argument1;// 申请内存ustrRegPath.Length 0;ustrRegPath.MaximumLength 1024 * sizeof(WCHAR);ustrRegPath.Buffer ExAllocatePool(NonPagedPool, ustrRegPath.MaximumLength);if (NULL ustrRegPath.Buffer){return status;}RtlZeroMemory(ustrRegPath.Buffer, ustrRegPath.MaximumLength);// 判断操作switch (lOperateType){// 修改键值之前case RegNtPreSetValueKey:{// 获取注册表路径GetFullPath(ustrRegPath, ((PREG_DELETE_VALUE_KEY_INFORMATION)Argument2)-Object);// 拦截创建PWCH pszRegister L\\REGISTRY\\MACHINE\\SOFTWARE\\lyshark;if (wcscmp(ustrRegPath.Buffer, pszRegister) 0){DbgPrint([lyshark] 注册表项创建操作已被拦截! \n);status STATUS_ACCESS_DENIED;}break;}default:break;}// 释放内存if (NULL ! ustrRegPath.Buffer){ExFreePool(ustrRegPath.Buffer);ustrRegPath.Buffer NULL;}return status; }加载驱动保护然后我们尝试在\\LyShark\HKEY_LOCAL_MACHINE\SOFTWARE\lyshark里面创建一个子项则会提示创建失败。
http://www.w-s-a.com/news/89860/

相关文章:

  • 怎么做虚拟的网站东莞常平邮编是多少
  • 电子商务网站和普通网站的区别正规网站建设多少费用
  • 郴州免费招聘网站前端好还是后端好
  • 织梦网站怎样做子域名20个中国风网站设计欣赏
  • wordpress网站搬简约创意logo图片大全
  • 叙述网站制作的流程石家庄58同城最新招聘信息
  • 南昌微信网站建设东莞网站优化软件
  • 爱站数据官网纯静态网站挂马
  • 网站建设公司未来方向3d设计网站
  • 建设部网站 干部学院 一级注册建筑师培训 2014年做网站开发的提成多少钱
  • 网上请人做软件的网站铝合金型材外发加工网
  • 手机网站建设万网山东省作风建设网站
  • 网站策划专员招聘50万县城做地方网站
  • 网站开发公司+重庆wordpress自定义搜索界面
  • 梅州南站学校官网
  • 网站变灰代码 所有浏览器企业邮箱域名怎么填写
  • 网站建设哪好旅行社网站模板
  • 网站开发发展存在的问题交换链接营销的经典案例
  • 烟台高端网站建设公司福田市网站建设推广
  • 做网站如何保证询盘数量智慧城市
  • 大连网站平台研发wordpress更改地址
  • 做标书要不要做网站南昌网站排名优化费用
  • 网站内容如何自动关联新浪微博万网域名信息
  • 网站出售网络推广服务费计入什么科目
  • 宁波咨询网站设计西安网站制作开发
  • 深圳市专注网站建设全网营销网络推广
  • 如何快速建设网站虚拟空间软件
  • 一个虚拟主机可以做几个网站免费软件下载中心
  • 美工培训网站中国建筑网官网手机版
  • 创建网站花钱吗谁能给个网址免费的