一、概述:

这次文章主要介绍下Cobalt Strike 4.1相关功能的二开和后门(artifact.exe\beacon.exe)的生成方式,Cobalt Strike的jar包我已反编译,并改了下反编译后的bug,teamserver与agressor均能正常调试使用,附反编译后项目地址: https://github.com/mai1zhi2/CobaltstrikeSource 。若有不对的地方希望大伙指出,谢谢。后续将会再分享通讯协议与自定义客户端(后门)。PS:感谢Moriarty的分享课。

二、常用二开的方式:

2.1 RDI,反射型DLL注入

新建目录,添加反射型Dll:

在default.can文件中添加自定义的菜单项,其中传入参数$1为beaconID:

在AggressorBridge.java的scriptLoaded()方法中增加自定义的dialog:

在evaluate()方法添加相应的事件处理,来打开自定义的对话框:

自定义的对话框的构造方法传入client和beaconID的数组,以便后续构造TaskBeacon实例,再调用TaskBeacon实例中新增的RDITest()方法,:

下图为在TaskBeacon.java中的TaskBeacon类中新增的RDITest(),在该方法中生成RDITestJob类对象并调用其spawn()方法:

所增加的RDITestJob类,该类继承Job类,并实现所需的虚函数,其中getDLLName()函数要返回所需dll的路径:

另外在该类中重写了父类的spawn()方法,因为父类的spawn()方法会调用decrypt()函数解密后相应的资源后再去读取,而我们的dll没有进行加密,所以直接读取即可:

测试运行:

2.2 BOF,Beacon Object File,加载运行obj File

先生成相应的.Bof文件,这里以netstat功能为例子

新建自定义的BOF类,并继承PostExInlineObject类,重写类中的getObjectFile()方法,该方法的作用是返回要加载的BOF文件路径:

其中在父类PostExInlineObject中的getFunction()方法可以修改BOF文件的入口方法名,不一定为go:

然后在TaskBeacon增加其BOF类的调用:

最后在自定义dialog中调用:

测试运行:

三、简介相关后门的生成:

3.1、生成stager(artifact.exe)

跟进show(),首先设置windows execute对话框里面的相应信息,其中DialogManager var1为窗口管理对象,再调用addDialogListener(this)将当前的窗口加入链表,然后调用它的action()方法:

跟入action()方法,里面再调用action_noclose()方法:

跟入action_noclose(),首先找到Generate的按钮,然后为其添加事件监听:

选择listener,点击Generate:

点击按钮后就新建线程,通过listeners2属性获得一个窗口迭代器,然后迭代窗口对象,调用该窗口对象所实现DialogListener接口中的dialogAction()方法:

因为WindowsExecutableDialog实现了DialogListener的接口:

即调用该类中的dialogAction()方法:

跟入getPayloadStager(),该方法主要负责生成相关的shellcode:

跟入 shellcode (),该方法三个参数分别为listener、payload名称、payload的位数:

继续跟入resolve(),判断传入的payload名称var2是否在系统自带的payload链表var4里:

返回相应payload 的GenericStager对象,并genericStager.generate()方法,该方法为主要shellcode的生成方法:

首先传入"resources/httpstager.bin"路径通过CommUtils.resource()获得相关的shellcode:

先拼接了teamserver地址和端口号:

再回填EXIT_FUNK_PROCESS:

回填SkipOffset和isSSL

回填User-agent:

回填URI:

这里注意这个getURI()生成URI的函数,现在有网络空间测绘进行网络上的扫描,该生成的URI就是其主要特征,跟入这个函数:

因为GenericHTTPStagerX86是父类,看ForeignHTTPStagerX86子类里面的函数实现,里面调用了MSFURI(32),继续跟入:

这个函数是URI有大写字母+小写字母+数字组合而成,然后经过checksum()函数计算与92相等则成功生成,跟入checksum():

在webserver端认证URI来下载beacon时也是通过checksum8()函数来认证:

