论文原文的引言主要有两大部分的内容:介绍计算机病毒,明确本文使用的病毒分类方式;分析传统计算机病毒检测存在的弊端。对于计算机病毒的定义,文中给出的定义比较严谨,我自己查了一下现在百度百科的定义,两者基本一致,都提到了计算机病毒包含了生物 病毒的特点,即病毒的传染性、潜伏性、针对性和破坏性;不过现在很多的定义都多强调了是人为编写的这一属性。原文之后将计算机病毒按传染的方式分,分为传染磁盘引导区(BOOT)的计算机病毒和传染可执行文件(FILE)的计算机病毒。

  1. 传染磁盘引导区的计算机病毒:当时的电脑,应该主流是使用BIOS(Basic Input/Output System)进行启动,对应的分区方式是MBR(Master Boot Record)。计算机会通过BIOS系统访问到磁盘的首个扇区:MBR,就是原文中所谓的Boot区。MBR的大小一般是512字节,其中前面的446字节存储着启动操作系统的代码,后面存储着一些标识符和MBR的分区表等这里就不赘述了。而传染磁盘引导区的计算机病毒同常是通过一种“转储与重定向”的技术实现对操作系统的夺取。大概的原理就是病毒程序会找到MBR,然后将MBR中健康的引导代码(前446字节中存储的启动程序)复制到磁盘的一个隐蔽位置,然后重写字节的引导代码到MBR的引导代码部分,这样在BIOS启动时,就会执行病毒代码,致使病毒能够夺取操作系统的控制权。这种病毒隐蔽性强,而且在操作系统启动前就可以被启用,能绕过绝大多数安全防护软件。常见的病毒有Stoned,Michaelangelo。
  2. 传染可执行文件的计算机病毒:这种病毒比较常见也比较熟悉。它们主要通过感染可执行文件(当时的.com和.exe)文件,让系统在执行文件时,先执行病毒文件的程序,后执行健康程序达到感染电脑的目的。在DOS时代,有比较流行的病毒会创建一个与源文件(.exe)同名的.com文件。而因为DOS会先执行.com文件再执行.exe文件从而达到感染电脑的目的。

接着原文指出传统计算机病毒检测方法是在程序中寻找已发现病毒的特征串,如找到,则认为该程序染毒,否则,认为该程序是干净的。这样的方法有两大弊端:容易误检健康程序、没有办法检测病毒的变种。

  1. 误检健康程序:传统病毒检测方法的核心在于“病毒特征串”,这些特征串一般是一些特殊指令(如发送邮件、感染文件的机器指令)、特殊文本(嘲讽提示你的电脑已中毒的字符串)、文件结构特征变化等。在发现病毒后,病毒分析师一般会提取病毒文件,在隔离环境中提取“病毒特征串”提取出的特征串将会用于日后这类病毒的查杀。个人认为,可能是因为原文发表的年代提取特征串的技术不够成熟,现在通过这种方式查杀误检率应该是不高的。
  2. 没有办法检测病毒的变种:因为特征串需要在已发现的病毒中提取,新型的病毒就可以有意规避,导致传统病毒查杀方法有较严重的滞后性。

原文的第二部分探讨了病毒判定专家系统的基本原理,主要是从理论角度验证这个专家系统的可行性。有两个主要理论:病毒的不可判定原理和智能判定原理。

  1. 病毒的不可判定原理:原文其实想要表达两点:1、冯·诺依曼体系结构让病毒的存在不可避免,2、不存在可以百分百准确判断程序是否为病毒的程序。首先冯·诺依曼的计算机体系结构是以存储器为核心的,所以在这样的体系结构里指令和数据在物理上的地位其实是相同的,这就导致指令是可以被修改,编写的,这就给了滋养计算机病毒的土壤。原文对第二点其实没有太讲清楚,我们可以利用反证法证明一下。如果有一个程序A(疑似病毒程序)可以100%正确返回传入的程序是否为病毒程序,那我们可以利用分支结构写一个程序:如果程序A认为我是病毒,我就什么都不做;如果程序A认为我不是病毒,我就启用病毒程序。这样一个矛盾程序就可以证明程序A不可能存在。而这个反证法能成立也是“得益于”冯·诺伊曼体系结构,这样这个矛盾程序能够将自己作为参数传递给程序A,因为程序本身也就是一串数据。
  2. 智能判定原理:这一部分原文主要阐述了作者研发的专家系统的主要原理:通过判断程序是否有传染性来判断这个程序是否是病毒。这个专家系统判定病毒有两个主要过程:先搭建疑似病毒程序的运行环境,让疑似程序在环境中运行并记录可疑的运行结果;然后根据之前运行总结出的规则库进行正向不精确推理机判断这个程序是否为病毒。其中提到的MYCIN是早期用于医疗领域的专家系统,虽然是以简单的IF-THEN的形式进行推理,但是引入了置信度系统,机器的回答不再是简单的“是”或“否”而是可能性,原文作者应该也是引入了类似置信度系统搭建了正向不精确推理机。

