参考文章
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`文件。这篇文章将深入探讨如何使用`jclasslib`来操作包含其他JAR的复杂项目。 首先,了解`jclasslib`的基本功能。它...
标题提到的"修改Jar包工具"是指在遇到代码冲突或需要定制化某些功能时,我们需要对已封装好的JAR文件进行编辑。描述中提到的情况,即在导入JAR包后发现代码冲突,这可能是由于不同库之间的类名、方法名重复或者版本...
当我们需要修改JAR中的代码时,先使用baksmali将JAR中的.class文件反汇编成Smali代码,这样我们就可以在文本编辑器中查看和修改这些代码了。 1. 使用`baksmali`反汇编:首先,解压`baksmali-2.0.3.jar`,然后在...
**IText7.jar包详解** IText7是一个广泛使用的Java库,主要用于创建、修改和处理PDF文档。这个jar包集合提供了全面的API,使得开发者能够高效地进行PDF文档的编程操作,无需深入理解PDF格式的复杂性。在项目中直接...
这个压缩包"Log4j及其配置.rar"包含了Log4j的jar包(log4j-1.2.15.jar)以及相关的配置文档,旨在帮助开发者理解和使用Log4j。 一、Log4j介绍 Log4j是Apache软件基金会的一个开源项目,最初由Ceki Gülcü创建。它...
### Spring Boot 编译 JAR 包后无法扫描子 JAR 包中的注解解决方案 在使用Spring Boot进行项目开发时,我们经常会遇到模块化的需求,即一个大型项目被拆分成多个子模块来提高可维护性和灵活性。这些子模块可能通过...
这样就在项目目录下新产生一个目录store,里面就是可以包含外部JAR包的完整的JAR文件。 最后,如果要运行它,可以在DOS环境下输入`java -jar *.jar`命令;或者为了方便,可以建立一个.bat批处理文件。 使用...
Java反编译是将已编译的Java字节码(.class文件)转换回源代码的过程,这在软件开发、逆向工程或学习他人代码时非常有用。标题提到的“自己写了个java反编译脚本”,指的是作者创建了一个自定义的自动化工具,用于...
修改jar包中变量 或者长量 步骤如下: 1.用jd-gui打开该jar 怎么打开不用我说了吧? 打开之后找到 要修改提示信息 的class文件 这里找到的是GenEntity 找到对应需要修改的代码所在的方法名 我这里包含提示信息的这段...
这需要使用`Class.forName()`方法,传入类的全名(包括包名)。一旦类被加载,我们可以获取其构造函数并实例化对象。然后,我们可以使用`Method`类来查找并执行特定的方法。以下是一个基本示例: ```java import ...
Class后点Browse像Export一样它也会列出你项目中的主类,选择后其它默认即可,Next后会列出你要打包的所有内容,这个插件的优势就是可以将你项目中的外部jar也打进来,有三个先项,其中Export ANT是生成build.xml...
`使用里面的这个jar包.txt`很可能是一个说明文档,指导用户如何正确使用修改后的`smproxy.jar`。通常,这样的文档会包含启动命令、配置信息、依赖环境等关键细节。用户在使用时应该遵循这个文档的指示,以确保软件的...
apk反编译说明 1. 将aapt,apktool,apktool.jar拷贝到/usr/local/bin下(在root权限下才可以,修改属性chmod)。...第三步: 使用jd-linux下的jd-gui浏览反编译的*_dex2jar.jar包(里面是*.class文件)
然而,一旦JAR文件被创建,通常情况下是无法直接修改其内部内容的,因为它们是以只读方式存储的。但是,在特定情况下,可能需要删除JAR内的某个文件,例如更新或优化应用的某些部分。 在描述中提到的博文链接指向了...
apk反编译说明 1. 将aapt,apktool,apktool.jar拷贝到/usr/local/bin下(在root权限下才可以,修改属性chmod)。...第三步: 使用jd-linux下的jd-gui浏览反编译的*_dex2jar.jar包(里面是*.class文件)
使用JD-GUI非常简单,你只需要下载并解压"jd-gui.rar"压缩包,里面包含了一个名为"jd-gui.exe"的可执行文件。运行这个文件,然后通过菜单或拖放功能加载需要反编译的.class文件。JD-GUI会立即解析并显示对应的源代码...
例如,如果你有一个XML文件与某个特定的XML Schema关联,XMLBeans可以生成一个对应的Java包,里面包含了与Schema元素和属性相对应的类。然后,你可以直接通过这些类来读取、修改和写入XML数据。 在“xmlbeans-...
在应用中集成AXMLPrinter,从apk文件中提取包名,版本等信息。 AnalysisApk.java是从apk中提取...这需要修改里面的包名。把android.content.res改为android.content.res2。 附件文件是我修改好的,直接导入工程即可。
因为我们无法对 jar 包里面的资源进行操作,而对于 SpringBoot 项目来说,我们只能读取里面的文件,只能使用 InputStream。 原因是我们无法操作 jar 包内容,所以我们只能将文件存放在别的位置,与 jar 包同级的...