CobaltStrike逆向学习系列(5):Bypass BeaconEye

在之前的三篇文章《Stageless Beacon 生成流程剖析》《Beacon C2Profile 解析》《Beacon 上线协议剖析》中,曾经交叉着将 C2Profile 的全部内容引见完了,也把 Bypass 所需求的一些内容也都交叉着提到过了,接下来就该说如何对其停止 Bypass

0x01 BeaconEye 检测原理

BeaconEye 是经过 yara 规则来对 Beacon 停止检测的,规则所匹配的就是 C2Profile,在 Beacon 解析完以后,每一项都是占 16 个字节,前 8 个字节是 type,后 8 个字节是 data

为了明白比照一下,先看一下 Java 端的操作,关键需求比照的就是这五条

yara 规则的第一条全为零,是由于 Beacon 在解析的时分直接偏移了 index 个位置

接下来也就都对得上了,类型依次是 short、short、int、int、short,对应过去就是 1、1、2、2、1,后面的值也就都是一样对应了

所以只需可以突破这个规则构造也就能够完成 Bypass 的工作了

0x02 Bypass 1

假如单纯做突破构造的话,将中间的值停止交换就能够了,整个十六个字节,实践需求运用的也就是第一位和后面的数据,中间的一片零都是没有意义的,所以在申请这片内存的时分,直接将其设置成其他值就能够了

直接去改字节也许还有点艰难,再或者就是运用存放器的赋值操作,将其他存放器的值,交换到 edx 当中

再者就是 inline Hook,这样一切的问题也都很容易处理了

0x03 Bypass 2

这个计划会比拟复杂,但是做完这个以后,之后要做其他的操作就会比拟便当了,不论是停止特征修正,还是后续继续做 Beacon 的二次开发也都是十分便当的。

这个计划就是 HOOK,而且需求对两边都需求停止修正才能够,工作量也是比拟大的。

整个 C2Profile 的流程是这样的,先在 Controller 依照指定格式组成数组,将其 Patch 到 beacon.dll 当中,再将 beacon.dll Patch 到 Loader 当中,Beacon 在执行的时分再将其解析成后续需求运用的格式。

为了能更便当处置 beacon.dll,最好的方式是重写 Loader,这样关于修正特征等也都会很便当。

接下来需求讨论的就是如何修正,关键函数就是解析 C2Profile 和取值两块,总共四个函数

关于解析是很容易处置的,之前提到过了,当 fdwReason 传入 1 的时分,所执行的是解析 C2Profile 的操作,直接将这个函数 HOOK 掉就好了

关于取值的话,也都是单个独立的函数,所以整体操作的逻辑都是分歧的

关于 HOOK 的库自行选择一个本人觉得舒适的就好,重要的还是地址的偏移,下面是 X64 的偏移量

ULONG_PTR ulParseProfile = ImageBase + 0x18694;
ULONG_PTR ulGetShortValue = ImageBase + 0x18664;
ULONG_PTR ulGetIntValue = ImageBase + 0x185DC;
ULONG_PTR ulGetPtrValue = ImageBase + 0x18630;
------本页内容已结束,喜欢请分享------

感谢您的来访,获取更多精彩文章请收藏本站。

© 版权声明
THE END
喜欢就支持一下吧
点赞13赞赏 分享
评论 共1条
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片
    • 头像李的0