免杀的基本概念

木马的本质就是shellcode,免杀就是反病毒技术(杀毒软件),它指的是一种使病毒木马免于被杀软 查杀的技术,由于免杀技术的涉猎范围非常广,其中包含汇编、逆向工程、系统漏洞(C/C++)等和可 技术(安全研究员),所以难度很高,其内容基本上都是修改病毒、木马的内容改变特征码,从而躲避 了杀毒软件的查杀。

0x01 杀毒软件检测方式(静态免杀【文件上传后再未运行的状态下,可不被杀】、动态【文件上传后再 运行的状态下,可不被杀】)

基于文件扫描的反病毒技术 基于文件扫描的反病毒技术可以分为三种,分别是“第一代扫描技术”、“第二代扫描技术”、“算法扫描”。

第一代扫描技术

第一代扫描技术的核心用一句话就可以概括——在文件中检索病毒特征序列,虽然出现的比较早,但是 直到现在也仍然被个大杀软厂商使用着,其主要分为“字符串扫描技术”和“通配符扫描技术”两种

字符串扫描技术

使用从病毒中提取出来的具有特征的一段字符来检测病毒,这些字符必须在一般程序中不太可能出现。 例如一个隐藏执行格式化所有硬盘的命令不可能出现在普通程序中,可以将其作为特征字符。

通配符扫描技术

由于字符串扫描技术有执行速度与特征码长度的限制,所以正在逐渐被通配符扫描技术取而代之。现在 反病毒软件中简单的扫描器通常支持通配符。扫描器中的通配符一般用于跳过某些字节或字节范围,而 现在大多数扫描器已经支持正则表达式了。

下面通过一个例子来说明通配符扫描技术的原理,例如病毒库中有以下一段特征码: ......020E 07BB ??02 %3 56C9...... 可以将其解释如下: ● 尝试匹配02,如果找到则继续否则返回为假 ● 尝试上一匹配目标后匹配0E,如果找到则继续否则返回为假 ● 尝试上一匹配目标后匹配07,如果找到则继续否则返回为假 ● 尝试上一匹配目标后匹配BB,如果找到则继续否则返回为假 ● ??表示忽略此字节 ● 尝试上一匹配目标后匹配02,如果找到则继续否则返回为假 ● 在接下来的3个位置(字节)中尝试匹配56,如果找到则继续,否则返回假 ● 尝试上一匹配目标后匹配C9,如果找到则继续,否则返回假 由于这种技术支持半字节匹配,这样可以更加精确地匹配特征码,一些早期的加密病毒使用这种方法都 能比较容易地检测出来。

第二代扫描技术

第二代扫描技术以“近似精确识别法”和“精确识别法”为代表,除此之外还有“智能扫描法”与“骨架扫描 法”,第二代扫描技术与第一代相比,对检测精度提出了更严格的要求。 智能扫描法 忽略检测文件中像NOP这种无意义的指令。而对于文本格式的脚本病毒和宏病毒,则可以替换多余的格 式字符,如空格、换行符或制表符等。所有的替换动作均在扫描缓冲区中执行,大大提高了扫描器的检 测能力。 近似精确识别法

多套特征码 该方法采用至少两个字符串集来检测每个病毒,如果扫描器检测到其中一个特征符合,将会将其识别为 变种,但不会执行清除病毒体的操作。如果使用的多个特征码全部符合,则会执行清除病毒体的操作。 校验和 这个方法是让每一个无毒软件生成一个校验和,等待下次扫描时在进行简单的校验和对比,如果校验和 发生变化,再进行其他的扫描,否则则说明这个文件没有被感染,由于不需要对所有文件进行扫描,大 大提升了扫描器的效率,但是严格来说这并不算扫描技术,目前,某些安全厂商还对病毒采取了分块校 验的方式以提高识别的准确性。 以上两种方式只是近似精确识别法中的两种,近似精确识别法中包含了若干种方法,这里就不进行一一 介绍了。 骨架扫描法 由大名鼎鼎的卡巴斯基公司发明,在检测宏病毒时效果特别显著,没有使用上面所说的特征码和校验和 而是采用逐行解析宏语句,并将所有非必要字符丢弃,只剩下代码的骨架,对代码骨架进行进一步的分 析,在一定程度上跳了对变种病毒的检测能力。 精确识别法 目前唯一能保证扫描器精确识别病毒变种的方法,通常情况下与第一代扫描技术结合使用。精确识别法 也是利用校验和技术,不过应用更广、更负责。甚至能通过对整个病毒进行校验和计算来生成特征图。

基于内存扫描的反病毒技术

