首页 > 其他分享 >浅看BCEL字节码

浅看BCEL字节码

时间:2024-04-01 17:34:49浏览次数:24  
标签:字节 BCEL sun bcel import apache org

什么是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

标签:字节,BCEL,sun,bcel,import,apache,org
From: https://www.cnblogs.com/F12-blog/p/18108982

相关文章

  • MegaScale:字节万卡集群
    随着训练集群扩展到超过数万个GPU,软件和硬件故障几乎不可避免。字节引入了一个健壮的训练框架,实现了自动故障识别和快速恢复,在最少的人为干预下实现了容错,并且对正在进行的训练任务的影响可以忽略不计。1.训练流程分配资源:在接收到提交的训练任务后,driver进程会与自定义的K......
  • 面了字节 NLP 算法工程师(含大模型方向),跪了。。。
    节前,我们星球组织了一场算法岗技术&面试讨论会,邀请了一些互联网大厂朋友、参加社招和校招面试的同学,针对算法岗技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何准备、面试常考点分享等热门话题进行了深入的讨论。汇总合集:《大模型面试宝典》(2024版)发布!......
  • Qt 大小端字节序转换的方法
    在Qt中,可以使用qToLittleEndian和qToBigEndian两个函数来实现大小端字节序之间的转换。1.转换为小端字节序:1quint32num=0x12345678;2quint32littleEndianNum=qToLittleEndian(num);//转换为小端字节序2.转换为大端字节序:1quint32num=0x12345678;2quint......
  • Qt QByteArray中存储的字节顺序转换
    在QByteArray中,可以使用Qt的函数来实现字节顺序的转换。具体而言,可以使用 qFromBigEndian 和 qFromLittleEndian 函数将大端和小端字节顺序的数据转换为主机字节顺序的数据。同样地,可以使用 qToBigEndian 和 qToLittleEndian 函数将主机字节顺序的数据转换为大端......
  • Modbus通讯协议中的四种字节顺序
    国内设备基本上是ABCD顺序,国外设备基本上是BADC顺序。低位优先字节交换。使用两个寄存器。使用IEEE754规范,如显示不正常可进行字节顺序交换位置即可。如下:FloatBig-endian字节顺序:ABCDFloatLittle-endian字节顺序:DCBAFloatBig-endianbyteswap......
  • Siemens 西门子 PLC Modbus写入float字节排列
    写保存寄存器功能码16示意:在西门子PLC中,实数,float,的保存方式遵循“高字节低地址,低字节高地址”的方式。假设使用16功能码向PLC的40005写入一个float,先利用BitConverter.GetBytes(f)得到要写的float的byte[]A。根据PLC中的存储方式,要想获得正确的float,在字40005的低......
  • java实现字节数组转int(采用IEEE 754标准)
    /***字节数组转int*采用IEEE754标准**@parambytes*@returnfloat*/publicintbytesToInt(byte[]bytes){//获取字节数组转化成的2进制字符串StringbinaryStr=bytesToBinaryStr(bytes);//符号位......
  • 从字节码的角度看 python swap
    从字节码的角度看pythonswap背景从一道算法题开始:反转链表classListNode:def__init__(self,v)->None:self.val=vself.next=Nonedefadd_next(self,v):new_node=ListNode(v)self.next=new_noderetur......
  • 字节跳动面试面经
    面试方向岗位是后端开发实习生——番茄小说。职位JD没写什么,想要准备还得是广撒网。我当时的基本情况正在一个技术岗位实习,一个微服务项目,为了提升自己,在在线简历上面写了一个自己简单玩玩的ORM框架,手里就只有这些筹码。面经部分自我介绍这是个基本流程了。本人第一次面试大......
  • 【Web】随便聊聊应用ASM CoreAPI修改字节码那些事
    目录前言ASM概念Java字节码&ClassFile核心理念:拆分修改重组修改字节码最简化模型代码示例ASM修改类的基本信息ASM修改类的字段ASM修改类的方法常规实现AdviceAdapter实现前言本文速通下ASM最最萌新直观的部分,理解浅薄,纯小白文pom依赖<dependencies><depe......