【免杀前置课——Windows编程】二十三、内存管理—堆内存管理、虚拟内存管理、文件映射、共享内存、不依靠临界区限制文件多开、DLL注入

news2024/11/15 21:50:15

内存管理—堆

  • 文件映射
    • ***文件映射的概念:***
    • 共享内存
      • 文件多开限制新思路
  • ```DLL注入```
    • 远程线程注入
      • 远程线程注入.exe
    • test.dll

文件映射

文件映射的概念:

文件映射(Mapping)是一种将文件内容映射到进程虚拟内存的技术。
映射成功的文件可以用视图,来引用这段内存,从而达到操作位于此段内存中的文件的目的。文件映射最大的一个特点–>可以在不同的进程间共享数据。(跨进程)

文件映射会直接在打开文件,加载进进程虚拟内存后创建文件映射对象,将其映射到内存,不需要重写回文件,会直接通过映射同步修改。
即先拿到文件句柄,创建Mapping对象,将Mapping对象文件映射到内存。
正常操作文件:
CreateFile–》文件句柄—》通过文件句柄将文件内容读到虚拟内存,修改内容,重写写入到文件。
文件映射:
CreateFile打开文件—》创建文件映射对象—》将文件映射到内存—》对内存的操作直接映射到文件当中
在这里插入图片描述

在这里插入图片描述

共享内存

***多个进程通过Mapping对象进行映射,映射到开辟的共享内存区中,**下例中的number就是被映射进内存的,所以可以在程序多开时通过映射对他进行操作,来判断多开与否。
在这里插入图片描述

在这里插入图片描述

文件多开限制新思路

#include<Windows.h>
#include<iostream>

int main()
{
	HANDLE hMapping = INVALID_HANDLE_VALUE;
	//判断是否存在名字叫FILE_MAPPING_DSD的句柄
	hMapping = OpenFileMappingA(FILE_MAP_ALL_ACCESS, FALSE, "FILE_MAPPING_DSD");
	//若第一次打开则创建该对象
	if (hMapping==NULL)
	{
		//创建Mapping对象
		hMapping = CreateFileMappingA(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, 4, "FILE_MAPPING_DSD");
	}
	
	//建立映射
	DWORD* number = (DWORD*)MapViewOfFile(hMapping, FILE_MAP_ALL_ACCESS, 0, 0, 4);
	if (*number >= 3)
	{
		MessageBox(0, L"程序打开超过了3个",L"提示", MB_OK);
		return 0;
	}
	*number += 1;
	printf("程序打开了%d个\n", *number);
	system("pause");
	*number -= 1;
	return 0;
}

在这里插入图片描述

在这里插入图片描述

DLL注入

DLL注入:
将一个不属于某进程的DLL文件加载到该进程当中,称之为DLL注入。Dl注入初衷是给第三方的应用程序进行一个功能的扩展。
DLL注入方式:
1、远程线程注入
2、消息钩子注入
3、劫持进程创建注入
4、注册表注入
5、Apc注入
6、ComRes注入
7、依赖可信进程注入
8、输入法注入

在这里插入图片描述

远程线程注入

写个dll文件先设置属性-配置属性-常规-配置类型
在这里插入图片描述

远程线程注入.exe

#include<Windows.h>

int main()
{
	//1、打开目标进程 如何让远程进程加载LoadLibrary中呢?
	HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE,27328);//27328为目标进程号
	//2、申请远程进程内存空间
	DWORD buffSize = strlen("d://test.dll")+1;
	char *str = (char*)VirtualAllocEx(hProcess, 0, buffSize, MEM_COMMIT, PAGE_READWRITE);
	//3、将dll文件路径写入内存
	DWORD realWrite = 0;
	BOOL bSuccess = WriteProcessMemory(hProcess, str, "d://test.dll", buffSize,&realWrite);
	//创建远程线程 LoadLibrary作为回调函数为KENER32.DLL的函数 一定会被加载且也是指针类型
	HANDLE hThread = CreateRemoteThread(hProcess, 0, 0, (LPTHREAD_START_ROUTINE)LoadLibraryA, str, 0,0);
	//等待LoadLibrary显示调用成功
	WaitForSingleObject(hThread, -1);
	system("pause");
	VirtualFreeEx(hProcess, str, 0, MEM_RELEASE);
	CloseHandle(hThread);
	CloseHandle(hProcess);
	return 0;
}

