借助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
Win7下使用U盘安装CentOS全过程(很详细) - 图文10-17
计调操作技巧(旅行社计调培训)08-29
刘汉盛榜单100碟(个人整理版)01-28
《马克思主义基本原理概论》练习题05-05
发电机保护及自动装置设计 毕业设计05-28
水土保持对水利可持续发展重要作用探04-06
我会骑自行车作文400字07-05
好玩的套圈游戏作文600字07-12
- 天大砼方案 - 图文
- 农业科技网络书屋能力提升_玉米错题选
- DNS习题
- 浅议检察官对罪犯谈话的技巧与效果
- 高考语文文言文翻译专题训练
- AB类学科竞赛目录(2015)
- 建筑面积计算新规定(2015最新)
- Revit2012初级工程师题集一
- 十三五项目米线可行性报告
- 2013体育学院党组织建设工作总结
- 2014Revit工程师题库
- 高中数学如何实施研究性学习
- 茶艺表演 中英互译
- 小学音乐湘文艺版 四年级下册 第十一课《(歌表演)脚印》优质课公
- 山西省农村合作经济承包合同管理条例
- 2015年镇江市中考化学一模试题参考答案及评分标准(定稿)
- 统计 题集
- 批评意见清单
- 8潞安集团蒲县黑龙关煤矿矿业公司2
- 鄂教版四年级语文上册复习精要(光谷四小)
- 字节
- 借助
- jclasslib
- javassist
- 修改
- class
- java
- 气相色谱-质谱(GC-MS)法对苯系物的分离分析
- 利用Matlab绘制系统的根轨迹
- 广州新版小学六年级英语上册unit6the secret to good health 复
- Windows7 OPC DCOM配置 - 图文
- 蓄水安全鉴定设计自检工作报告(定)
- 离体小肠平滑肌的生理特性及药物作用的观察
- 银行反假币宣传活动总结
- 外国史
- 《钢结构》网上在线测试02
- 云南省人民政府关于印发云南省事业单位工作人员收入分配制度改革
- 重庆西部新城
- 数学文化作业答案(全正确答案) - 图文
- K0+182拆除扣轨施工方案 - 图文
- 浅谈中国现代文学中的婚姻观
- 塔吊拆除工作联系单
- 专题学习--有理数的简便运算
- 2018届上海市各区高三英语一模试题汇编:阅读理解A篇(带答案已
- 实验二
- 楚河楚林水利枢纽设计-设计说明书 水利工程专业毕业设计 毕业论
- 管槽线缆容量对照表