vtor 发表于 2024-8-22 23:05

强行修改文件头可否避免百度网盘爆破?




针对一个文件,
读取前1M空间,将其异或一个数字,再写入,能否实现       避免百度网盘爆破?

我已有对应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; // 文件路径

    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 ^= 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;
}

风之暇想 发表于 2024-8-22 23:21

最好首尾都改,部分格式的信息会存到尾部。

zj19970417 发表于 2024-8-22 23:45

楼主想法很不错 点赞

cpbjlwh 发表于 2024-8-23 00:35

点赞!确实好思路。

leonca 发表于 2024-8-23 04:11

好想法啊。。。。。。。

chplifeng 发表于 2024-8-23 05:42

希望你可以成功

shaokui123 发表于 2024-8-23 07:58

有易语言的实现源码吗

axinabcd 发表于 2024-8-23 08:05

按照这个办法应该问题不大吧

submariner 发表于 2024-8-23 08:40

直接用压缩包存储模式加密,速度很快,通用性也好,bug的可能性也很低,我觉得也许会更好,如果怕忘记密码可以考虑在注释里加上密码

kof888 发表于 2024-8-23 09:01

问题是改了文件头万一改得久了或者文件多了自己也忘记了呢?
不如简单一点,只是防止被爆破的话,写个程序把里面的数据全部xor一次就可以了吧。
页: [1] 2 3
查看完整版本: 强行修改文件头可否避免百度网盘爆破?