test.dll

在这里插入图片描述

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

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

相关文章

中科易安联网智能门锁2022年度总结

时光如梭&#xff0c;步履不辍。在这繁忙而又充实的一年&#xff0c;中科易安从提升服务、优化产品、扩展市场的维度发力&#xff0c;通过扎实的努力、不懈的勤勉&#xff0c;圆满地完成了2022年的工作。接下来&#xff0c;中科易安将为媒体、友商、用户朋友们呈现中科易安2022…

通过Lambda表达式 简单体验一下java方法引用

观看本文前 您需要先掌握 Lambda表达式 如果您之前没有接触过 可以先查看我的文章 java Lambda概念 通过实现线程简单体验一下Lambda表达式 java Lambda表达式的标准格式及其前提带有(代码演示) 然后 我们用 Lambda表达式 写在里面的其实就是一种解决方案 拿参数做操作 那么 …

Qss文件设置Qt界面风格

需要协商才能修改软件界面的风格&#xff0c;所以要留出通用的接口&#xff0c;于是选择使用QSS文件设置软件风格。 一、创建Qss文件 直接创建以.qss为后缀的文件 二、Qt使用Qss文件有两种办法 1、第一种办法&#xff0c;添加资源文件.qrc&#xff0c;然后在qrc文件中添加qss文…

【云边有个小卖部】

童年就像童话&#xff0c;这是他们在童话里第一次相遇。 那么热的夏天&#xff0c;少年的后背被女孩的悲伤烫出一个洞&#xff0c;一直贯穿到心脏。 刘十三被欺负得最惨&#xff0c;却想保护凶巴巴的程霜。 每当她笑的时候&#xff0c;就让他想起夏天灌木丛里的萤火虫&#xff…

Tic-Tac-Toe有多少种不同棋局和盘面状态(python实现)

目录 1. 前言 2. 如何去重&#xff1f; 3. 代码实现 3.1 对称等价判断 3.2 find_neighbor()改造 3.3 主程序及运行结果 4. 延申思考 1. 前言 在前两篇博客中实现了遍历搜索所有的Tic-Tac-Toe的棋局的python程序实现。 Tic-Tac-Toe可能棋局搜索的实现&#xff08;python…

【Java寒假打卡】Java基础-多态

【Java寒假打卡】Java基础-多态概述多态中成员访问的特点多态的好处和弊端多态中转型多态中转型存在的风险概述 同一个对象在不同时刻表现出来的不同形态 多态的前提和体现 有继承/实现关系有方法重写。子类对父类进行方法重写有父类引用指向子类对象 package com.hfut.edu.…

【阶段二】Python数据分析NumPy工具使用02篇:数组的基本属性与数组的数据获取

本篇的思维导图: 数组的基本属性 NumPy数组的基本属性主要包括数组的形状、大小、类型和维数。 描述 代码 结果

Zookeeper详解(一)——基础介绍

概念 zookeeper官网&#xff1a;https://zookeeper.apache.org/ 大数据生态系统里的很多组件的命名都是某种动物或者昆虫&#xff0c;比如hadoop就是 &#x1f418;&#xff0c;hive就是&#x1f41d;。zookeeper即动物园管理者&#xff0c;顾名思义就是管理大数据生态系统各…

Linux 系统调用的本质

简单概念 fd #include <unistd.h> #include <string.h>int main(int argc,char* argv[]) {char buf[20]{0};read(0,buf,15);write(1,buf,strlen(buf));return 0; }如果想查看某个系统编程的接口&#xff0c;比如想查看 open 函数的用法&#xff0c;可以这样操作…

Python调用C++代码用法——Linux

目录 前言 C/C动态共享库编译 ctype模块 ctype数据类型 使用案例 float数据 指针 结构体及结构体指针 numpy图像当作指针传入 参考资料&#xff1a; 前言 在项目开发中&#xff0c;有时会使用到多种编程语言&#xff0c;比如部分功能是C/C代码实现的&#xff0c;而另一…

《机器学习与应用》实验二:BP神经网络实验