内存扫描器一般与实时监控型扫描器协作,从理论上来杀软的文件扫描组件能识别的病毒,内存扫描器 也能识别。但是由于程序在运行后会将自身释放到内存中,导致释放后的文件结构与未执行的文件相比 有较大的差异。因此在内存扫描时和文件扫描时所使用的特征码很多情况下使用的不是一套。 当病毒被加载到内存中就证明它要开始执行一些动作,在病毒或木马初始化运行环境时,会让更多的可 疑点暴露出来,为了进一步提高效率和准确性,杀软厂商一般会为内存扫描组件单独定义一套新的特征 码

基于行为监控的反病毒技术

此类反病毒技术一般需要虚拟机与主动防御等技术配合使用。其原理是,监控程序的行为,并将其与病 毒木马行为进行分析比对,如果某些程序在执行会进行一些可疑的操作,那么即使是一个新生病毒,也 会被拥有这种技术的反病毒产品所拦截。 ps:行为——应用程序运行后的操作。行为特征——一个程序按照某种顺序执行某一系列操作所具有的 特征。 下面以一个典型的木马程序为例,进行解释。 一个木马程序,可能执行的操作步骤如下

● 释放一些文件到系统关键目录中(权限维持、自启动)

● 修改系统设置使这些新释放的文件可以自启动

● 删除自身

如果一个程序执行的操作具有上述特征,那么这个系统大概率就是木马

基于新兴技术的反病毒技术

云查杀 云查杀用一句话概括就是——“可信继承,群策群力”,也正因此,云查杀以及其跟随衍生出来的技术也 是最具有挑战性的。 云查杀的基本思路就是以服务器为脑,以所有用户的机器为触角,从而使服务器可以随时知道每个用户 的情况,如果其中一个用户与其他用户对比产生差异,那么服务器就会发出指令,让发生异常的机器检 查出问题所在。并将问题反馈给服务,让问题在干扰到其他用户之前被扼杀掉。 上面我们提到的其他用户是整个信任机制的根本,举例来讲,如果大多数机器都运行过一个软件,那么当一个新加入的机器也试图运行这个软件时,服务器就认为这是正常的,否则服务器就会发出相应指令 让用户的机器去阻止其运行。

可信继承

整个云的信任机制是非常复杂的结构,其中包含用户参与的信任评价体系、反病毒专业人员参与的样本 分析信任体系、服务端自动判断信任体系、基于数字签名的认证信任体系等。 顶端的信任体系由数字签名、样本分析构成,这些顶端的信任体系在用户的机器上表现出来的形式就是 “根可信进程”。所谓的“根可信进程”就是指可信进程链条的顶端,凡是由可信进程开启的新进程都被认为 是可信的。 举例解释一下,假如进程A是具有数字签名的根可信进程,那么它在被用户直接执行时就不会触发杀软 的任何操作,且由A进程创建的新进程也成为可信进程。如果进程B是一个非可信程序,那么它在被用户 执行时就会受到严密的监控,如果执行期间有什么敏感操作,样本会被马上提交到服务器进行处理。 这样以来,基于云的信任网络会越来越庞大,其收集的信息也将也来越多。

群策群力

云计算和病毒木马的感染都具有分布性这一特点,这样一来,病毒木马感染的速度越快、感染的面积越 广,其被云查杀捕获到的可能性就越大。 只要某一台计算机上发现新病毒,它马上会被提交到服务端,在服务端快速更新后,所有在云中的计算 机就都获得了对这种病毒的免疫力。

双引擎查杀/多引擎查杀

与字面意思相同,即同时运用两个反病毒引擎扫描病毒,其扫描的准确度会比单一反病毒引擎有所提 高。 通常,具有多个反病毒引擎的产品都会让用户选择扫描模式,如是启动某个引擎,还是启动所有引擎, 因此在针对此类反病毒产品进行免杀的时候往往会在操作思路上将其分割为若干个反病毒产品,然后逐 个攻破。

沙箱

免杀两个方面,①shellcode变形(静态免杀)②行为(动态免杀)

