java反编译软件jd-gui.exe以及使用javassist修改class文件 .
2011-12-29 14:15
585 查看
我们有个老项目,我也不是很清楚是属于什么样子的,可能太久远了,在tomcat里面无法导入,于是无法正常的在tomcat里面部署运行,无论我对于源码怎么进行正确的修改,毫无疑问,都是没有结果的。
于是,我在webapps找到我们的项目,然后找到项目里面的WEB-INF\classes,之前仅仅查找一个源码的时候,采用了采用了jd-gui.exe,于是这次匆匆下载一个jd-gui.exe,打开文件,这才进行正确操作。以后代码修改后没有结果的时候,试试这个软件,看看源码有没有改变,十分必要,
看起来以后这个软件将成为我的一个必备的一个软件工具!
以此小纪念!
使用javassist修改class文件
Firestorm是一个用JAVA写的代码生成工具,可以替你节省很多的代码量,可以说同类软件中功能最强的一个。
Firestorm是一个用JAVA写的代码生成工具,可以替你节省很多的代码量,可以说同类软件中功能最强的一个。
你可以在网上下载到最新的2.3试用版本,同时网站会发给你一个试用的license文件。既然是试用,
那么在使用上肯定有一定的限制。主要限制有3个:
1.只能最多生成5张表的DAO;
2.有时间限制;
3.不能自己定制代码生成;
为了能够更好的试用这个软件,我得改改它,去掉这些限制。将firestorm.jar打开后,可以看到它使用了
混淆器进行代码保护,不同于大多数的混淆器生成的文件,它的class和package大部分都是以关键字来命名,
所以如果你用JAD之类的工具把它反编译后是不能再把它编译成功,编译器会提示出错误。
反编译后,找到几个有关注册的关键文件,发现它使用的是数字签名技术来做的保护,所以想逆向找出
注册码的计算方法是不可行的了,只能通过修改文件的方法来破解。通常我们是先反编译,然后再修改
反编译后生成的原文件,最后再重新编译。但是由于文件名和包名的关系我们无法进行编译,除非把它的
这些‘非法'的文件名和包名全部改成符合java语言规范的名称,由于类,包众多,互相调用也很
频繁,所以这种方法几乎不可能的。
另外一种方法就是使用softice之类的调试软件来破解,不过这个脱离JAVA的范畴,这里不做讨论。
还有一种方法可能很少有人用,就是先反编译得到原文件,然后找到关键的方法后修改它的字节码,
也就是class文件,这中方法往往需要你知道一些有关CLASS文件格式方面的知识(如果没有也不用担心),
有许多的处理字节码的工具可以帮助你,比较流行的这类工具主要有:apache.org的BCEL;
jboss.com的javassist;objectweb.org的asm。都是出身名门哈。这3个工具各有特点,
这次我选用javassist,因为它修改class文件最方便,甚至不需要懂得字节码和class文件格式。
让我们来看看具体步骤:
step1:
下载并安装FIRESTORM。
step2:
反编译jar文件,阅读代码,找到关键的方法。当然,我这里写出来,你就不用再麻烦了。(其实这步是最
麻烦的)。
找到com.codefutures.if.if文件中的方法
public static boolean a(java.security.PublicKey publickey,
byte abyte0[], byte abyte1[])
throws java.security.NoSuchAlgorithmException,
java.security.NoSuchProviderException,
java.security.InvalidKeyException,
java.security.SignatureException {
java.security.Signature signature = java.security.Signature.getInstance("SHA1withDSA", "SUN");
signature.initVerify(publickey);
signature.update(abyte0);
return signature.verify(abyte1);
}
这个方法是对公钥进行检验,修改的思路就是直接让他返回一个true.
step2:
收到firestorm.license文件后不要急着安装,先修改如下:
<custom-codegen>no</custom-codegen>
改为
<custom-codegen>yes</custom-codegen>
<restriction>5</restriction>
改为
<restriction>none</restriction>
<expiry-date>[日期]</expiry-date>
改为
<expiry-date>never</expiry-date>
修改后放到firestorm的安装路径的license目录。
step3:
修改com.codefutures.if.if的class文件.这里我们需要写一个小程序来完成实现:
import javassist.ClassPool;
import javassist.CtClass;
import javassist.CtMethod;
public class Test {
public static void main(String[] args) throws Exception {
ClassPool pool = ClassPool.getDefault();
//设置目标类的路径,确保能够找到需要修改的类,这里我指向firestorm.jar
//解包后的路径
pool.insertClassPath("d:/work/firestorm/firestorm") ;
//获得要修改的类
CtClass cc = pool.get("com.codefutures.if.if");
//设置方法需要的参数
CtClass[] param = new CtClass[3] ;
param[0] = pool.get("java.security.PublicKey") ;
param[1] = pool.get("byte[]") ;
param[2] = pool.get("byte[]") ;
//得到方法
CtMethod m = cc.getDeclaredMethod("a", param);
//插入新的代码
m.insertBefore("{return true ;}") ;
//保存到文件里
cc.writeFile() ;
}
}
修改完后,你可以反编译修改过的的class文件,看看代码是否加入成功。
step4:
将所有的class文件重新打包成firestorm.jar,然后替换
[firestorm安装路径]/lib/firestorm.jar,再启动firestorm即可。
主题:javassist,不反编译也可以破解class :参考文档:http://www.iteye.com/topic/297651
主题:用javassist破解java软件 :参考文档: http://www.iteye.com/topic/660955
于是,我在webapps找到我们的项目,然后找到项目里面的WEB-INF\classes,之前仅仅查找一个源码的时候,采用了采用了jd-gui.exe,于是这次匆匆下载一个jd-gui.exe,打开文件,这才进行正确操作。以后代码修改后没有结果的时候,试试这个软件,看看源码有没有改变,十分必要,
看起来以后这个软件将成为我的一个必备的一个软件工具!
以此小纪念!
使用javassist修改class文件
Firestorm是一个用JAVA写的代码生成工具,可以替你节省很多的代码量,可以说同类软件中功能最强的一个。
Firestorm是一个用JAVA写的代码生成工具,可以替你节省很多的代码量,可以说同类软件中功能最强的一个。
你可以在网上下载到最新的2.3试用版本,同时网站会发给你一个试用的license文件。既然是试用,
那么在使用上肯定有一定的限制。主要限制有3个:
1.只能最多生成5张表的DAO;
2.有时间限制;
3.不能自己定制代码生成;
为了能够更好的试用这个软件,我得改改它,去掉这些限制。将firestorm.jar打开后,可以看到它使用了
混淆器进行代码保护,不同于大多数的混淆器生成的文件,它的class和package大部分都是以关键字来命名,
所以如果你用JAD之类的工具把它反编译后是不能再把它编译成功,编译器会提示出错误。
反编译后,找到几个有关注册的关键文件,发现它使用的是数字签名技术来做的保护,所以想逆向找出
注册码的计算方法是不可行的了,只能通过修改文件的方法来破解。通常我们是先反编译,然后再修改
反编译后生成的原文件,最后再重新编译。但是由于文件名和包名的关系我们无法进行编译,除非把它的
这些‘非法'的文件名和包名全部改成符合java语言规范的名称,由于类,包众多,互相调用也很
频繁,所以这种方法几乎不可能的。
另外一种方法就是使用softice之类的调试软件来破解,不过这个脱离JAVA的范畴,这里不做讨论。
还有一种方法可能很少有人用,就是先反编译得到原文件,然后找到关键的方法后修改它的字节码,
也就是class文件,这中方法往往需要你知道一些有关CLASS文件格式方面的知识(如果没有也不用担心),
有许多的处理字节码的工具可以帮助你,比较流行的这类工具主要有:apache.org的BCEL;
jboss.com的javassist;objectweb.org的asm。都是出身名门哈。这3个工具各有特点,
这次我选用javassist,因为它修改class文件最方便,甚至不需要懂得字节码和class文件格式。
让我们来看看具体步骤:
step1:
下载并安装FIRESTORM。
step2:
反编译jar文件,阅读代码,找到关键的方法。当然,我这里写出来,你就不用再麻烦了。(其实这步是最
麻烦的)。
找到com.codefutures.if.if文件中的方法
public static boolean a(java.security.PublicKey publickey,
byte abyte0[], byte abyte1[])
throws java.security.NoSuchAlgorithmException,
java.security.NoSuchProviderException,
java.security.InvalidKeyException,
java.security.SignatureException {
java.security.Signature signature = java.security.Signature.getInstance("SHA1withDSA", "SUN");
signature.initVerify(publickey);
signature.update(abyte0);
return signature.verify(abyte1);
}
这个方法是对公钥进行检验,修改的思路就是直接让他返回一个true.
step2:
收到firestorm.license文件后不要急着安装,先修改如下:
<custom-codegen>no</custom-codegen>
改为
<custom-codegen>yes</custom-codegen>
<restriction>5</restriction>
改为
<restriction>none</restriction>
<expiry-date>[日期]</expiry-date>
改为
<expiry-date>never</expiry-date>
修改后放到firestorm的安装路径的license目录。
step3:
修改com.codefutures.if.if的class文件.这里我们需要写一个小程序来完成实现:
import javassist.ClassPool;
import javassist.CtClass;
import javassist.CtMethod;
public class Test {
public static void main(String[] args) throws Exception {
ClassPool pool = ClassPool.getDefault();
//设置目标类的路径,确保能够找到需要修改的类,这里我指向firestorm.jar
//解包后的路径
pool.insertClassPath("d:/work/firestorm/firestorm") ;
//获得要修改的类
CtClass cc = pool.get("com.codefutures.if.if");
//设置方法需要的参数
CtClass[] param = new CtClass[3] ;
param[0] = pool.get("java.security.PublicKey") ;
param[1] = pool.get("byte[]") ;
param[2] = pool.get("byte[]") ;
//得到方法
CtMethod m = cc.getDeclaredMethod("a", param);
//插入新的代码
m.insertBefore("{return true ;}") ;
//保存到文件里
cc.writeFile() ;
}
}
修改完后,你可以反编译修改过的的class文件,看看代码是否加入成功。
step4:
将所有的class文件重新打包成firestorm.jar,然后替换
[firestorm安装路径]/lib/firestorm.jar,再启动firestorm即可。
主题:javassist,不反编译也可以破解class :参考文档:http://www.iteye.com/topic/297651
主题:用javassist破解java软件 :参考文档: http://www.iteye.com/topic/660955
相关文章推荐
- 使用SfntTool制作字体剪辑工具3 - 使用jd-gui反编译.class文件
- java中如何使用asm动态的生成或修改一个class文件以及asm的架构思想
- 使用JSP/JAVA 调用java.exe执行某个路径下面的class文件,并显示出结果
- 反编译工具jad的使用(将*.class文件变成*.java文件,附带jad.zip包)
- 将Java的class文件转为EXE文件的八种方法(推荐使用JOVE和JET)
- [Java Eclipse] 使用Eclipse发布jar包以及制作exe文件的方法
- 利用jclasslib修改java编译后的.class文件
- Eclipse Java反编译插件Jd-Eclipse plugin,帮你查看.class文件
- java class反编译工具----JD-GUI
- Java GUI使用exe4j打包exe文件
- Java反编译工具使用对比,最好用的Java反编译工具 --- JD-GUI、XJad
- Java中class文件编译成exe文件的几种方法
- Java反编译工具jd-gui的eclipse插件安装和使用
- JD-GUI(Java反编译工具)的使用
- java反编译之jd-gui的使用
- Myeclipse中的使用javassist修改时class文件时生成的class文件在项目的根目录下。
- 去掉java反编译(JD-GUI)生成的源文件中注释
- 使用exe4j把JAVA GUI程序打包成exe文件时遇到的问题
- Java中class文件编译成exe文件的几种方法【推荐】
- java的class文件反编译和Eclipse、MyEclipse反编译插件安装、使用