文章目录 一、实验目的二、实验原理BP算法的数学描述三、程序四、实验结论一、实验目的 1、 熟悉MATLAB中神经网络工具箱的使用方法; 2、 通过在MATLAB下面编程实现BP网络逼近标准正弦函数,来加深对BP网络的了解和认识,理解信号的正向传播和误差的反向传递过程。 二、实验…

SAP MM物料与客户主数据的税分类

一&#xff0e;说明 在物料主数据、客户主数据中均有税分类的维护&#xff0c;税分类既不是税码也不代表税率&#xff0c;它们的作用是通过税务条件记录确定税码。所有的税分类在主数据中都是与国家相关的无组织机构数据&#xff0c;例如物料的销售组织有中国&#xff08;ZH&am…

智慧WMS立体仓库管理系统源码 基于springboot框架(已经测试完整带部署搭建教程)源码分享!

淘源码&#xff1a;国内知名的高品质源码免费下载平台 分享一套智慧WMS立体仓库管理系统源码&#xff0c;基于springboot框架 已经测试完整带部署搭建教程。&#xff08;MF00767&#xff09; 需要源码学习可私信我获取。 技术架构 技术框架&#xff1a;SpringBoot layui H…

ESLint插件的使用

官网地址 规范写代码的工具. 多人开发不同规则,提交代码一堆冲突 培养代码风格使用 vscode更改tab缩进空格数----设置—搜索tabsize—找到tab size—修改2(每次按下tab都缩进俩空格)—Vetur > Format Options: Tab Size这个也要修改为2 vscode搜索format----勾选Editor: Fo…

javaweb01--mysql的介绍和增删改查操作

文章目录Mysql的介绍和增删改查说明1. mysql的登陆和退出11 登陆1.2 退出2. SQL语法的简单介绍2.1 语法2.2 SQL分类3. SQL主要操作语句3.1 DDL:操作数据库3.1.1 查询3.1.2 创建数据库3.1.3 删除数据库3.1.4 使用数据库3.2 DDL:操作表3.2.1 查询表3.2.2 创建表3.2.3 数据类型3.2…

《梁启超家书》笔记二——一个人若是在舒服的环境中会消磨志气,那么在困苦懊丧的环境中也一定会消磨志气

目录 一、做事的态度 二、学习与未来 三、发挥其个性之特长&#xff0c;以靖献于社会 四、鼓励相信孩子 五、犯错 六、身体健康 七、做事 八、与费用相关 九、在困苦中求快活 十、让孩子自由决策与建议 十一、处事态度&#xff1a;不要悲观 十二、时事分析 一、做事…

在IDEA中获取文件绝对路径(通用方式)

package com.javase.reflect;/*** 关于文件路径问题* 以前我们都是在IDEA中&#xff0c;依据IDEA默认的当前路径&#xff1a;project的根来获取文件&#xff0c;但是这种方法有它的局限性&#xff0c;那就是当代码离开了IDEA* 换到了其他位置&#xff0c;我们就找不到文…

基于 Tensorflow 2.x 使用 MobileNetV2 微调模型优化训练花卉图像识别模型

一、模型微调 上篇文章我们通过搭建三层卷积模型&#xff0c;训练了花卉图像识别模型&#xff0c;最后经验证集验证后准确率大约为 75% &#xff0c;本篇文章对该数据集进行优化&#xff0c;提高识别的准确度。本篇文章中对于数据集的读取强化不做过多的介绍了&#xff0c;大家…

免拆机,Kindle固件版本5.10.3~5.13.3如何越狱?简单、易操作版

前言 之前有出过Kindle的越狱教程&#xff1a; 无需拆机&#xff0c;Kindle 全系列 5.12.2.2 ~ 5.14.2版本如何越狱&#xff1f;如何安装第三方插件 确实可以越狱&#xff0c;使用的漏洞也是&#xff1a; KindleDrip — From Your Kindle’s Email Address to Using Your C…

ubuntu18.04下mysql数据库C语言API封装

mysql C语言API操作数据库比较繁琐&#xff0c;可以将其封装起来&#xff0c;这样使用比较方便&#xff0c;下面是一种封装方式。 目录 1.连接封装 2.连接池封装 3.测试代码 1.连接封装 将数据库连接进行封装&#xff0c;主要提供如下接口&#xff1a; &#xff08;1&…