0x02 免杀技术发展史 ● 1989年:第一款杀毒软件Mcafee诞生,标志着反病毒与反查杀时代的到来。 ● 1997年:国内出现了第一个可以自动变异的千面人病毒(Polymorphic/MutationVirus)。自动变异 就是病毒针对杀毒软件的免杀方法之一,但是与现在免杀手法的定义有出入。 ● 2002年7月31日:国内第一个真正意义上的变种病毒“中国黑客II”出现,它不但具有新的特征,还实现 了“中国黑客”第一代所未实现的功能。可见这个变种也是病毒编写者自己制造的。 ● 2004年:在黑客圈子内部,免杀技术在这一年首次公开提出,由于当时还没有CLL等专用免杀工具, 所以一般都使用WinHEX逐字节更改技术。 ● 2005年1月:大名鼎鼎的免杀工具CCL的软件作者tankaiha在杂志上发表了一篇文章,推广了CCL工 具,从此国内黑客界才有了第一个专门用于免杀的工具。 ● 2005年的2~7月:通过各方面有意或无意的宣传,黑客爱好者们逐渐重视免杀技术,在一些黑客站点 的木马专栏下,开始有越来越多的人讨论此技术,这也为以后木马免杀技术的火暴埋下根基。 ● 2005年8月:第一个可查的关于免杀的教学录像诞生,为大量黑客爱好者提供了一个有效的参考资 料,成功地对免杀技术进行了第一次科普。 ● 2005年9月:免杀技术开始被越来越多的黑客技术爱好者知晓。 国内在1997年出现了第一个可以自动变异的千面人病毒,虽然自动变异也可以看作是针对杀毒软件的一 种免杀方法,但是由于它与现在定义的免杀手法有出入,因此如果将国内免杀技术的起源定于1997年会 显得比较牵强。 国内在1997年出现了第一个可以自动变异的千面人病毒,虽然自动变异也可以看作是针对杀毒软件的一 种免杀方法,但是由于它与现在定义的免杀手法有出入,因此如果将国内免杀技术的起源定于1997年会 显得比较牵强。

从国内免杀技术的发展过程来看,一直到2005年9月免杀技术才正式进入公众的视野。但是从国外的发 展来看,20世纪80年代就已经出现了使用Rootkit反扫描技术的病毒,不过这属于一个源码级应用的例 子。而国内的病毒或木马是什么时候开始使用Rootkit的呢?2003年还是2003年以后的某个日子?要知 道国内各大论坛普遍出现系统内核利用的文章应该是从2007年~2008年才开始的。

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

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

相关文章

找不到iutils.dll怎么解决,需要如何修复

iutils.dll 是一个系统级的动态链接库(Dynamic Link Library)文件,通常与Windows操作系统中的应用程序运行密切相关。动态链接库文件如同一个代码库,存储了多个程序可以共享的功能和指令。iutils.dll具体提供了哪些功能可能依据它…

javascript 实现 阻塞/睡眠/耗时 几秒

