使用文件映射方式修改文件内容(木马常用此方式)

使用函数CreateFileMapping创建文件映射,然后调用MapViewOfFile把文件映射到进程中,可以通过直接修改进程里面的内存来达到修改文件内容的目的。

// test.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <windows.h>
#include <shellapi.h>

int _tmain(int argc, _TCHAR* argv[])
{
	HANDLE hFile = NULL, hMappingHandle = NULL;
	LPVOID pFile=NULL;

	 hFile=CreateFile(
				L"e:/1.txt",					//打开的文件名
				GENERIC_READ | GENERIC_WRITE,   //打开的权限  这里申请读写权限
				0,								//0代表独占打开  不共享
				NULL,							//安全属性,该参数为0  则创建的子进程无法继承该句柄
				OPEN_EXISTING,					//文件以外的设备通常使用该值, 这里测试已经存在的文件 所以也可以使用这个值
				FILE_ATTRIBUTE_NORMAL,
				NULL							//当打开一个存在的文件时,忽略此参数
				);
	
	if (hFile == INVALID_HANDLE_VALUE)
	{
		printf("文件打开失败,错误码=%d\n",GetLastError());
		goto exit;
	}

	 hMappingHandle=CreateFileMappingW(
					  hFile,			 //打开的文件句柄
					   NULL,			 //使用默认的安全属性	
					   PAGE_READWRITE,	 //文件映射对象的也保护   这里没有设置可执行属性
					   0, 
					   0,				 //对于文件映射这两个大小都可以设置为0.
					   L"yxp"            //文件映射对象的名称
					   );

	if (hMappingHandle == 0)
	{
		printf("创建文件映射失败,错误码=%d\n", GetLastError());
		goto exit;
	}

	//将文件映射的视图映射到调用进程的地址空间。
	pFile=MapViewOfFile(
					hMappingHandle,
					FILE_MAP_READ | FILE_MAP_WRITE, //对文件映射的访问类型  这里使用读和写
					0,
					0,  //映射的开始位置
					0   //表示从指定的偏移 映射到文件尾

				 );

	if (pFile == NULL)
	{
		printf("文件映射到进程失败,错误码=%d\n", GetLastError());
		goto exit;
	}

	*(int*)pFile = 0x11111111;   //这种方式就修改了文件内容
	UnmapViewOfFile(pFile);
	
exit:
	if (hFile)
	{
		CloseHandle(hFile);
	}

	if (hMappingHandle)
	{
		CloseHandle(hMappingHandle);
	}
	getchar();
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值