最后函数执行完后返回shellcode,回到dialogAction()方法,后续判断需要生成的是exe还是dll,调用savefile()来保存,再在该函数中调用post(),里面新开线程,调用窗口对象的dialogResult()方法:

跟入dialogResult()方法,先获取了相关的信息:

根据信息调用patchArtifact()方法:

跟进patchArtifact():

再跟进patchArtifact(),函数中主要调用_patchArtifact(),传入shellcode内容和相应文件名,先读取出在resources/中artfict32的内容:

再生成四个随机数放在数组var6中,然后将shellcode跟该数组进行异或处理后存放在var7:

在artfact.exe找到1024个‘A’的位置:

然后把相应的位置、异或所需的数组、异或后的shellcode内容及长度等信息填入var10:

然后把artfact32.exe的1024个’A’进行替换,并返回artfact32.exe内容:

接着把artfact32.exe内容传入fixChecksum()做校验和:

最后调用writetofile()把数据写入文件:

对比文件,1024个‘A’被替换成异或后的shellcode:

3.2生成Stage(Beacon.exe)分析:

前面流程都一样,主要分析WindowsExecuteStageDialog.java

跟入getListener(),里面主要做配置信息:

再跟入new ScListener():

先看DataUtils.getProfile(var1),主要获取c2profile通信设置:

再看DataUtils.getPublicKey(var1),获取pubkey的值:

返回listener var4后,调用var4的export()方法,跟入,函数里判断payload的类型:

获得相关host和port后调用exportBeaconStageHTTP():

再跟入exportBeaconStage(),先获得当前的系统时间,然后读取resource/beacon.dll:

跟入readResource(String s),先把resource/替换成sleeve/,然后调用decrypt()解密读取到的相应资源:

跟入decrypt(),里面做相应的解密处理,先分别获取内容0到length-16的字节存入var2和length-16到length的字节存入var3:

计算var2的消息摘要:

取消息摘要的前16位与var3对比,相等则执行do_decrypt()解密操作:

然后读出数组的长度,跟进长度申请空间,再存入空间并返回:

接着后面读取c2配置文件的规则信息user-agent、sleep间隔、dns配置等:

注意:这里传入RSA的pubKey,用后续AES密钥传递通信:

把信息传入beacon_obfuscate()进行异或处理后,回填到解密后内容的"AAAABBBBCCCCDDDDEEEEFFFF"的位置,并返回:

返回后的内容传入process(),里面有前后两个处理pe文件的方法:

先跟进pre_process(),首先调用string()方法,传入pe内容即var1:

跟入string(),函数主要是读取默认配置文件default.profile里面的stage内容:

再获取配置文件stage标签里的image_size、entrypoint等基本信息,再进行设置:

跟入post_process(),主要判断生成的Beacon位数,然后修改其里面的DOS头,作为RDI调用:

硬编码修改DOS头,其中var1为需要跳转执行方法的位置:

返回修改好的内容,至此export()方法执行完毕,后续根据是否生成x64位程序和是否为.exe\.dll去修改。

跟入patchArtifact():

再跟入_patchArtifact():

可见后面所调用的方法作用均与上面stager一致,不再赘述。

谢谢大家观看,祝大家新春快乐。