原文的第三部分,也是论文的主体,介绍了这个病毒判定专家系统的设计方法。原文以传染磁盘引导区的计算机病毒为例介绍专家系统的设计方法,先介绍了这种计算机病毒的主要原理,我在前文也大致描述过了,这里就不赘述了。不过其中有提到了游戏有自己的BOOT程序,容易受到攻击。这类病毒更像是传染磁盘引导区的计算机病毒和传染可执行文件的计算机病毒的结合,通过修改游戏的BOOT启动程序,达到接管游戏系统环境的目的,常见于破解的盗版游戏,盗版游戏Mod中。不过其实这类病毒制作难度较大,破坏范围容易停留在游戏系统内部,所以并不常见。

来到核心的判断逻辑上:

  1. 第一层判断:未知BOOT程序是否为某个版本的DOS引导块或已知软件的引导快,若是,显然就不是病毒。这里涉及到一个已知安全BOOT程序库的搭建。
  2. 第二层判断:若不在已知BOOT程序库中,看这个程序是否为已知病毒BOOT。这里涉及到已知病毒BOOT程序库的搭建。这两个判断看似简单,其实对比传统检测更直接、更快速、更准确,而且为后面的专家系统的判断减轻了很多负担。
  3. 第三层判断:如果两个库中都没有,则需要运行这个BOOT程序,看是否会存在违反规则的情况出现,这里涉及到规则库的搭建。

在第一层、第二层判断中,因为各厂商的BOOT区的一些标识符并不相同,磁盘种类也不尽相同,所以这里的判断不能是1对1的匹配,需要使用类似于模糊匹配的算法进行判断。而且只匹配BOOT区的代码部分(前文提到的前446字节的代码部分)。

模糊匹配算法:

  1. 通过JMP语句找到第一条非JMP语句。这里的JMP语句是汇编语言中无条件跳转指令,指向下一个需要执行的指令地址,通过代码中的标签信息获取到整体BOOT的代码长度。
  2. 对比未知BOOT代码和需要对比的BOOT代码获取相同的字节数
  3. 用相同字节数/代码长度,得出相同率。原文中认为95%以上的相同率就可以认为这个BOOT代码是安全的,因为5%的代码量至多十几字节不足以完成一个病毒功能的编写。
  4. 如果库中的BOOT代码为空则不做判断,取库中的下一个BOOT进行比较。

在第三层的判断,也是整个专家系统最核心的部分中,原文先介绍了规则库的构建。

原文通过分析大麻病毒(前文提到的Stone病毒)的工作流程提出了4条病毒BOOT程序会违反的原则:

  1. 在DOS自举中,任何企图接管敏感性中断和高端驻留的请求都是不允许的。简单来说攻击BOOT的程序主要目的是要接管操作系统,而想要接管操作系统,就需要截获中断向量,要想截获中断向量,就需要驻留在内存中。因为DOS使用内存中的低端,所以一般BOOT病毒会使用高端驻留的方式,可以以此看BOOT程序是否为病毒。
  2. 磁盘引导扇中绝对不能出现写盘指令。这一点比较显而易见,因为正常健康的BOOT程序一般是不会有写盘指令的。
  3. 中判别时间和产生随机数进行判断,都是可疑的。主要是提到病毒需要一个启动条件,而这个条件往往通过时间的方式触发。可以根据这个点判断BOOT程序是否为病毒。
  4. 要密切注意最后控制权的移交。

根据这四条原则最终形成的规则库能够还不能比较准确的判断未知BOOT程序是否为病毒程序,所以原文作者为构建的规则库中的规则进行了加权。这样可以构建出类似于MYCIN专家系统中的置信度体系,给出一个可能性,更加利于病毒的判断。

