Exp3-免杀原理与实践
1|0Exp3-免杀原理与实践
1|11 基础问题回答
- 1.1 杀软是如何检测出恶意代码的?
1.基于特征码的检测
1.在扫描程序工作后根据特征文件中的特征字符串,进行与待检测文件的扫描匹配,是检测已知恶意代码的最主要方法。
2.启发式恶意软件检测
根据片面特征去推断(看起来像),通常缺乏精确判断依据不需要及时更新,具有通用型;但实时监控系统行为开销稍大,没有基于特征码的精确度高。
3.基于行为的恶意软件检测
基于行为的检测相当于启发式的一种,或者是加入了行为监控的启发式让软件运行,记录其行为并分析(杀软的工作原理)。
4.完整性检测
通过hash值来判断文件是否被篡改。
5.云查杀技术
采用引擎加云上特征库的方式,用最小的资源来对病毒进行查杀。
6.基于人工智能的检测技术
利用数据挖掘等人工智能算法,区分恶意代码与正常代码的行为特征,并形成特征知识库,新的未知代码经过系统评判和学习后,通过分类器的进一步操作将其划入某一个分类。
- 1.2 免杀是做什么?
免杀就是让安插在被控机器的恶意代码不被杀毒软件软件发现
- 1.3 免杀的基本方法有哪些?
1.加冷门壳
2.加花指令
3.改程序入口点
4.修改内存特征码
5.直接修改特征码的十六进制法::把特征码所对应的十六进制改成数字差1或差不多的十六进制.
6.修改字符串大小写法:把特征码所对应的内容是字符串的,只要把大小字互换一下就可以了.
7.等价替换法:把特征码所对应的汇编指令命令中替换成功能类拟的指令.
8.指令顺序调换法:把具有特征码的代码顺序互换一下.
9.通用跳转法:把特征码移到零区域(指代码的空隙处),然后一个JMP又跳回来执行.
- 1.4 开启杀软能绝对防止电脑中恶意代码吗?
不是绝对的,杀毒软件也是通过特征码或者可疑行为分析出恶意代码,恶意代码注意这两点,应该也杀不出来。
1|22 实验环境
免杀测试平台:https://www.virustotal.com/
1|33 实践内容
3.1 正确使用msf编码器,使用msfvenom生成如jar之类的其他文件
3.1.1 检测实验2中生成的后门程序
3.1.2 编码一次
发现一个奇妙的事情,不编码杀软还杀不出来,一编码大多数杀软就杀出来了,这里我有一个猜测,杀软检测的特征码是unicode_mixed编码器。还有一种可能,就是编码后恰好将原有的码编译成了可被杀软检测的特征码。
3.1.2 编码10次
这里就验证了我们3.1.1的猜想,本身的反弹连接杀软是杀不出来的,在他编码后却可以被杀出来,所以,杀软检测的特征码是unicode_mixed编码器的机器码。
- -e选择编码器,-b是payload中需要去除的字符,该命令中为了使'\x00'不出现在shellcode中,因为shellcode以'\x00'为结束符,-i设置迭代次数
3.2 生成jar文件
JAR文件是一种归档文件,以ZIP格式构建,以.jar为文件扩展名。
生成压缩包文件后检测率明显降低了,且有一些杀软都无法检测。
后续如果要自己写免杀,且我要使用jar格式的话,直接找上图中的杀毒软件哈哈哈哈哈哈哈
3.3 生成php文件
检测率明显降低了很多
3.4 veil,加壳工具
3.4.1 veil
3.4.1.1 下载(其实先下载wine32会快点)
3.4.1.2 使用
输入list可以查看各种模式
3.4.2 加壳
加密过的代码信息熵太高,也会被查出来(信息密度太大),不过相比不加壳来说还是有点效果。
3.5 使用C + shellcode编程
3.5.1 生成c文件,得到机器码
3.5.2 补充代码shell_c.c(注意缩进,vim里调整更方便)
3.5.3 跨平台交叉编译
按照常理来说,c编译应该是会跟直接生成exe一样杀不出来才对,而这里却杀出来了,但是比编码要强一点,我在想会不会是因为编译平台的原因,虽然是跨平台交叉编译,但是在Linux端编译被记录下来了,就像这个例子:一个exe文件却在Linux平台编译,有点可疑。
3.6 通过组合应用各种技术实现恶意代码免杀
3.6.1 c+shellcode+Hyperion
3.6.1.1 下载Hyperion2.2
3.6.1.2修改makefile,make
3.6.1.3 加壳
3.6.2 python+aes_encrypt
3.6.2.1 打开veil,选择Evasion
3.6.2.2 使用aes_encrypt_py生成后门
这里的原理便是使用了数据加密的方式进行多次编译后门软件
3.7 附加题:用另一电脑实测,在杀软开启的情况下,可运行并回连成功
主机上做不了,于是转到虚拟机中,使用win7+360安全卫士和360杀毒,使用的后门程序是20191310_veil_upx.exe。此处的程序是第二项中生成的,在经过加密和加壳之后,普通杀软(火绒、360)已经无法杀出
kali端:
成功getshell并进行了一系列操作
1|4实验体会与总结
在第一个此实验第一题编码中,发现一个奇妙的事情:不编码杀软还杀不出来,一编码大多数杀软就杀出来了,这里我有一个猜测,杀软检测的特征码是unicode_mixed编码器。还有一种可能,就是编码后恰好将原有的码编译成了可被杀软检测的特征码。编码十次后发现检测率惊人相似,只减少了一个。这就验证了我们的猜想了,就是杀的unicode_mixed的特征码。
__EOF__

本文链接:https://www.cnblogs.com/GanNy/p/16100421.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通