`

修改jar包里面的class的包名

 
阅读更多
参考文章
http://blog.csdn.net/hexin373/article/details/6669813

工具
http://www.ej-technologies.com/products/jclasslib/overview.html

修改class文件的代码
package com.kaka.modify;

import java.io.DataInput;
import java.io.DataInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.ArrayList;

import org.gjt.jclasslib.io.ClassFileWriter;
import org.gjt.jclasslib.structures.CPInfo;
import org.gjt.jclasslib.structures.ClassFile;
import org.gjt.jclasslib.structures.InvalidByteCodeException;
import org.gjt.jclasslib.structures.constants.ConstantUtf8Info;

public class Test {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		ArrayList<String>  list = refreshFileList
			("E:\\javaDev\\反编译工程\\miidicredit_android_2_1_5\\net\\miidi\\credit\\view\\a");
		for (int i = 0; i < list.size(); i++) {
			modify(list.get(i));
		}
            
	}
	
	private static void modify(String filePath){
		FileInputStream fis;
		try {
			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("|");     
	                // 名
	                String str = infos[i].getVerbose();
	                System.out.print(str);     
	                System.out.print("|");
	                // 类型
	                System.out.println(infos[i].getTagVerbose());     
	                if(str!=null && str.length()>0){    
	                	if(infos[i] instanceof ConstantUtf8Info){
		                	ConstantUtf8Info uInfo = (ConstantUtf8Info)infos[i]; 
		                    if(str.contains("/miidi/")){
			                    String str1 = str.replaceAll("/miidi/","/angela/");
			                    uInfo.setString(str1);    
			                    infos[i]=uInfo; 
		                    }
	                	}
	                }     
	            }     
	        }     
	        cf.setConstantPool(infos);     
	        fis.close();     
	        File f = new File(filePath);     
	        ClassFileWriter.writeToFile(f, cf);  
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (InvalidByteCodeException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} 
	}

	private static ArrayList<String> refreshFileList(String strPath) { 
		ArrayList<String> filelist = new ArrayList<String>(); 
        File dir = new File(strPath); 
        File[] files = dir.listFiles(); 
        if (files == null) 
            return null; 
        for (int i = 0; i < files.length; i++) { 
            if (files[i].isDirectory()) { 
                refreshFileList(files[i].getAbsolutePath()); 
            } else { 
                String strFileName = files[i].getAbsolutePath();//.toLowerCase();
                System.out.println("---"+strFileName);
                filelist.add(files[i].getAbsolutePath());              
            } 
        } 
        return filelist;
    }
}
分享到:
评论

相关推荐

    jclasslib修改jar包里面的class文件包含jar

    `jclasslib`是一款强大的反编译器和字节码查看器,它允许开发者查看并修改JAR文件中的`.class`文件。这篇文章将深入探讨如何使用`jclasslib`来操作包含其他JAR的复杂项目。 首先,了解`jclasslib`的基本功能。它...

    修改Jar包工具

    标题提到的"修改Jar包工具"是指在遇到代码冲突或需要定制化某些功能时,我们需要对已封装好的JAR文件进行编辑。描述中提到的情况,即在导入JAR包后发现代码冲突,这可能是由于不同库之间的类名、方法名重复或者版本...

    修改jar内容

    当我们需要修改JAR中的代码时,先使用baksmali将JAR中的.class文件反汇编成Smali代码,这样我们就可以在文本编辑器中查看和修改这些代码了。 1. 使用`baksmali`反汇编:首先,解压`baksmali-2.0.3.jar`,然后在...

    itext7jar包

    **IText7.jar包详解** IText7是一个广泛使用的Java库,主要用于创建、修改和处理PDF文档。这个jar包集合提供了全面的API,使得开发者能够高效地进行PDF文档的编程操作,无需深入理解PDF格式的复杂性。在项目中直接...

    Log4j jar包及其配置方法

    这个压缩包"Log4j及其配置.rar"包含了Log4j的jar包(log4j-1.2.15.jar)以及相关的配置文档,旨在帮助开发者理解和使用Log4j。 一、Log4j介绍 Log4j是Apache软件基金会的一个开源项目,最初由Ceki Gülcü创建。它...

    springboot编译jar包后无法扫描子jar包中的注解解决方法

    ### Spring Boot 编译 JAR 包后无法扫描子 JAR 包中的注解解决方案 在使用Spring Boot进行项目开发时,我们经常会遇到模块化的需求,即一个大型项目被拆分成多个子模块来提高可维护性和灵活性。这些子模块可能通过...

    如何在netbeans下把java工程打包成jar包

    这样就在项目目录下新产生一个目录store,里面就是可以包含外部JAR包的完整的JAR文件。 最后,如果要运行它,可以在DOS环境下输入`java -jar *.jar`命令;或者为了方便,可以建立一个.bat批处理文件。 使用...

    自己写了个java反编译脚本,可以很方便的将jar包反编译

    Java反编译是将已编译的Java字节码(.class文件)转换回源代码的过程,这在软件开发、逆向工程或学习他人代码时非常有用。标题提到的“自己写了个java反编译脚本”,指的是作者创建了一个自定义的自动化工具,用于...

    jclasslib 工具修改.class文件,同时需要jad.exe做辅助

    修改jar包中变量 或者长量 步骤如下: 1.用jd-gui打开该jar 怎么打开不用我说了吧? 打开之后找到 要修改提示信息 的class文件 这里找到的是GenEntity 找到对应需要修改的代码所在的方法名 我这里包含提示信息的这段...

    用反射解析jar文件并执行里面Java代码

    这需要使用`Class.forName()`方法,传入类的全名(包括包名)。一旦类被加载,我们可以获取其构造函数并实例化对象。然后,我们可以使用`Method`类来查找并执行特定的方法。以下是一个基本示例: ```java import ...

    Java打包插件(fatjar)

    Class后点Browse像Export一样它也会列出你项目中的主类,选择后其它默认即可,Next后会列出你要打包的所有内容,这个插件的优势就是可以将你项目中的外部jar也打进来,有三个先项,其中Export ANT是生成build.xml...

    华为 smproxy.jar 已修改BUG版

    `使用里面的这个jar包.txt`很可能是一个说明文档,指导用户如何正确使用修改后的`smproxy.jar`。通常,这样的文档会包含启动命令、配置信息、依赖环境等关键细节。用户在使用时应该遵循这个文档的指示,以确保软件的...

    Linux下apk反编译工具包集合(apktool、dex2jar、jd-gui)

    apk反编译说明 1. 将aapt,apktool,apktool.jar拷贝到/usr/local/bin下(在root权限下才可以,修改属性chmod)。...第三步: 使用jd-linux下的jd-gui浏览反编译的*_dex2jar.jar包(里面是*.class文件)

    删除jar包中的指定文件

    然而,一旦JAR文件被创建,通常情况下是无法直接修改其内部内容的,因为它们是以只读方式存储的。但是,在特定情况下,可能需要删除JAR内的某个文件,例如更新或优化应用的某些部分。 在描述中提到的博文链接指向了...

    Linux下apk反编译工具包(apktool、dex2jar、jd-gui)

    apk反编译说明 1. 将aapt,apktool,apktool.jar拷贝到/usr/local/bin下(在root权限下才可以,修改属性chmod)。...第三步: 使用jd-linux下的jd-gui浏览反编译的*_dex2jar.jar包(里面是*.class文件)

    一个反编译工具的jar包jd-gui.rar

    使用JD-GUI非常简单,你只需要下载并解压"jd-gui.rar"压缩包,里面包含了一个名为"jd-gui.exe"的可执行文件。运行这个文件,然后通过菜单或拖放功能加载需要反编译的.class文件。JD-GUI会立即解析并显示对应的源代码...

    xmlbeans.jar

    例如,如果你有一个XML文件与某个特定的XML Schema关联,XMLBeans可以生成一个对应的Java包,里面包含了与Schema元素和属性相对应的类。然后,你可以直接通过这些类来读取、修改和写入XML数据。 在“xmlbeans-...

    在应用中集成AXMLPrinter,从apk文件中提取包名,版本等信息

    在应用中集成AXMLPrinter,从apk文件中提取包名,版本等信息。 AnalysisApk.java是从apk中提取...这需要修改里面的包名。把android.content.res改为android.content.res2。 附件文件是我修改好的,直接导入工程即可。

    SpringBoot上传文件到本服务器 目录与jar包同级问题

    因为我们无法对 jar 包里面的资源进行操作,而对于 SpringBoot 项目来说,我们只能读取里面的文件,只能使用 InputStream。 原因是我们无法操作 jar 包内容,所以我们只能将文件存放在别的位置,与 jar 包同级的...

Global site tag (gtag.js) - Google Analytics