借助jclasslib与javassist修改java+class字节码
更新时间:2024-04-19 18:54:01 阅读量: 综合文库 文档下载
有时候,我们在没有java源程序的情况下,想改变.CLASS文件的部分内容输出或者改变跳转流,怎么办呢?
介绍2个java hacker的工具javassist 以及jclasslib。
下载javassist-3.1RC2和jclasslib_windows_3_0。
解压后,将2个JAR 加入classpath内。
jclasslib_windows_3_0.exe在JAVA_HOME/lib下安装
原文件HelloWorld.java
package com.unmi;
public class HelloWorld {
public static void main(String[] args) {
System.out.println(\
} }
想修改输出的”hello world”,用jclasslib.exe 检测可以看到
属于常量池的23。 如下代码就针对23 做调整。
package com.unmi;
import javassist.ClassPool; import javassist.CtClass; import javassist.CtMethod;
import java.io.*;
import org.gjt.jclasslib.io.ClassFileWriter; import org.gjt.jclasslib.structures.CPInfo; import org.gjt.jclasslib.structures.ClassFile;
import org.gjt.jclasslib.structures.constants.ConstantStringInfo; import org.gjt.jclasslib.structures.constants.ConstantUtf8Info;
public class JclasslibTest {
public static void main(String[] args) throws Exception { {
String filePath = \ FileInputStream fis = new FileInputStream( filePath);
DataInput di = new DataInputStream(fis); ClassFile cf = new ClassFile(); cf.read(di);
CPInfo[] infos = cf.getConstantPool();
int count = infos.length; for (int i = 0; i < count; i++) { if (infos[i] != null) { System.out.print(i); System.out.print(\
System.out.print(infos[i].getVerbose()); System.out.print(\
System.out.println(infos[i].getTagVerbose()); if(i == 23){
ConstantUtf8Info uInfo = (ConstantUtf8Info)infos[i]; uInfo.setString(\
} } }
cf.setConstantPool(infos); fis.close();
File f = new File(filePath + \ ClassFileWriter.writeToFile(f, cf); } } }
D:\\java_proj>javac -cp %CLASSPATH%;. com/unmi/JclasslibTest.java
D:\\java_proj>java com.unmi.JclasslibTest 1 = com/unmi/HelloWorld = CONSTANT_Class_info
2 = com/unmi/HelloWorld = CONSTANT_Utf8_info 3 = java/lang/Object = CONSTANT_Class_info 4 = java/lang/Object = CONSTANT_Utf8_info 5 =
8 = java/lang/Object.
13 = Lcom/unmi/HelloWorld; = CONSTANT_Utf8_info 14 = main = CONSTANT_Utf8_info
15 = ([Ljava/lang/String;)V = CONSTANT_Utf8_info 16 = java/lang/System.out = CONSTANT_Fieldref_info 17 = java/lang/System = CONSTANT_Class_info 18 = java/lang/System = CONSTANT_Utf8_info
19 = outLjava/io/PrintStream; = CONSTANT_NameAndType_info 20 = out = CONSTANT_Utf8_info
21 = Ljava/io/PrintStream; = CONSTANT_Utf8_info 22 = Hello,gorld! = CONSTANT_String_info 23 = Hello,gorld! = CONSTANT_Utf8_info
24 = java/io/PrintStream.println = CONSTANT_Methodref_info 25 = java/io/PrintStream = CONSTANT_Class_info 26 = java/io/PrintStream = CONSTANT_Utf8_info
27 = println(Ljava/lang/String;)V = CONSTANT_NameAndType_info 28 = println = CONSTANT_Utf8_info
29 = (Ljava/lang/String;)V = CONSTANT_Utf8_info 30 = args = CONSTANT_Utf8_info
31 = [Ljava/lang/String; = CONSTANT_Utf8_info 32 = SourceFile = CONSTANT_Utf8_info 33 = HelloWorld.java = CONSTANT_Utf8_info
更改生成的HelloWorld.classc 为HelloWorld.class
执行输出为
D:\\java_proj>java com.unmi.HelloWorld china alibaba inc.com
另外,也可以修改if 语句跳转
Jclasslib 观测到jvm op code 如下
现在想更改>= 为<,怎么办? 查询Opcode Mnemonics by Opcode
http://java.sun.com/docs/books/jvms/second_edition/html/Mnemonics.doc.html 并查到 >= 的操作码为 0xA1
正在阅读:
借助jclasslib与javassist修改java+class字节码04-19
法制与法治之我见 412-07
计调操作技巧(旅行社计调培训)08-29
士别三日(典故、出处、释读)06-08
校内文摘101-31
施工组织设计11-04
《马克思主义基本原理概论》练习题05-05
- 高一物理牛顿运动定律全套学习学案
- 水处理一级反渗透加还原剂亚硫酸氢钠后为什么ORP会升高
- 毕业设计(论文)-正文董家口 - 图文
- 荣盛酒店经营管理公司录用通知及入职承诺书II
- 第二讲 大学英语四级快速阅读技巧
- 质量管理体系文件(2015年委托第三方医药物流配送企业专用版本)
- 214071收款办法
- 苏轼对《文选》选文的评价
- 《诊断学基础B》1-8作业
- 广东省东莞市高一数学下学期期末教学质量检查试题
- 海南电网公司VIS推广应用管理办法
- 红星照耀中国习题
- 苏教版小学语文六年级上册期末复习资料之生字词整理
- 局域网组建与应用—王向东
- 税务稽查内部管理文书样式
- 环保社会实践调查表
- 九年级思品第一单元复习
- 2016年全国注册咨询工程师继续教育公路路线设计规范试卷
- 毕业设计-青岛港董家口港区防波堤设计
- 撞背锻炼方法与益处
- 字节
- 借助
- jclasslib
- javassist
- 修改
- class
- java
- 气相色谱-质谱(GC-MS)法对苯系物的分离分析
- 利用Matlab绘制系统的根轨迹
- 广州新版小学六年级英语上册unit6the secret to good health 复
- Windows7 OPC DCOM配置 - 图文
- 蓄水安全鉴定设计自检工作报告(定)
- 离体小肠平滑肌的生理特性及药物作用的观察
- 银行反假币宣传活动总结
- 外国史
- 《钢结构》网上在线测试02
- 云南省人民政府关于印发云南省事业单位工作人员收入分配制度改革
- 重庆西部新城
- 数学文化作业答案(全正确答案) - 图文
- K0+182拆除扣轨施工方案 - 图文
- 浅谈中国现代文学中的婚姻观
- 塔吊拆除工作联系单
- 专题学习--有理数的简便运算
- 2018届上海市各区高三英语一模试题汇编:阅读理解A篇(带答案已
- 实验二
- 楚河楚林水利枢纽设计-设计说明书 水利工程专业毕业设计 毕业论
- 管槽线缆容量对照表