魔改CobaltStrike:二开及后门生成分析相关推荐

  1. 解忧云SMS短信服务平台系统 短信发送系统源码 全解密随时可以二开无后门

    解忧云SMS短信服务平台系统 短信发送系统 全解密完美版 经过一系列修复现在程序已经可以完全使用. 并且是全解密随时可以二开.无后门. 一些bug已经完全修复 安装教程 数据库配置文件路径 .env ...

  2. 蚁剑从入门到魔改【二】· 编解码器原理及改造

    蚁剑编解码器原理 蚁剑编解码器原理 一.编码器 编码器修改 二.解码器 蚁剑编解码器原理 编码器:对发送流量进行编码,服务端进行解码 解码器:对服务端对返回的流量进行解码 一.编码器 输入三个参数 p ...

  3. CobaltStrike魔改与增强

    文章为匿名投稿,该文章仅限提供思路,具体实现请自行研究使用. 文章内用到的代码源码 详见末尾 由于传播.利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,文章作者不为此承担 ...

  4. RiPro9.0免扩展二开版,RiPro主题全解密无后门

    RiPro9.0免扩展二开版,RiPro主题全解密无后门,这次分享的源码包内的东西不少 不仅含有RiPro主题.子主题,还有几款插件,都是非常实用的东西!下面我将逐一介绍一下. 1.ripro主题:本 ...

  5. 二开CRMEB v4.4.2修复改价后退款金额还是未改价之前的价格问题

    二开CRMEB v4.4.2修复改价后退款金额还是未改价之前的价格问题 直接替换更新这个文件就好了 app/services/order/StoreOrderRefundServices.php &l ...

  6. 二开微信表情包小程序魔改版源码

    简介: 二开微信表情包小程序魔改版源码内附图文安装教程 源码包括俩个版本,一个之前发过黄色版本,一个是二开魔改版. 安装搭建就不说了,源码内打包好了 网盘下载地址: http://kekewl.cc/ ...

  7. WP模板Ripro9.0免扩展二开版+全解密无后门

    正文: RiPro9.0免扩展二开版,RiPro主题全解密无后门,这次分享的源码包内的东西不少 不仅含有RiPro主题.子主题,还有几款插件,都是非常实用的东西!下面我将逐一介绍一下. 1.ripro ...

  8. 2023 在线截图生成工具多功能系统html源码 可二开

    源码项目全部开源,支持电脑和手机端在线制作生成!该源码可直接上传虚拟空间解压缩即可访问,搭建操作简单方便!源码为html,可二开! 工具功能介绍: 在线一键制作各种截图生成,包含生成功能:微信对话.微 ...

  9. 文本生成魔改方案汇总!

    文 | 三和厂妹 编 | zenRRan 文本生成是NLP中较难的点,应用场景多且广泛.本篇笔记录一下文本生成的应用场景和主流方案,主要是基础的学习汇总和解决方案的梳理,相关学习资料在文中有链接或者文 ...

最新文章

  1. Android内存分析和调优
  2. HBase 0.94.21 zookeeper-3.4.6 分布式安装
  3. 今天在海淀黄庄地铁站真实经历 写下来希望我的好友可以看一下!
  4. 费马大定理,集惊险与武侠于一体
  5. lda 协方差矩阵_数据降维算法总结(LDAamp;PCA)
  6. 【纪念】我的大学同学名单
  7. VBA基础知识———常用语句
  8. 用最简单的例子告诉你kafka是怎么用的
  9. Pannellum:实例之在部分视角内展示全景图
  10. 我需要一个媒体服务器来进行一对多的WebRTC广播吗?
  11. 模糊集合及运算1.4
  12. 悠悠web(1)-HTML基本结构
  13. (二)Semi-supervised(半监督学习)李宏毅
  14. 母牛的故事——无脑模拟解法
  15. 安卓市场ASO排名优化机制分析,安卓市场的aso优化
  16. 【MyBatis】mybatis分页插件
  17. 拼多多免单券怎么领取 拼多多免单券是真的吗
  18. 【工业相机】【深度3】相机选择-精度和曝光需求计算 - 输入:1 被测试物体的最小体积 2 被测物体的移动相对速度
  19. HCIP高级网络知识整理(十分详细)
  20. 计算机动画整个的发展历史,计算机三维动画概念及发展历史

热门文章

  1. 44.1KHz的PCM数据转为8K的PCM
  2. Nvidia显卡硬件编解码能力表 官方链接
  3. PMP考试结果查询网站
  4. 采访华为公司副总裁郭海卫
  5. plt自定义主要刻度值和次要刻度值
  6. 存储随笔《NVMe专题》大合集
  7. 彩虹易支付2020全解无后源码
  8. 分享java写的电驴下载完成关机小程序
  9. EasyPlayer.js开发Web H5网页播放H.265视频播放支持FLV与HLS直播与点播的过程
  10. VNPY 软件架构分析