CobaltStrike逆向学习系列(5):Bypass BeaconEye
这是[信安成长计划]的第 5 篇文章
关注微信公众号[信安成长计划]

0x00 目录
0x01 BeaconEye 检测原理
0x02 Bypass 1
0x03 Bypass 2
0x04 效果图
在之前的三篇文章《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;
后续的代码重写也就非常简单了,申请内存赋值、取 Short、取 Int、取Ptr,这些都按照个人的设计思路来写就可以了
可以很简单的把数据进行罗列,这样在取值的时候会比较麻烦,毕竟不好定位,当然也可以用定长的方式来做

也可以做的很复杂,在中间插入大量的垃圾字符,用一种只有自己才明白的格式来写

有一点需要注意,在 X86 上写三个取值函数的时候,并不能直接去取值,beacon.dll 并不是堆栈传参的,而是通过 edx 来传参的,因为 X86 是支持内嵌汇编的,所以在修改上也是很容易的
__asm mov index, edx
0x04 效果图

CobaltStrike逆向学习系列(5):Bypass BeaconEye的更多相关文章
- CobaltStrike逆向学习系列(11):自实现 Beacon 检测工具
这是[信安成长计划]的第 11 篇文章 关注微信公众号[信安成长计划] 0x00 目录 0x01 检测原理 0x02 检测方案 0x03 存在的问题 0x04 解决方案 0x05 示例代码 0x06 ...
- CobaltStrike逆向学习系列(2):Stageless Beacon 生成流程分析
这是[信安成长计划]的第 2 篇文章 关注微信公众号 [信安成长计划] 0x00 目录 0x01 Patch Beacon 0x02 Patch Loader 0x03 文件对比 0x04 流程图 C ...
- CobaltStrike逆向学习系列(15):CS功能分析-BOF
这是[信安成长计划]的第 15 篇文章 0x00 目录 0x01 BOF功能分析 0x02 BOF功能执行 0x03 写在最后 其实在看过 RDI 与 DotNet 功能执行之后,BOF 的执行基本就 ...
- CobaltStrike逆向学习系列(14):CS功能分析-DotNet
这是[信安成长计划]的第 14 篇文章 0x00 目录 0x01 DotNet功能分析 0x02 DotNet功能执行 0x03 写在最后 在上两篇文章中,讲述了 CS 中的一种功能执行方式 RDI, ...
- CobaltStrike逆向学习系列(10):TeamServer 启动流程分析
这是[信安成长计划]的第 10 篇文章 关注微信公众号[信安成长计划] 0x00 目录 0x01 基本校验与解析 0x02 初始化 0x03 启动 Listeners 在之前的分析中,都是针对 Cob ...
- CobaltStrike逆向学习系列(6):Beacon sleep_mask 分析
这是[信安成长计划]的第 6 篇文章 关注微信公众号[信安成长计划] 0x00 目录 0x01 C2Profile 分析 0x02 set userwx "true" 0x03 s ...
- CobaltStrike逆向学习系列(4):Beacon 上线协议分析
这是[信安成长计划]的第 4 篇文章 关注微信公众号[信安成长计划] 0x00 目录 0x01 Beacon 发送 0x02 TeamServer 处理 0x03 流程图 0x04 参考文章 在上一篇 ...
- CobaltStrike逆向学习系列(3):Beacon C2Profile 解析
这是[信安成长计划]的第 3 篇文章 关注微信公众号[信安成长计划] 0x00 目录 0x01 Controller 端分析 0x02 Beacon 端分析 0x03 展示图 在上一篇文章中完成了 S ...
- CobaltStrike逆向学习系列(1):CS 登陆通信流程分析
这是[信安成长计划]的第 1 篇文章 关注微信公众号[信安成长计划][SecSource] 0x00 目录 0x01 密码校验 0x02 aggressor.authenticate 0x03 agg ...
随机推荐
- node.js和vue cli脚手架下载安装配置方法
一.node.js安装以及环境配置 1.下载vue.js 下载地址: https://nodejs.org/en/ 2.安装node.js 下载完成后,双击安装包开始安装.安装地址最好换成自己指定的地 ...
- 集合框架-ArrayList集合存储自定义对象
1 package cn.itcast.p3.arraylist.test; 2 3 import java.util.ArrayList; 4 import java.util.Iterator; ...
- 前端 | Vue nextTick 获取更新后的 DOM
前两天在开发时遇到一个需求:打开对话框的时候自动聚焦其中的输入框.由于原生的 autofocus 属性不起作用,需要使用组件库提供的 focus 方法手动手动获取焦点.于是有如下代码: <el- ...
- MySQL数据类型操作(char与varchar)
目录 一:MySQL数据类型之整型 1.整型 2.验证不同类型的int是否会空出一个存储正负号 3.增加约束条件 去除正负号(unsigned) 二:浮点型 1.浮点型 2.验证浮点型精确度 三:字符 ...
- 学习JAVAWEB第十七天
今天还是在做登陆界面,做到后台servlet了 知识点太不熟练了,还得继续做
- C++ 微信多开
应用是如何判断多开 一.通过查找窗口标题或者类名来判断程序是否正在运行. 二.通过互斥对象确定程序是否运行,大多数软件都是使用CreateMutexW 判断多开的. 三.内存映射物理文件,控制多开. ...
- python 小兵内置函数进制转换
Python内置函数进制转换的用法 使用Python内置函数:bin().oct().int().hex()可实现进制转换. 先看Python官方文档中对这几个内置函数的描述: bin(x)Conve ...
- springcloud 实现简单的 消费者和生产者 模式(Restfule 的风格)
一.springcloud 实现简单的 消费者和生产者 模式(Restfule 的风格) 1.实现简单的消费者和生产者 springcloud使用的http协议进行传输数据,也就是说springclo ...
- 「BalkanOI 2018 Day2」Parentrises
「BalkanOI 2018 Day2」Parentrises part1 显然可以直接贪心. 右括号记-1,左括号记1. 默认起始全部绿色,不染色. 策略如下: 从左往右扫,如果右括号个数大于左括号 ...
- maven的三种项目打包方式----jar,war,pom
1.pom工程:**用在父级工程或聚合工程中.用来做jar包的版本控制.必须指明这个聚合工程的打包方式为pom 2.war工程:将会打包成war,发布在服务器上的工程.如网站或服务.在SpringBo ...