`
leihongtai2010
  • 浏览: 14614 次
  • 性别: 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程序时不可或缺的辅助软件。这类工具能够将已编译的.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、...

    反编译工具jdgui.zip

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

    反编译YingJAD.rar

    本文将深入探讨反编译的概念,并以“YingJAD”这个工具作为实例,来解析反编译过程及其应用。 首先,我们来理解什么是编译。编译是将程序员用高级语言编写的源代码转换为机器可以理解的二进制代码(机器码)的过程...

    反编译总结.rar

    1. **dex2jar**:这是一个将.dex文件转换为.jar文件的工具,便于使用Java反编译器进行进一步处理。 2. **JD-GUI** 或 **ProGuard**:这两个是常用的Java反编译器,可以将.jar文件反编译为Java源代码。 3. **Apktool*...

Global site tag (gtag.js) - Google Analytics