什么是哈希(Hash)?
哈希,也称为散列,是一个将各种大小的输入(通常是字符串,文件内容也可认为是一段字符串)转化为固定大小的值的过程。产生的哈希值因输入的微小变化而有很大的不同。哈希函数的目的是确保每一个独特的输入都会生成一个独特的结果。
可以这么理解:我们每个人都有独一无二的指纹来区分,每一个文件,也有一段独一无二的哈希值来区分。
为什么要计算文件的哈希(Hash)
我们前文中讲解了如何找到系统中所有进程的静态文件:
fatmo:风险发现:获取Windows所有进程PID1 赞同 · 2 评论文章
想象这样的场景:一个黑客入侵了我们的计算机,但是他比其他人多一个心眼,不直接把木马文件存储在我们的硬盘中,而是替换掉我们系统中的某些常见的文件,或者直接捆绑在一起(比如和浏览器文件捆绑在一起),当我们点开浏览器时,浏览器依然正常弹出,但是木马也在偷偷运行。
这种情况下,我们可以通过对比官网下载的文件哈希,和我们已经被修改文件的哈希,如果哈希不同,就代表文件被修改过,判定可疑。
实操
我们可根据前文的方法,找出想检查的文件,此处我以这个截图文件"picpick"为例2. 首先确定版本号!每个软件确定版本号的方法都不一样,介绍两个比较通用的方法:
鼠标移动到文件->右键->属性->详细信息,看有没有版本号:
打开文件,点开选项->关于,看有没有版本号:
3. 拿到了版本号后,去到程序的官网下载同一版本的程序(一定要是官网,一定要是同一版本)!
4. 下载后,使用这个cmd命令计算我们原本文件的哈希值(不知道怎么使用cmd的请看之前的文章):
CertUtil -hashfile file_name SHA2565. 再计算新下载文件的哈希值:
CertUtil -hashfile file_name SHA2566. 显然,两个文件的哈希值一致,文件没有被改动,是安全的。
总结
这篇文章我们学习了最直接但有效的判断文件是否可疑的方法,利用哈希的唯一性来判断文件是否被修改过。但是这种方法也有局限性:并不是所有的文件我们都能在官方网站上找到,很多文件其实是找不到官方渠道或者已经不提供老版本的下载,只适用于比较流行的且还在维护的文件。
此方法还有另一个小技巧:如果实在找不到官方渠道或者不知道怎么找,但是术语很多机器都有的文件(比如Windows自带的文件),可以找一台别的机子,比如朋友的机子,计算一下他机子上文件哈希值和你机子上文件的哈希值来对比。