安全矩阵

 找回密码
 立即注册
搜索
查看: 7420|回复: 0

BypassAV改造

[复制链接]

991

主题

1063

帖子

4315

积分

论坛元老

Rank: 8Rank: 8

积分
4315
发表于 2021-1-11 20:07:20 | 显示全部楼层 |阅读模式
原文链接:BypassAV改造

声明

由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,雷神众测以及文章作者不为此承担任何责任。

雷神众测拥有对此文章的修改和解释权。如欲转载或传播此文章,必须保证此文章的完整性,包括版权声明等全部内容。未经雷神众测允许,不得任意修改或者增减此文章内容,不得以任何方式将其用于商业目的。

No.1 基本流程分析
首先看一下cna的逻辑:

这些ui部分的就不管了
主要关注一下build函数:

根据输入的信息确定位数
其次是核心的code参数

通过终端输出一下这里写死的base64:

打开输出的txt文件,可以看到这就是核心的go文件了

No.2 免杀部分分析
这里先不对该go文件进行分析,还是先走完cna的逻辑
接下来生成了两个随机数作为key,并将两个key分别替换进go文件


然后把通过cs中选择的监听器及生成的shellcode加载到shellcode参数


其次就是将shellcode进行切片异或的方式免杀,遍历shellcode并将每个字符转为ascii码,和两个key进行异或

然后将该生成的异或后的shellcode替换进go文件中的shellcode


那么至此go文件就完成了,接下来就是编译为exe可执行文件了,因为核心的内容还是在go文件中,所以后面的编译先放一放

No.3 运行和调用
现在来分析一下生成的go文件
首先将shellcode再次异或,恢复会原本的shellcode
而后通过VirtualAlloc申请一块和shellcode一样大的内存空间,将申请到的内存地址赋值到addr参数
插一句VirtualAlloc的使用
VirtualAlloc,lpAddress,dwSize,flAllocationType,flProtect


然后再通过RtlCopyMemory函数将shellcode复制到分配到的内存中
再插一句,RtlCopyMemory非重叠复制,而RtlMoveMemory是重叠复制

这里通过unsafe.Pointer将shellcode的首地址进行了强制转换为uintptr指针,通过uintptr指明了shellcode所在的内存起始位置
最后通过syscall.Syscall函数调用已被复制到addr位置的shellcode完成程序的执行
那么针对BypassAV的分析也结束了

No.4 改造前免杀测试
这里先进行一下免杀测试
直接运行go文件,可以免杀上线:


然后编译为exe尝试上线,被查杀

No.5 进行改造
根据上面的测试内容可以发现exe被杀了,尝试修改go文件进行分离免杀,将shellcode16进制编码后放到vps上
因为shellcode在go文件中是切片格式,所以仿写一个go文件将shellcode先编码

将输出的shellcode保存为txt,放在vps上
然后修改go文件,添加几个库

在主函数开始前加入sleep,延时5秒:
time.Sleep(5 * time.Second)
然后修改shellcode的获取方式

这里写的还是比较简陋,后续会更新一个完整的放到github上
https://github.com/woaiqiukui

No.6 改造后免杀测试
直接go run运行go文件,成功上线

编译为exe,成功绕过上线

依然拉垮,后续会继续修改

No.7 参考&感谢
免杀系列-CS木马shellcode分离免杀上线
https://mp.weixin.qq.com/s/KIiaTcf2SHAcYgfONTDw1A
简单的分离免杀
https://idiotc4t.com/defense-evasion/simple-separate-bypassav


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|安全矩阵

GMT+8, 2024-9-20 19:51 , Processed in 0.013910 second(s), 18 queries .

Powered by Discuz! X4.0

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表