如何防止第三方DLL注入自己的进程?

PROCESS_MITIGATION_BINARY_SIGNATURE_POLICY 结构
struct _PROCESS_MITIGATION_BINARY_SIGNATURE_POLICY {union {DWORD Flags;struct {DWORD MicrosoftSignedOnly : 1;DWORD StoreSignedOnly : 1;DWORD MitigationOptIn : 1;DWORD AuditMicrosoftSignedOnly : 1;DWORD AuditStoreSignedOnly : 1;DWORD ReservedFlags : 27;} DUMMYSTRUCTNAME;// ...}// ...
}

这个结构包含用于加载映像的进程缓解策略设置,具体取决于映像的签名。

MicrosoftSignedOnly

设置 (0x1) 以防止进程加载未由 Microsoft 签名的图像;否则保留未设置 (0x0) 。

StoreSignedOnly

设置 (0x1) 以防止进程加载未由 Windows 应用商店签名的图像;否则保留未设置 (0x0) 。

MitigationOptIn

设置 (0x1) 以防止进程加载未由 Microsoft、Windows 应用商店和 Windows 硬件质量实验室 (WHQL) 签名的图像;否则保留未设置 (0x0) 。

测试

我们通过启用MicrosoftSignedOnly来禁止非微软签名的DLL注入到我们的进程。

如下代码开启:

#include <iostream>
#include <Windows.h>int main() {PROCESS_MITIGATION_BINARY_SIGNATURE_POLICY ply = { 0 };ply.StoreSignedOnly = false;ply.MicrosoftSignedOnly = true;if (SetProcessMitigationPolicy(ProcessSignaturePolicy, &ply, sizeof(ply))) {printf("设置成功");} else {printf("设置失败");}getchar();
}

测试结论是没有起到作用,这是因为SetProcessMitigationPolicy是在程序启动后调用的,调用前就已经被注入了。

解决办法是编写一个Loader,在Loader中调用SetProcessMitigationPolicy,然后使用CreateProcess加载目标程序,这样就可以了。

