前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C++实现VT全免杀(0/71)

C++实现VT全免杀(0/71)

作者头像
Creaper
发布2023-11-20 12:33:25
4010
发布2023-11-20 12:33:25
举报
文章被收录于专栏:锦鲤安全锦鲤安全
代码语言:javascript
复制
1   前言2   效果图3   前置知识4   免杀实验5   实验结论

01

前言

之前制作了VT查杀1的免杀马,于是我自夸了一句过VT和微步,但是群里面有小伙伴说:

的确是还有一个,本来我觉得VT 1/71已经够了,但我觉得还是可以研究一下,在我的印象里剩下这个MaxSecure只要是g++打包的exe都会报毒。

如果我的免杀代码没有问题,杀毒无法监测出病毒,那么问题只能出在编译上。

02

效果图

还是先放效果图:

03

前置知识

免杀马的实现就是将shellcode加密、shellcode加载器、反沙箱及编译器编译等几种技术组合在一起实现免杀。

前面一篇文章讲了shellcode加密、shellcode加载器、反沙箱以及简单讲了以下编译器编译,在选择编译器时VS还是g++,选择g++,因为g++编译的空包exe比VS编译低两个数量级。但除了编译器选择还有编译器应该如何编译——编译器编译命令。编译器编译命令也是一个很大的影响因数,后面的会写一篇python免杀VT查杀1/71的文章也会用到这个原理。

04

免杀实验

先让chatgpt写一个冒泡排序:

这是一段完全无害的代码,如果报毒,那么绝对是编译的问题,分别用VS与g++编译这一段代码上传VT看看VT报毒情况。

VS编译:

g++编译:

代码语言:javascript
复制
g++ scl2.cpp -o scl.exe -mconsole

可以看到g++编译的命令要比VS低很多,后面继续用g++编译这一段代码不同的是不断改变g++的编译命令。

先测试一些常见的命令:

代码语言:javascript
复制
g++ scl2.cpp -o scl.exe -mconsole -pipe
代码语言:javascript
复制
g++ scl2.cpp -o scl.exe -mconsole -time
代码语言:javascript
复制
g++ scl2.cpp -o scl.exe -mconsole -s

一些参数还可能会导致报毒变多,-s参数就是一个很典型的例子,6个报毒。。

代码语言:javascript
复制
g++ scl2.cpp -o scl.exe -mconsole -pie

-pie参数编译后运行没有反应,跳过。

代码语言:javascript
复制
g++ scl2.cpp -o scl.exe -mconsole -shared

-shared参数编译后运行无法运行,跳过。

--target-help下面还有几百个参数:

我试了一些不是没有变化就是不能运行或是不会用,这个时候我想到了chatgpt,这种时候用chatgpt就是很合适了。

  1. -s 参数用于剥离可执行文件中的符号表,这样可以使反汇编变得更困难,也可以减少程序被误判为病毒的概率。
  2. -fno-stack-protector 参数可以禁用堆栈保护机制,这样可以减少杀软对程序的误报。
  3. -fvisibility=hidden 参数可以隐藏编译出的符号表,这也可以使反汇编变得更困难。
  4. -Wl,--dynamicbase,-Wl,--nxcompat 参数可以启用程序地址空间随机化和数据执行保护,这可以提高程序的安全性,同时也可以减少杀软的误报。

前面第一个 -s ,前面试过了,6个报毒,直接舍弃。试试后面的4个:

代码语言:javascript
复制
g++ scl.cpp -o scl.exe -mconsole -fno-stack-protector

还是1个报毒。

代码语言:javascript
复制
g++ scl.cpp -o scl.exe -mconsole -fno-stack-protector -fvisibility=hidden

还是1个报毒。

代码语言:javascript
复制
g++ scl.cpp -o scl.exe -mconsole -fno-stack-protector -fvisibility=hidden -Wl,--dynamicbase

还是1个报毒。

代码语言:javascript
复制
g++ scl.cpp -o scl.exe -mconsole -fno-stack-protector -fvisibility=hidden -Wl,--dynamicbase -Wl,--nxcompat

最后一个0个报毒!

那么关键的时候来了,将代码换成前一篇的随机值时间碰撞解密免杀(没有看过前一篇的关注公众号:锦鲤安全)。

代码语言:javascript
复制
g++ scl2.cpp -o scl.exe -mconsole -fno-stack-protector -fvisibility=hidden -Wl,--dynamicbase -Wl,--nxcompat

g++编译,主机启动360不报毒,cs正常上线

上传VT,结果出来实现VT全免杀!至此实验结束。

补充:

代码语言:javascript
复制
g++ scl2.cpp -o scl.exe -mconsole -Wl,--nxcompat

单独使用 -Wl,--nxcompat 参数还是会导致报毒。

05

实验结论

在代码确定免杀的情况下报毒,是编译的问题。使用g++编译时 -s 参数会导致报毒增多(6/71),

-fno-stack-protector -fvisibility=hidden -Wl,--dynamicbase -Wl,--nxcompat

连在一起使用可减少报毒(0/71)。

代码语言:javascript
复制
g++ scl2.cpp -o scl.exe -mconsole -fno-stack-protector -fvisibility=hidden -Wl,--dynamicbase -Wl,--nxcompat
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-02-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 锦鲤安全 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档