`
leihongtai2010
  • 浏览: 14319 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

一个简单的Java反编译实例

阅读更多
1、目标对象
package com.leiht.reflect.decompile;

public class Entity {
	public void method1() {
		System.out.println("-------------Method1-----------");
	}
	public void method2(String str) {
		System.out.println("-------------Method2-----------" + str);
	}
}


2、反编译实现类
package com.leiht.reflect.decompile;

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

public class ClassLoaderExpand extends ClassLoader {
	
	public Class<?> getClass(String classFileName, String className) {
		byte[] data = loadClassData(classFileName);
		Class<?> clazz = this.defineClass(className, data, 0, data.length);
	    return clazz;
	}
	
	/*
	 * 读取xxxx.clsss文件为byte[]数组
	 */
	private byte[] loadClassData(String classFileName) {
		
		FileInputStream fis = null;
		byte[] result = null;
		ByteArrayOutputStream bos = null;
		try{
			fis = new FileInputStream(new File(classFileName));
			bos = new ByteArrayOutputStream();
			int i;
			while((i = fis.read()) != -1) {
				bos.write(i);
			}
			result = bos.toByteArray();
		}catch(Exception e) {
			e.printStackTrace();
		}finally {
			if(fis != null) {
				try {
					fis.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
			if(bos != null) {
				try {
					bos.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
		
		return result;
	}
}


3、测试类
package com.leiht.reflect.decompile;

import java.lang.reflect.Method;

public class ClassLoaderExpandTest {
	public static void main(String[] args) throws Exception {
		ClassLoaderExpand cle = new ClassLoaderExpand();

		String classFileName = "D:\\J2SEProject\\Reflect\\bin\\com\\leiht\\reflect\\decompile\\Entity.class";
		
		//测试了一下,不传这个className也没问题
		String className = "com.leiht.reflect.decompile.Entity";
		
		Class<?> clazz = cle.getClass(classFileName, className);
		
		System.out.println(clazz);
		
		Method method1 = clazz.getMethod("method1");
		Method method2 = clazz.getMethod("method2", String.class);
		
		method1.invoke(clazz.newInstance());
		method2.invoke(clazz.newInstance(), "雷洪太");
	}
}
分享到:
评论
1 楼 longhua2003 2015-11-18  

相关推荐

    JAVA上百实例源码以及开源项目源代码

     Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多的网络程序,这是最基础的部分。 递归遍历矩阵 1个目标文件,简单! 多人聊天室 3...

    安卓反编译dex文件格式实例分析

    第一部分:创造一个可供分析的 Hello.dex 1. 测试环境 2. java 源码和编译方法 3. 使用 ADB 运行测试 4. 重要说明第二部分:分析过程 1. dex 整个文件的布局 2. header 3. string_ids 4. type_ids 5. proto_ids 6. ...

    JAVA上百实例源码以及开源项目

     Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多的网络程序,这是最基础的部分。 递归遍历矩阵 1个目标文件,简单! 多人聊天室 3...

    hadoop-mapreduce-examples-2.8.4.src反编译后java代码

    hadoop-mapreduce-examples-2.8.4.src反编译后hadoop实例源码(java),另外一些hadoop下的一些环境变量,下载这个的小伙伴如果需要的话可以在下方留言,我会分享一下。

    Java反编译工具实用版

    面向对象的基础核心知识点之一,是日后学习JavaEE,JavaME的必备知识;注重基础的代码实例讲解, 让你轻松的学习Java基础知识,为以后学习铺平道路,打好基础;万丈高楼平地起,希望能帮助你!

    JAVA安全性编程实例.doc及源码

    内容涉及Java加密和解密,反编译和反反编译,对类、成员变量、方法的攻击和保护,消息摘要,消息验证码,数字签名,口令保护,数字证书和证书链的生成、签发、检验和维护,SSL和HTTPS客户及服务器程序、基于代码位置...

    java范例开发大全

    实例1 开发第一个Java程序 7 第2章 Java基础类型与运算符(教学视频:39分钟) 9 2.1 基础类型 9 实例2 自动提升 9 实例3 自动转换 10 实例4 常用基础类型之强制转换 11 2.2 运算符 12 实例5 算术运算符 12 实例6 ...

    Java学习代码实例 JAVA基础.rar

    3、将.class文件拖入idea即可实现反编译。 4、static可以用来修饰类的成员方法、类的成员变量被static关键字修饰的方法或者变量不需要依赖于对象来进行访问。在静态方法中不能访问类的非静态成员变量和非静态成员...

    <Java安全性编程实例>书和代码

    &lt;Java安全性编程实例&gt;书和代码,内容涉及Java加密和解密,反编译和反反编译,对类、成员变量、方法的攻击和保护,消息摘要,消息验证码,数字签名,口令保护,数字证书和证书链的生成、签发、检验和维护,SSL和HTTPS...

    java范例开发大全源代码

     实例1 开发第一个Java程序 7  第2章 Java基础类型与运算符(教学视频:39分钟) 9  2.1 基础类型 9  实例2 自动提升 9  实例3 自动转换 10  实例4 常用基础类型之强制转换 11  2.2 运算符 12 ...

    Java范例开发大全(全书源程序)

    实例1 开发第一个Java程序 7 第2章 Java基础类型与运算符 实例2 自动提升 9 实例3 自动转换 10 实例4 常用基础类型之强制转换 11 2.2 运算符 12 实例5 算术运算符 12 实例6 关系运算符 13 实例7 逻辑...

    Java范例开发大全 (源程序)

     实例1 开发第一个Java程序 7  第2章 Java基础类型与运算符(教学视频:39分钟) 9  2.1 基础类型 9  实例2 自动提升 9  实例3 自动转换 10  实例4 常用基础类型之强制转换 11  2.2 运算符 12  实例5...

    java范例开发大全(pdf&源码)

    实例1 开发第一个Java程序 7 第2章 Java基础类型与运算符(教学视频:39分钟) 9 2.1 基础类型 9 实例2 自动提升 9 实例3 自动转换 10 实例4 常用基础类型之强制转换 11 2.2 运算符 12 实例5 算术运算符 12 实例6 ...

    Java安全性编程实例(徐迎晓)

    # 编写了一个Java Applet,如何让其能访问硬盘上的文件? # 主要内容 # 本章介绍基于代码来源的程序的安全运行,可以基于运行时代码在哪个URL、或代码是谁签名的限制其可以访问哪些用户资源。还介绍了定义自己的...

    java开源包6

    SimpleCache 是一个简单易用的java缓存工具,用来简化缓存代码的编写,让你摆脱单调乏味的重复工作!1. 完全透明的缓存支持,对业务代码零侵入 2. 支持使用Redis和Memcached作为后端缓存。3. 支持缓存数据分区规则的...

    java开源包9

    SimpleCache 是一个简单易用的java缓存工具,用来简化缓存代码的编写,让你摆脱单调乏味的重复工作!1. 完全透明的缓存支持,对业务代码零侵入 2. 支持使用Redis和Memcached作为后端缓存。3. 支持缓存数据分区规则的...

    java开源包11

    SimpleCache 是一个简单易用的java缓存工具,用来简化缓存代码的编写,让你摆脱单调乏味的重复工作!1. 完全透明的缓存支持,对业务代码零侵入 2. 支持使用Redis和Memcached作为后端缓存。3. 支持缓存数据分区规则的...

    java开源包4

    SimpleCache 是一个简单易用的java缓存工具,用来简化缓存代码的编写,让你摆脱单调乏味的重复工作!1. 完全透明的缓存支持,对业务代码零侵入 2. 支持使用Redis和Memcached作为后端缓存。3. 支持缓存数据分区规则的...

Global site tag (gtag.js) - Google Analytics