tiantian520_tt 2022-08-22 20:33 采纳率: 0%
浏览 40

试图将clamav数据库应用于我的应用时遭遇问题

问题(略)

无法理解main.ndb(clamav官方16进制特征码库)中的内存偏移含义,希望有懂行人解释。
我正在使用的数据库:https://wws.lanzoub.com/iSvXz0a1bcoj

问题(详)

我试图将clamav中的main.ndb(十六进制恶意软件特征码)取出并用于我的程序中,但是在使用中,我发现了这样一些问题:

  1. 我成功的提取出了病毒名称、病毒平台与病毒特征码,并了解了通配符的作用。但是,由于python的性能问题,在匹配时性能十分低下。
  2. 我无法理解所谓的Offset(内存偏移)。因为虽然有文档表示,EP为入口点(通常为.text),S0、S1、S2分别表示第几个字段,但是我不清楚后面的+N或者+N,n(逗号分割两个数)时什么意思。我给出以下几个具有代表性的数据:

Win.Trojan.Crypted-30:1:EP+0,5:9060909090
Win.Downloader.Small-2870:1:S1+4267:十六进制码(过长)

并且,"+"后面的数字表示什么,我无法理解。因为我试图从文件的全部十六进制码中进行匹配(使用python,因此,在匹配大文件时性能十分差),生成了一个Metasploit Meterpreter的有效载荷并进行检测,我得到了Win.Trojan.Crypted-30的结果。我不清楚这是否正确,但我确实在文件中找到了此特征码(9060909090,WinHex Hex 查找与程序查找)。它的位置在572B,距离入口点1000(.text段内存开始地址)相差了许多。我无法理解"EP+0,5"在告诉我应该在哪里查找此特征。
3. 在检查特征时,我设置了快速查找选项与常规查找选项。目前的情况下,快速查找我会在.text段中匹配特征码,而常规查找我正在以从全文中检索特征来代替。原因如上。但是python对于大文件的处理并不是很迅速。在我使用了多进程(由于GIL,多线程反而会降低查找速度)后,我不得不使用文件来交换主进程与子进程的数据,因为我无法调试好Process的Manager传参,它不是无法拿到数据并抛出异常,就是修改数据后没有在主进程生效,希望大家可以为我指点。
4. 在性能方面,我观察到了很可怕的现象。

img


10G的内存占用!天哪!
此时,由于我使用了硬盘中的文件来传递多进程之间的参数,导致硬盘上会出现一个2G的临时文件。其次,每一个进程都要读取一次文件到内存中,所以导致了2G*5(5进程,主进程不工作)=10G的内存占用!天哪,有人知道怎么解决这个问题吗?
附上我的储存结构:
file_list 列表 其中的每一个元素为一个字典 存放一个待扫描文件的全部信息 包括它的全部字段数据
file_list[i]['file_path'] 储存路径
file_list[i]['file_md5'] 储存md5值,在检查过一个文件后,将md5值添加到表,下次可以直接得出结果
file_list[i]['file_hex'] 也是一个字典,其中存储了该文件全部的字段16进制值
file_list[i]['is_virus'] 判断是否为病毒的依据,便于总结
file_list[i]['file_type'] 判断文件类型,减少数据库检索量
file_list[i]['virus_infomarion'] 如果是病毒,关于它的病毒说明
其中,file_hex是最占据内存空间的。我不知道该怎样压缩它。我试图将他们替换为一个文件地址保存于硬盘中,在需要时读取并覆盖一个临时变量,这也许会改善内存,但硬盘问题依然无法解决,并且我会遇到硬盘读取速度的门槛,处理速度会进一步下降。

我的解答思路和尝试过的方法

第一个问题我试图优化,但是提升不大,我不太懂算法。
第二个问题我由于缺少相关文档与样本,无法实践获得信息。
第三个问题由于网上的教程太鱼龙混杂,不利于短时间内学习。
第四个问题我也许可以解决内存占用,但是硬盘问题我无法改善。因为你知道我不可能在使用时临时分析PE文件(我使用pefile库来分析pe文件,并自行造函数解析16进制文本。遭遇稍大的文件,就需要等候许久。所以我认为将信息提前获取是最好的办法) 希望有人给予指点,也许是我的认知太浅了一些。

我想要达到的结果

如上。

  • 写回答

1条回答 默认 最新

  • 小菜元 2022-08-22 21:25
    关注

    有点复杂能简述吗

    评论

报告相同问题?

问题事件

  • 修改了问题 8月22日
  • 修改了问题 8月22日
  • 修改了问题 8月22日
  • 创建了问题 8月22日

悬赏问题

  • ¥15 用三极管设计—个共射极放大电路
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?
  • ¥15 求daily translation(DT)偏差订正方法的代码
  • ¥15 js调用html页面需要隐藏某个按钮
  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?
  • ¥20 java项目连接sqlserver时报ssl相关错误
  • ¥15 一道python难题3
  • ¥15 牛顿斯科特系数表表示