这篇论文中,主要的思想是将专家系统的思想移植到病毒判断的算法上,其核心在于模糊的不精确的判断。而在图形学领域其实存在非常多需要模糊判断的问题,比如在角色的动画与运动控制方面。现在常用IK生成可能的动作,但仍不算特别准确,像一直被困扰的角色上楼梯的问题。我感觉这方面其实也可以利用这篇论文的思想。通过一些角色运动不能违反的原则如:人的膝盖不能向后弯曲、走路时手臂摆动与腿部运动相反等构建出一套知识库。并利用生物力学和解刨学的规则完善规则库,甚至是通过不停的实机测试完善规则库。通过这个规则库我们就能比较准确的判断某个角色动画是否合理,从而制作出更加合理的角色动画。

参考文献

[1]雷军.计算机病毒判定专家系统原理与设计[J].计算机研究与发展,1992,(08):53-59+66.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/96802.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/96802.shtml
英文地址,请注明出处:http://en.pswp.cn/web/96802.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《Unity项目实战:动态加载引发的显存危机全链路排查与重构实践》

从动态光影那流光溢彩、仿佛赋予虚拟世界真实质感的绚丽效果—这得益于Unity引擎强大的HDRP管线对光照路径的精准模拟,到物理引擎驱动的物体碰撞精准到毫厘的物理反馈—依托Unity Physics模块对刚体动力学的毫秒级计算,再到能够依据不同设备性能自动适配的画质表现—通过Unit…

智慧水库综合管理系统平台御控物联网解决方案

一、行业背景与痛点分析水库作为防洪、灌溉、供水、发电及生态保护的核心基础设施,其管理效率直接关系到区域水资源安全与可持续发展。然而,传统水库管理模式存在四大核心痛点:数据孤岛严重:水位、雨量、水质、设备状态等数据分散…

使用nvm安装Node.js18以下报错解决方案——The system cannot find the file specified.

使用 nvm 安装 Node.js 18以下 报错解决方案 在前端开发过程中,常常需要针对不同项目切换 Node.js 版本。nvm(Node Version Manager)是最常用的工具。但最近在尝试安装 Node.js 14 版本时,遇到了奇怪的错误。 问题描述 使用 nv…

在Excel和WPS表格中快速复制上一行内容

有的时候我们在Excel和WPS表格中想复制上一行对应单元格、连续区域或整行的内容,只需要在当前行拖动鼠标左键选中相关区域,然后按CtrlD键即可将上一行对应位置的内容复制过来——需要注意的是,如果当前行有数据,这些数据会直接被覆…

408学习之c语言(递归与函数)

