标签搜索

目 录CONTENT

文章目录

『聚合』 浅看BCEL字节码

沙漠渔
2024-04-02 03:35:41 / 0 评论 / 0 点赞 / 104 阅读 / 1,411 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2024-04-02,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

什么是BCEL

BCEL是位于sun包下的一个项目,是属于Apache Common的一个子项目

BCEL-LoadClass分析

demo

package org.example;

import com.sun.org.apache.bcel.internal.Repository;
import com.sun.org.apache.bcel.internal.classfile.JavaClass;
import com.sun.org.apache.bcel.internal.classfile.Utility;
import com.sun.org.apache.bcel.internal.util.ClassLoader;
import java.io.IOException;


public class Main {
    public static void main(String[] args) throws IOException, ClassNotFoundException, InstantiationException, IllegalAccessException {
        JavaClass javaClass = Repository.lookupClass(calc.class);
        String code = Utility.encode(javaClass.getBytes(), true);
        System.out.println(code);
        new ClassLoader().loadClass("$$BCEL$$"+code).newInstance();
    }
}
package org.example;

import java.io.IOException;

public class calc {
    static {
        try {
            Runtime.getRuntime().exec("calc");
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
}

运行即可弹出计算器

流程分析

打个断点进入loadClass,注意这里单步调试是进不去我们要看的ClassLoader的,我们先打个断点,然后手动进去我们要看的com.sun.org.apache.bcel.internal.util.ClassLoader这个,然后在里面打个断点,运行即可

进去后,这里会判断头是否是$$BCEL$$,是的话进入createClass

这里对我们的code进行解密,退出返回上一层,进入defineClass
打进去一看,是原生的defineClass,定义了我们的恶意类,然后newInstance的时候弹计算器
就这么点?下篇研究下BCEL内存马

结尾

BCEL字节码可以结合其它进行利用,例如fastjson


⚠ 文章源地址: https://www.cnblogs.com/F12-blog/p/18108982.html 转载请注明出处
0
广告 广告

评论区