`
leihongtai2010
  • 浏览: 15045 次
  • 性别: 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程序

    综合来看,《反编译Java程序》为Java学习者提供了一个深入学习和实践的平台。书中丰富的实例、清晰的指导和全面的知识,能够帮助读者更深入地理解Java程序,提高反编译技能,并最终在软件开发领域取得进步。无论你是...

    Java反编译工具

    Java反编译工具是开发者和逆向工程人员在理解和学习Java程序时不可或缺的辅助软件。这类工具能够将已编译的.class文件还原成可读性强的.java源代码,便于我们查看、学习或调试代码,尤其是在没有原始源码的情况下。...

    Java 反编译工具

    尽管XJad2.2可能是一个较老的版本,但它仍然是Java反编译领域的一个实例,展示了这个领域的历史和发展。对于现代开发需求,我们通常推荐使用更新、更强大的反编译工具,以获得最佳的源代码恢复质量和兼容性。

    小工具 java反编译工具

    标题中的“小工具 java反编译工具”可能是指一个轻量级的、易于操作的Java反编译解决方案。这类工具通常设计简洁,旨在为用户提供快速查看Java字节码源代码的功能,而无需复杂的配置或安装过程。 描述中的“单机...

    java反编译软件

    Java反编译软件是用于将已编译的Java字节码(.class文件)转换回源代码的工具。这种工具在多种场景下非常有用,比如分析开源项目、逆向工程、学习他人的编程技巧或者在丢失源代码的情况下恢复部分功能。在Java世界中,...

    java中的jam反编译虚拟机

    JAM反编译器,全称Java Assembler and Disassembler,是Java反编译领域的一个实例。它提供了对Java字节码的解析能力,使得开发者能够看到原本不可见的源代码结构。这对于学习、调试和分析已有的Java库或应用程序非常...

    java反编译工具jd-gui

    JD-GUI是一个强大的Java反编译工具,它以其高成功率和用户友好的界面而受到开发者的青睐。在本文中,我们将深入探讨Java反编译的基本概念、JD-GUI的特性以及如何使用它来反编译Java类文件。 1. Java反编译基础 - ...

    java反编译软件(可反编译.class文件)

    总之,Java反编译软件是开发者工具箱中的一个重要组成部分,它能帮助我们洞察和学习Java字节码,但使用时应谨慎并遵循相应的法规。XJad作为早期的反编译工具,尽管可能不适用于现代Java项目,但它代表了反编译技术的...

    反编译工具.zip (java 反编译工具.zip)

    标题中的“反编译工具.zip (java 反编译工具.zip)”表明这是一个包含Java反编译工具的压缩文件。在Java编程中,反编译工具是用于将已编译的.class文件转换回可读的源代码(.java文件)的程序。这在调试、学习已封装...

    jd-gui java反编译工具

    Java反编译工具JD-GUI是一款专为Java开发者设计的强大工具,它允许用户查看和分析已编译的Java字节码,将.class文件转换回可读的源代码形式。这对于理解第三方库的工作原理、调试混淆过的代码或者在没有源代码的情况...

    jd-jui.exe java反编译工具

    "jd-jui.exe" 是一个专门用于Java反编译的工具,它提供了一个图形用户界面(GUI),使得用户可以方便地查看和理解编译后的Java类文件。 Java反编译工具有多种,例如JD-GUI和JD-Core,它们的工作原理是解析.class...

    java反编译

    Java反编译是Java开发中一个重要的技术环节,它允许开发者查看Java字节码(.class文件)的源代码,即使原始的.java文件已丢失或不在手边。这对于理解库函数的工作原理、学习他人代码、调试和逆向工程等场景非常有用...

    class反编译.7z

    标题中提到的"class反编译"可能是指这类工具的一个实例,尽管具体工具的细节未提供,我们可以假设它是一款易于使用的Java反编译软件。 JD-GUI是一个直观的图形用户界面工具,可以直接打开并显示类文件的源代码。它...

    Jar包反编译工具

    这里提到了一个名为"jd-gui-0.3.5.windows"的文件,这很可能是JD-GUI的一个特定版本,一个常用的Java反编译工具。JD-GUI提供了一个图形用户界面,允许开发者直接打开.jar文件,查看其中的源代码,而无需进行复杂的...

    Java反编译工具步骤下载

    Java反编译是将已编译的Java字节码转换回源代码的过程,这对于学习、调试或逆向工程目的非常有用。在这个主题中,我们将深入探讨Java反编译工具的使用,以及如何下载和操作这些工具。 首先,我们关注的是"jad.exe...

    Java反编译工具实用版

    Java反编译工具是开发者在探索和学习Java代码时常用的一种辅助工具,它能够将已编译的字节码文件(.class)转换回源代码(.java),这对于理解他人的代码、研究库的内部实现或者逆向工程具有重要作用。在Java编程中...

    220个JAVA初学者实例

    下面我们将详细探讨Java初学者在220个实例中可能会遇到的知识点。 1. **基础语法**:包括变量声明、数据类型(如整型、浮点型、字符型、布尔型)、运算符(算术、比较、逻辑、位操作等)、流程控制(如if-else、...

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

    首先,我们创建一个简单的Java类`Hello.java`,内容如下: ```java public class Hello { public static void main(String[] argc) { System.out.println("Hello, Android!"); } } ``` 接着,我们需要将这个...

    反编译工具jdgui.zip

    - Procyon:一个开源的Java反编译和反汇编器,提供更高质量的反编译结果。 6. **进阶使用**: - 集成开发环境(IDE)插件:jd-gui可以与其他IDE(如Eclipse或IntelliJ IDEA)集成,提供更无缝的反编译体验。 - ...

Global site tag (gtag.js) - Google Analytics