有时前端想实现 代码停止几秒再执行后续代码,可能会受到异步执行的困扰。 那下面的方法就可以实现同步阻塞的效果,把阻塞的代码放到blockForThreeSeconds().then(()中即可 //阻塞2秒函数function blockForThreeSeconds() {return new Promise(resolv…

嵌入式学习——51单片机——(UART串口通信)day18

1. 单片机中的串口通信—51单片机中串行t通信的波特率发生器由定时器1来产生—() 电脑发送USB信号 单片机发送TTL信号 1.1 单片机向电脑发送信息 单片机由P3.1 TxD 向电脑发送TTL电平信号,TTL信号经过CH340转化为USB信号发送到电脑上 1.2 …

LeetCode 每日一题 ---- 【2244.完成所有任务需要的最少轮数】

LeetCode 每日一题 ---- 【2244.完成所有任务需要的最少轮数】 2244.完成所有任务需要的最少轮数方法:哈希表贪心 2244.完成所有任务需要的最少轮数 方法:哈希表贪心 用哈希表统计每个等级出现的次数 每次处理优先消费 3 个,m % 3 后&#…

20240514金融读报:超长期特别国债金融消费者保护服务平台数据资产与AIRPA流程

1、发行超长期特别国债支持“两重”建设(国家重大战略实施和重点领域安全能力建设) 2、金融消费者保护服务平台上线试运行,开通投诉处理和纠纷调解两项功能 3、万亿元超长期特别国债将呈现小额频发的特点。作用:他通过扩充政府融资…

使用yocto进行linux开发有什么优势? 使用yocto开发linux为什么不用关心硬件?

原文链接:https://blog.csdn.net/weixin_43435675/article/details/131373308 当你拿到一块新的开发板时,你需要先确定这块开发板的型号和芯片类型。可以通过查看开发板上的标识、参考手册或者厂商提供的相关信息来获取。 配置Yocto需要完成以下几个步…

百度文心一言 java 支持流式输出,Springboot+ sse的demo

参考&#xff1a;GitHub - mmciel/wenxin-api-java: 百度文心一言Java库&#xff0c;支持问答和对话&#xff0c;支持流式输出和同步输出。提供SpringBoot调用样例。提供拓展能力。 1、依赖 <dependency> <groupId>com.baidu.aip</groupId> <artifactId…

【Java应用】Java提取B站视频教程详情(完整代码|下载可直接运行|自带页面|可直接复制)

提取B站视频教程详情 背景 B站这个视频列表是真的体验感太差了,有时候想把章节复制下来,再对应的章节下面做笔记,实在是太难搞了,于是就有了这篇文文章 效果图 根据关键字获取视频id public Result videoList(RequestBody VideoDto videoDto) {String keyword videoDto.get…

ArcGIS10.2能用了10.2.2不行了(解决)

前两天我们的推文介绍了 ArcGIS10.2系列许可到期解决方案-CSDN博客文章浏览阅读2次。本文手机码字&#xff0c;不排版了。 昨晚&#xff08;2021\12\17&#xff09;12点后&#xff0c;收到很多学员反馈 ArcGIS10.2系列软件突然崩溃。更有的&#xff0c;今天全单位崩溃。​提示许…

动态代理技术应用场景分析

Mybaits代理Mapper 滑动验证页面 https://juejin.cn/post/6844903841163378701?searchId202405131414243B31C303F8A221DCC2ED

Unity学习笔记---图层

渲染层级 1&#xff0c;调整Sprite Renderer中的Order in Layer可以调整图层层级。 2&#xff0c;在Edit--Project Setting--Graphics中&#xff0c;调整TransParency Sort Mode为Custom Axis&#xff0c; 并将TransParency Sort Axis中的Z值默认的1改为0&#xff0c;将Y改为…

FBI树-蓝桥571

读题&#xff1a;&#xff08;说实话我就是读不懂题&#xff09; 1 一个地方一开始我觉得不理解&#xff1a;“含0和1的串叫F串&#xff0c;FBI树是一种二叉树&#xff0c;它的结点类型包括F结点&#xff0c;B结点&#xff0c;I结点”&#xff0c;可是一个结点不就是0或者1吗…

Nginx详解:高性能Web服务器与反向代理的奥秘

Nginx&#xff0c;发音为“engine-x”&#xff0c;是一个开源、高性能的HTTP和反向代理服务器&#xff0c;也是邮件代理服务器。自2004年首次发布以来&#xff0c;Nginx凭借其轻量级、高效能和高并发处理能力&#xff0c;在互联网领域迅速崛起&#xff0c;成为许多大型网站和高…

【Spark】Spark编程体验,RDD转换算子、执行算子操作(六)

Spark编程体验 项目依赖管理 <dependencies><dependency><groupId>org.scala-lang</groupId><artifactId>scala-library</artifactId><version>2.12.10</version></dependency><dependency><groupId>org.ap…

Bootstrap前端框架简

Bootstrap具有多种含义和用法&#xff0c;具体如下&#xff1a; 在计算机术语中&#xff0c;Bootstrap&#xff08;引导&#xff09;指一种设计成通过自己的操作使其自身处于期望状态的技术或设备&#xff0c;例如一种机器例程&#xff0c;该例程的头几个指令足以使引导其自身…

银河麒麟V10终端出现“/home/kylin/.config/caja”读写权限问题,进程杀不掉。解决办法

问题如上图所示&#xff0c;一直关不了进程&#xff0c;桌面显示不正常。 解决办法 步骤一&#xff1a;切换字符登录“ctrl alt f1切字符登录下”。&#xff08;先输用户名&#xff0c;回车输密码&#xff09; 步骤二&#xff1a;删除“caja”缓存文件&#xff08;rm -r /home/…

记一次从jenkins安装到构建出第一个jar

1.安装 官方教程见&#xff1a;https://www.jenkins.io/zh/doc/book/installing/ 可以选择docker安装相对简单。 docker环境安装见https://blog.csdn.net/taotao_guiwang/article/details/135508643 2.环境配置 见https://blog.whsir.com/post-4865.html 注意&#xff1a…

Python3 笔记:循环结构 while语句

while语句的格式&#xff1a; while 条件表达式: 循环体 while语句是一个条件循环语句&#xff0c;即首先计算表达式&#xff0c;条件表达式的值为真时&#xff0c;依次执行while语句中的循环体语句&#xff0c;直到条件表达式的值为假时跳出循环&#xff0c;执行下一条语…

智能终端RK3568主板在智慧公交条形屏项目的应用,支持鸿蒙,支持全国产化

基于AIoT-3568A的智慧公交条形屏&#xff0c;可支持公交线路动态展示&#xff0c;语音到站提醒&#xff0c;减少过乘、漏乘的情况&#xff0c;有效提高了公交服务效率和质量&#xff0c;为乘客提供了更舒适、更安全和更方便的出行体验&#xff0c;为城市的发展增添了新的活力。…

day5

利用迭代器&#xff01; #include <vector> #include <map>class Solution { public:std::vector<int> intersection(std::vector<int>& nums1, std::vector<int>& nums2) {std::map<int, int> Mymap;std::vector<int> qq…