#include <Windows.h>void CreateChildProcessWithMitigationOption() {PROCESS_INFORMATION pi = {};STARTUPINFOEXA si = {};SIZE_T attributeSize = 0;InitializeProcThreadAttributeList(NULL, 1, 0, &attributeSize);PPROC_THREAD_ATTRIBUTE_LIST attributes = (PPROC_THREAD_ATTRIBUTE_LIST)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, attributeSize);InitializeProcThreadAttributeList(attributes, 1, 0, &attributeSize);DWORD64 policy = PROCESS_CREATION_MITIGATION_POLICY_BLOCK_NON_MICROSOFT_BINARIES_ALWAYS_ON;UpdateProcThreadAttribute(attributes, 0, PROC_THREAD_ATTRIBUTE_MITIGATION_POLICY, &policy, sizeof(DWORD64), NULL, NULL);si.lpAttributeList = attributes;CreateProcessA(NULL, (LPSTR)"app.exe", NULL, NULL, TRUE, EXTENDED_STARTUPINFO_PRESENT, NULL, NULL, &si.StartupInfo, &pi);HeapFree(GetProcessHeap(), HEAP_ZERO_MEMORY, attributes);
}void LocalProcessMitigationOption() {PROCESS_MITIGATION_BINARY_SIGNATURE_POLICY poy = { 0 };GetProcessMitigationPolicy(GetCurrentProcess(), ProcessSignaturePolicy, &poy, sizeof(poy));poy.MicrosoftSignedOnly = true;CreateChildProcessWithMitigationOption();SetProcessMitigationPolicy(ProcessSignaturePolicy, &poy, sizeof(poy));
}int main() {LocalProcessMitigationOption();
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/44940.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C语言 ——— 实用调试技巧(Visual Studio)

目录 Debug 和 Release 的区别 F10 --- 逐过程调试 & F11 --- 逐语句调试 F9 --- 新建/切换断点 & F5 --- 开始调试 shift F5 & ctrl F5 Debug 和 Release 的区别 Debug&#xff1a;通常为调试版本&#xff0c;它包含调试信息&#xff0c;并且不作任何优化…

一 GD32 MCU 开发环境搭建

GD32 系列为通用型 MCU &#xff0c;所以开发环境也可以使用通用型的 IDE &#xff0c;目前使用较多的是 KEIL、 IAR 、 GCC 和 Embedded Builder &#xff0c;客户可以根据个人喜好来选择相应的开发环境。 目录 1、使用 Keil 开发 GD32 目前市面通用的MDK for ARM版本有Kei…

华为OD机试真题2024版-路口最短时间问题

题目描述 假定街道是棋盘型的&#xff0c;每格距离相等&#xff0c;车辆通过每格街道需要时间均为 timePerRoad&#xff1b; 街道的街口&#xff08;交叉点&#xff09;有交通灯&#xff0c;灯的周期 T(lights[row][col]) 各不相同&#xff1b; 车辆可直行、左转和右转&…

企业网三层架构

企业网三层架构&#xff1a;是一种层次化模型设计&#xff0c;旨在将复杂的网络设计分成三个层次&#xff0c;每个层次都着重于某些特定的功能&#xff0c;以提高效率和稳定性。 企业网三层架构层次&#xff1a; 接入层&#xff1a;使终端设备接入到网络中来&#xff0c;提供…

Python爬虫教程第二篇:进阶技巧与实战案例

Python爬虫教程第二篇&#xff1a;进阶技巧与实战案例 在上一篇教程中&#xff0c;我们学习了Python爬虫的基础概念、基本流程以及一个简单的入门实践案例。本篇教程将带领大家进一步探索Python爬虫的进阶技巧&#xff0c;并提供一个实战案例&#xff0c;帮助大家提升爬虫技能…

Android12 MultiMedia框架之GenericSource extractor

前面两节学习到了各种Source的创建和extractor service的启动&#xff0c;本节将以本地播放为例记录下GenericSource是如何创建一个extractor的。extractor是在PrepareAsync()方法中被创建出来的&#xff0c;为了不过多赘述&#xff0c;我们直接从GenericSource的onPrepareAsyn…

Mojolicious命令行工具:自动化Web开发的瑞士军刀

Mojolicious是一个高性能的、基于Perl的Web开发框架&#xff0c;它提供了一整套工具来简化Web开发流程。其中&#xff0c;Mojolicious的命令行工具集是其强大功能的一部分&#xff0c;允许开发者快速生成项目模板、运行开发服务器、执行各种开发任务等。本文将详细介绍Mojolici…

qt 自定义信号号槽 简单举例

在Qt中&#xff0c;自定义信号和槽是一种非常灵活的方式来处理对象之间的通信。以下是一个简单的例子&#xff0c;展示了如何定义和使用自定义的信号和槽。 首先&#xff0c;我们定义一个名为MyClass的类&#xff0c;该类继承自QObject&#xff0c;并声明一个自定义信号和一个…

13_Shell系统函数

13_Shell系统函数和自定义函数 一、系统函数 basename 获取文件名 #!/bin/bash#basename 相对路径文件名 basename ./1.sh#basename 绝对路径文件名 basename /tmp/1.sh#basename 去除文件后缀名 basename /tmp/1.sh .shdirname 获取文件所在目录名 #!/bin/bash#dirname 相对路…

Redis持久化RDB,AOF

目 录 CONFIG动态修改配置 慢查询 持久化 在上一篇主要对redis的了解入门&#xff0c;安装&#xff0c;以及基础配置&#xff0c;多实例的实现&#xff1a;redis的安装看我上一篇&#xff1a; Redis安装部署与使用,多实例 redis是挡在MySQL前面的&#xff0c;运行在内存…

Week 6-杨帆-学习总结

- 46 语义分割和数据集 语义分割概念 语义分割是一种计算机视觉任务&#xff0c;其目标是将图像分割成属于不同语义类别的区域。与目标检测不同&#xff0c;语义分割关注的是像素级别的标注和预测&#xff0c;能够识别并理解图像中每一个像素的内容。这使得语义分割在理解图像…

产品经理-研发流程-敏捷开发-迭代-需求评审及产品规划(15)

敏捷开发是以用户的需求进化为核心&#xff0c;采用迭代、循序渐进的方法进行软件开发。 通俗来说&#xff0c;敏捷开发是一个软件开发流程&#xff0c;是一个采用了迭代方法的开发流程 简单来说&#xff0c;迭代就是把一个大产品拆分出一些最小的实现单位。完成不同的迭代就最…

机器学习筑基篇,Jupyter Notebook 精简指南

[ 知识是人生的灯塔&#xff0c;只有不断学习&#xff0c;才能照亮前行的道路 ] 0x00 Jupyter Notebook 简明指南 描述&#xff1a;前面我们已经在机器学习工作站&#xff08;Ubuntu 24.04 Desktop Geforce RTX 4070Ti SUPER&#xff09;中安装 Anaconda 工具包&#xff0c;其…

老物件线上3D回忆展拓宽了艺术作品的展示空间和时间-深圳华锐视点

在数字技术的浪潮下&#xff0c;3D线上画展为艺术家们开启了一个全新的展示与销售平台。这一创新形式不仅拓宽了艺术作品的展示空间&#xff0c;还为广大观众带来了前所未有的观赏体验。 3D线上画展制作以其独特的互动性&#xff0c;让艺术不再是单一的视觉享受。在这里&#x…

数据处理-Matplotlib 绘图展示

文章目录 1. Matplotlib 简介2. 安装3. Matplotlib Pyplot4. 绘制图表1. 折线图2. 散点图3. 柱状图4. 饼图5. 直方图 5. 中文显示 1. Matplotlib 简介 Matplotlib 是 Python 的绘图库&#xff0c;它能让使用者很轻松地将数据图形化&#xff0c;并且提供多样化的输出格式。 Ma…

如何定义版本号--语义化版本

前言 版本号(version number)是版本的标识号。每一个操作系统&#xff08;或广义的讲&#xff0c;每一个软件&#xff09;都有一个版本号。版本号能使用户了解所使用的操作系统是否为最新的版本以及它所提供的功能与设施。 例如在Python项目依赖中会看到 requires-python &q…

zdppy+onlyoffice实现重命名文件的功能

参考文档&#xff1a;https://api.onlyoffice.com/zh/editors/rename 步骤图&#xff1a; 实现步骤&#xff1a; 用户在 文档编辑器中为文档指定一个新名称。 文档编辑器 将文档的新名称通知给 文档管理器。 文档管理器 将文档的新名称发送到 文档存储服务&#xff0c;在这里…

使用jsencrypt在web前端对字符串进行Ras加密

话不多说&#xff0c;上代码 实例代码 下面方法&#xff0c;在网页中先引入jsencrypt.min.js。然后调用ToEncrypt方法示例输出加密&#xff0c;解密后的结果。 <script src"/js/jsencrypt.min.js"></script> //加密测试function ToEncrypt(){// 假设…

synchronized关键字详解

文章目录 synchronized使用示例实现原理锁的升级synchronized与可见性synchronized与原子性synchronized与有序性 synchronized synchronized是Java提供的关键字译为同步&#xff0c;是Java中用于实现线程同步的一种机制。它可以确保在同一时间只有一个线程能够执行某段代码&a…

【Python系列】数字的bool值

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…