文件指纹修改工具 Hash Modifier

Hash

众所周知,每个人都有独一无二的指纹。与之类似,在计算机世界里,文件也可以通过一些貌似很复杂的算法(常见的MD5, SHA-1等),得到一个序列。不同的文件,其”数字指纹”不同。


介绍

这周写了一个叫Hash Modifier的小工具,原理很简单,功能是在不损坏文件的前提下,批量修改文件Hash值 。至于为什么要修改,没有具体的原因,各有各的用途,通常用于应付各种文件黑名单等等。

P.s: 强烈建议在使用前做好备份(:3 」∠)


细节

  • 纯C + Window SDK编写

  • 高效批量修改

  • 单次操作对文件的影响微乎其微 (会增加1 Byte),经测试不会影响正常使用

  • 不存在Win平台(x86/x64)兼容性问题

  • 需要当前用户具有指定目录的写入权限

  • 另外还提供CUI版本,供Dos下使用


截图

Program

CUI


用法

很简单,有两种方式:

拖入文件:

直接拖入后文件名会显示在文本框内,支持多个文件同时拖入,建议使用这种方法

输入文件名:

也可以直接输入文件名,多个文件请使用回车隔开,注意不要使用中文标点,并尽量不要输入多余的内容。

Program2

最后点击最左边的那个”齿轮按钮”来使程序工作,最右边那个”IE按钮”可以来到这个页面。

P.s: 文件一次最多操作10个。反正我就是这样定义的,不信你看

Define


源码

又到了代码分享时间,代码量比较少,两百多行,很简单。。下面拿出CUI版中修改文件用到的函数的代码,顺便说说原理。完整源码与GUI版本的源码截图都在末尾。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
int Mod(FILE *fp)
{
int iResult;
if (fp == NULL)
return 0;
iResult = fseek(fp, 0L, 2);
if (iResult == -1)
return 0;
iResult = fwrite("\0", 1, 1, fp);
if (iResult == 1)
return 1;
else
return 0;
}
  1. 传入一个由fopen()返回的文件指针,打开方式是”ab”,即以二进制方式追加内容
  2. 接着通过fseek()定位到文件的末端
  3. 最后fwrite()在末尾加上一个空字符,从而使文件发生变化并尽量不影响文件的内容
  4. 函数会根据返回值判断是否执行成功,成功返回1,失败返回0,并在main()函数做相应的处理

测试

Test1

Program3

Test2

如图约80M的视频,用软件操作一次,也就是在文件末尾加上一个字节’\0’,SHA-1发生了变化,但本身基本无影响,可以正常使用。


下载

Download 1 度云,含源码
Download 2