针对一个文件,
读取前1M空间,将其异或一个数字,再写入,能否实现 避免百度网盘爆破?
我已有对应c语言源码与对应程序
[C] 纯文本查看 复制代码
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <windows.h>
#define FILE_DISTORT_NUMBER (1024*1024)
#define FILE_DISTORT_XOR_VALUE (0X5A)
void PrintInfo()
{
printf("\n");
printf("本软件基本信息\n");
printf(" 软件名称:文件破坏器-20240515\n");
printf(" 编译时间:2024年05月15日\n");
printf(" 软件版本:1.0.1\n");
printf(" 软件作者:保密,嘿嘿\n");
printf(" 适用场景:打算用于网盘文件防止和谐(注:尚未测试)\n\n");
printf("本软件核心原理\n");
printf(" 将文件前 <1024*1024> 个字节,异或 <0x5a>\n");
printf(" 强行修改文件头,使得文件解析出错,从而实现加密\n\n");
printf("本软件注意事项\n");
printf(" 本软件只对有文件头的文件适用\n");
printf(" mp3,mp4,zip,rar,pdf,doc有文件头,可以使用\n");
printf(" txt,bin,或者其他二进制文件 没有文件头,加密几乎无效\n");
printf(" 本软件只对大于1M的文件适用,如果小于1M,不会进行加密。\n\n");
printf("加解密操作方法(命令行版本)\n");
printf(" 任意文件夹内,按住shift->鼠标右击->打开powershell,\n");
printf(" 往powershell内拖入 <file_fistort.exe>,\n");
printf(" 在powershell内输入一个 <空格>\n");
printf(" 往powershell内拖入 <要加密的文件>\n");
printf(" 再按下回车\n\n");
printf("加解密操作方法(拖拽操作)\n");
printf(" 将文件拖入到此 软件 上即可。\n\n");
printf("请查看 <加解密操作方法>,并正确使用本软件。\n\n");
}
int main(int argc, char* argv[]) {
if (argc < 2) // 如果只有程序,没有被加密的文件
{
PrintInfo();
system("pause");
return 0;
}
char* file_path = argv[1]; // 文件路径
char* fileHeadBuffer = (char*)malloc(FILE_DISTORT_NUMBER);
printf("输入的文件为<%s>\n", file_path);
// 打开文件
FILE* file = fopen(file_path, "r+b");
if (!file) {
perror("文件打开失败,检查路径是否正确,检查文件是否存在");
free(fileHeadBuffer);
return 1;
}
// 读取前面的字节
if (FILE_DISTORT_NUMBER != fread(fileHeadBuffer, 1, FILE_DISTORT_NUMBER, file)) {
perror("文件大小小于1M,不进行加密,将退出软件。");
fclose(file);
free(fileHeadBuffer);
return 1;
}
for (int i = 0; i < FILE_DISTORT_NUMBER; i++)
{
fileHeadBuffer[i] ^= FILE_DISTORT_XOR_VALUE;
}
// 移动文件指针到文件开头
if (fseek(file, 0, SEEK_SET) != 0) {
perror("移动文件指针失败,未知原因,请重试。");
fclose(file);
free(fileHeadBuffer);
return 1;
}
// 写入新内容
if (fwrite(fileHeadBuffer, 1, FILE_DISTORT_NUMBER, file) != FILE_DISTORT_NUMBER) {
perror("移动文件指针失败,未知原因,请重试。");
fclose(file);
free(fileHeadBuffer);
return 1;
}
// 关闭文件
fclose(file);
free(fileHeadBuffer);
printf("文件破坏成功!!!\n\n");
return 0;
}
|