简易病毒清除工具

7
我正在尝试创建一个简单的病毒删除器。我开发的算法旨在:
  • 检查原始文件和已感染文件
  • 从感染文件中分离出病毒
  • 使用相同的算法修复其他感染了该病毒的文件
我知道这是可能的,因为这是创建补丁的方式,但我有点不知道如何去做。
有什么帮助吗?

如果您可以访问原始文件,为什么不直接复制覆盖损坏的文件呢?这似乎是更少的工作。 - driis
我认为关键是要得出一个通用的“修复”方法,可以用于任何被同一病毒感染的文件。 - Flynn1179
1
你必须小心虚假阳性。 - BoltClock
3
编写一个可以就地修补文件的防病毒应用程序是非常棘手的事情,最好还是交给专业人士。这里存在的风险似乎不值得冒险。 - Cody Gray
标题仅用3个词就包含了矛盾:“简单”和“病毒清除器”。 - erikkallen
显示剩余4条评论
2个回答

3
您需要比简单的模式匹配和删除孤立的病毒代码更加智能。
您要针对的病毒是文件感染者,这在我们现在很少使用。大多数情况下,它们的复制过程如下:
1. 将自己复制到PE文件的开头或结尾 2. 找到PE文件的入口点 3. 在此位置放置跳转指令,指向它们的代码
对于任何反病毒软件来说,消毒文件都是最困难的部分。这取决于病毒代码的质量:如果有漏洞,则主机文件将无法恢复。
无论如何,您正在进入一个机器指令的世界,其中反汇编器(IDA、PE Explorer等)和调试器将是您最亲密的朋友。

好的,这是一个非常有用的答案。谢谢。我知道文件感染者以及添加数据到备用NTFS流的感染类型。看来我只能在这里获得建议,所以我必须自己动手了。 - Chibueze Opata
后来发现消毒过程只是感染过程的相反。是的,它依赖于病毒代码的质量,但由于受感染的文件已经无用,所以尝试修复文件时丢失它并不真正重要.. :-/ - Chibueze Opata
这就是为什么消毒(指杀毒)令人失望。它需要大量的工作去获得随机的结果...再加上文件感染者已经有一段时间不再“在野”(http://www.wildlist.org/WildList/201101.htm),这成为一门失传的艺术。 - Roubachof

0

对两个文件进行差异对比,基本的想法是逐个字符地比较原始文件和感染文件,并将不同点保存到某些数据结构中。然后在未来,您可以寻找“病毒”,它理论上应该是差异的集合,在其他文件中删除“病毒”。

唯一的问题是,在两个文件之间可能会出现与“病毒”无关的不一致之处,例如,受感染的文件以某种与原始文件不同的方式被修改,这与病毒无关。

编辑*** 检查其他文件中的病毒并不难,但我假设您正在处理某些纯文本形式的文件,对于二进制专有文件,我认为您将无法删除“病毒”。


你基本上判断你的解决方案是不正确的 :-O - Chibueze Opata
我想说这取决于您正在检查的文件类型。任何试图从文件中删除病毒的算法都会在编译文件方面遇到问题。 - checkandy
如果我们要清除的病毒是已编译的,那么就不行了。想一下补丁系统以及它的工作原理。或者更好地想象一下病毒如何感染已经编译好的程序。 - Chibueze Opata
@Opatachibueze 如果这么容易的话,那么它早就完成了。我认为你的解决方案可能会有一段时间的作用,直到“坏人”开始让他们的病毒做随机事情并具有随机签名。哦等等,他们已经这样做了……老实说,你提出这个问题让我很担心,你想在C#中实现这个功能(它非常适用于很多事情),但信任它来扫描和修改我的系统文件…不好意思,我还是算了。 - Security Hound
谢谢你的直接回答。我喜欢保持积极的心态,相信一切皆有可能 :) 但是如果你认为我正在创建一个通用的解决方案来修补所有类型的感染,那么你就错了。这只是更像是一个实验,但从我的研究来看,修补的主题似乎有很多不同的方法。不过,现在我会暂停这个项目,直到我获得更多关于文件操作的知识。 - Chibueze Opata

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接