基于文件完整性校验的恶意代码检测器设计
1、相关原理、技术分析
1.1文件完整性破坏原理
文件完整性是指文件没有被篡改,破坏文件完整性的方式具体有如下几点:
-
感染病毒
比方说你的系统中了病毒,病毒感染了某个软件安装包或者某个可执行程序。那么该文件的完整性就被破坏了。
-
植入木马/后门/人为篡改
还有一种文件不完整的情况,是被别有用心的人植入木马或后门。比方说某些国内的软件下载站点,它们提供的 Windows 安装光盘镜像已经被安置了后门。
只要文件被篡改后,文件完整性就会改变,就是说文件内容被改变了,文件内容改变一般也是插入了恶意代码
1.2 文件完整性破坏检测技术
最容易想到的检测技术就是比较两个文件,如果两个文件不相同,说明文件被改变了,或者说文件被植入恶意代码,就可以说文件完整性改变,但是这种方法行不通,有些文件非常大,如果一个一个字符的比较会非常慢,这样就想到了另外一种方法,如果一个文件在被创造之前就对他进行了hash认定,那么当我们想要验证文件是否被篡改的时候,只需要计算该文件的hash值,再比较先前的hash值,就可以实现文件完整性校验
再说得具体一点如下所示:
软件开发者在发布软件(比如一个exe文件)前,使用某个校验算法计算出该exe文件的“特征值”,然后将这个特征值和exe文件一同发布到网络上。用户使用相同的校验算法计算下载到exe文件的特征值,并与软件开发者发布的特征值比较。如果两个特征值相同,则认为下载到的exe文件是正确的。如果两个特征值不同,则认为下载到exe文件是被篡改过的,这样也实现了恶意代码检测
2、设计思路、算法描述
我自己是这么想的,在每一个文件创建之前先通过hash函数给文件设置唯一一个hsah值,如果hash值对比一样,那么文件一定是没有被更改,不同的文件得出相同的hash值基本上不可能,这样的可能性太小了,在该实验中可以判断为0,如果两文件的hash值不同,再一个字符一个字符的进行比较,找出恶意代码
3、代码的详细实现
import hashlib
def get_md5(s):
"""
把文件类容进行MD5加密,加密后为32位密文
:param s:
:return: 返回唯一标识符,及文件的加密值
"""
md = hashlib.md5() # 设置hash对象
md.update(s.encode('utf-8')) # 把内容进行编码后(搞成bytes类型),加进对象中
return md.hexdigest

文章介绍了文件完整性破坏的原理,包括病毒感染、木马植入等,并提出了利用hash值进行文件完整性检测的技术。通过计算文件的MD5哈希值,在文件创建前设定hash值,之后对比新旧hash值来判断文件是否被篡改。当哈希值不同时,程序会逐字节比较找出差异,实现恶意代码的检测。提供的Python代码示例展示了如何实现这一功能。
最低0.47元/天 解锁文章
199

被折叠的 条评论
为什么被折叠?