今天主要学习了递归与函数的相关内容,下面将我今天所学知识与所写代码分享给大家 递归核心要点 递归三要素 基准条件(明确终止条件) 递归调用(逐步分解问题) 收敛性(确保每次递归都向基准条件靠近&#xff…

swVBA自学笔记016、Solidworks API Help 帮助文档的(三大版块)

目录1. Namespace (命名空间) 版块2. Interface (接口) 版块3. Members (接口成员) 版块4、总结关系5、如果你感觉上面说的过于简单,请往下看!6、示例链接→SOLIDWORKS API Help 20197、需要注意的是,带“I”的对象表示:接口1. Namespace (命…

通俗易懂地讲解JAVA的BIO、NIO、AIO

理解Java的I/O模型(BIO、NIO、AIO)对于构建高性能网络应用至关重要 🧠 通俗理解:快递站的故事 想象一个快递站: • BIO:就像快递站为每一个包裹都安排一位专员。专员从接到包裹到处理完(签收、…

LabVIEW 泵轮检测系统

在汽车行业,泵轮作为液力变矩器关键部件,其质量检测极为重要。传统手工检测泵轮效率低且误差大,为此构建基于 LabVIEW 与西门子硬件结合的泵轮检测系统。 应用场景 聚焦汽车零部件生产车间,对泵轮总成进行出厂前检测。在液力变矩…

2025年8月月赛 T2 T3

一. 七天假日 T2原思路:直接计算左右括号的数量,然后直接输出他们的差改进思路: 用d值记录截止到当前位置,还需要多少个右括号可以满足非法要求cur:截止到当前位置,已经有多少个右括号sum是右括号位置的前缀…

数据结构----栈的顺序存储(顺序栈)

栈的特点:先进后出栈的操作:用数组进行存储(1)初始化://栈 typedef struct {int *data;//指针模拟分配数组int top;//栈“顶”指针 }Stack; //初始化 Stack InitStack(){Stack s;//给数组分配空间s.data (int*)malloc…

React Hooks原理深度解析与高级应用模式

React Hooks原理深度解析与高级应用模式 引言 React Hooks自16.8版本引入以来,彻底改变了我们编写React组件的方式。然而,很多开发者仅仅停留在使用层面,对Hooks的实现原理和高级应用模式了解不深。本文将深入探讨Hooks的工作原理、自定义Hoo…

兼职网|基于SpringBoot和Vue的蜗牛兼职网(源码+数据库+文档)

项目介绍 : SpringbootMavenMybatis PlusVue Element UIMysql 开发的前后端分离的蜗牛兼职网,项目分为管理端和用户端和企业端。 项目演示: 基于SpringBoot和Vue的蜗牛兼职网 运行环境: 最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可…

TDengine 聚合函数 LEASTSQUARES 用户手册

LEASTSQUARES 函数用户手册 函数定义 LEASTSQUARES(expr, start_val, step_val)功能说明 LEASTSQUARES() 函数对指定列的数据进行最小二乘法线性拟合,返回拟合直线的斜率(slope)和截距(intercept)。该函数基于线性回…

Redis最佳实践——安全与稳定性保障之高可用架构详解

全面详解 Java 中 Redis 在电商应用的高可用架构设计一、高可用架构核心模型 1. 多层级高可用体系 #mermaid-svg-anJ3iQ0ymhr025Jn {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-anJ3iQ0ymhr025Jn .error-icon{fil…

ABAP 屏幕在自定义容器写多行文本框

文章目录变量定义容器等逻辑屏幕效果变量定义 CONSTANTS: GC_TEXT_LINE_LENGTH TYPE I VALUE 72. TYPES: TEXT_TABLE_TYPE(GC_TEXT_LINE_LENGTH) TYPE C OCCURS 0. DATA: GV_SPLITTER TYPE REF TO CL_GUI_EASY_SPLITTER_CONTAINER. DATA: GV_CUSTOM_CONTAINER TYPE REF TO CL_…

昆山精密机械公司8个Solidworks共用一台服务器

在当今高度信息化的制造业环境中,昆山精密机械公司面临着如何高效利用SolidWorks这一核心设计工具的现实挑战。随着企业规模的扩大和设计团队的分散,传统的单机授权模式已无法满足协同设计需求。通过引入云飞云共享云桌面解决方案,该公司成功…

【WebSocket✨】入门之旅(三):WebSocket 的实战应用

本篇文章将通过构建一个简单的实时聊天应用,演示如何在前端和后端搭建 WebSocket 系统,完成实时消息传输。通过实战,帮助你更好地理解 WebSocket 在实际项目中的应用。 目录 搭建 WebSocket 服务器WebSocket 客户端实现实时聊天应用示例常见…

CentOS 8-BClinux8.2更换为阿里云镜像源:保姆级教程

还在为 CentOS 8 官方源访问缓慢或不可用而烦恼吗?更换为国内镜像源,如阿里云,可以显著提升软件包下载速度和稳定性。本文将带你一步步完成 CentOS 8 镜像源的更换,让你的系统管理更顺畅。 准备工作 在进行任何系统配置更改之前…

MySQL中InnoDB索引使用与底层原理

MySQL Server端的缓存(查询缓存)是MySQL Server层的特性,而InnoDB的缓存(缓冲池)是InnoDB存储引擎层的特性。两者是完全独立的。下面我们来深入探讨这两者以及InnoDB索引的原理。1. MySQL Server层的缓存 - 查询缓存 (…

Python实战:实现监测抖音主播是否开播并录屏

实现这个功能,主要思路是循环检查主播状态 → 开播后获取直播流地址 → 使用FFmpeg录制。下面是一个基本的步骤表格: 步骤 关键行动 常用工具/库 1 获取主播直播间ID或唯一标识 浏览器开发者工具、抓包工具1 2 循环请求抖音API,查询主播直播状态 requests, time 3 解析API响…