`
zhongdaiqi
  • 浏览: 6286 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

javassist,不反编译也可以破解class

阅读更多

     昨天遇到一个问题,可不可以直接修改class,因为用jad反编译出来的java文件再次编译的时候出错,网上也有网友说,反编译出来的东西只能是看看思路,相对而言难度比较大。而我所谓的修改只需修改class的属性或者方法的属性,比如说从protected修改成public,或者从public修改成protected,修改的要求并不高。

    经过网上搜寻,终于找到了“帮凶”:javassist。目前来说,javassist就只能被我用来Modify一些现成的class了,其它高级功用就省了。

    原来我试过,写两个java,代码就区别在属性上,然后编译成class,比较两个class,发现真的只有一点点不同,不过,没法下手。最终能遇到javassist,真是一大幸事。

    如果使用javassist呢?网上搜索了很久,没有一篇讲得比较细的。不过javassist的官方网站有鸟语版的指南哈,照着搬弄一下还是可以搞定将protected修改成public,当然,javassist的功能完全不限于些。因为一个熟练使用javassist的家伙完全可以自己写一个java编译器,或者java反编译器,而这种难度却像南方人吃大米饭似的~

   下面讲讲,我在初步使用javassist的经验或者说是技巧。可能有高级功能我没有用到,我仅是使用自己搞懂的一点点东西去做复杂的事情哈。如果你更希望深入掌握javassist,建议直接看En版。如果你是大侠,这篇文章里也有问题for u... ...

   让我们看看如果将MMIDlet.class中的函数startApp的属性从protected 改成public

   1.我在j2me里使用javassist时,出现bug,提示找不到某某类... ...后来想,应该是j2me精简掉了吧,最终是什么原因我也不知道。所以我的经验是,要修改class请新建一个java app项目。如图:

javassist使用

  

   2.上图已经展示了项目结构,其中MMIDlet.class就是我们需要修改的类。在这个项目结构中我们需要注意的是,新建项目包名默认是JavaApplication1,也就是项目名,这个时候,我们需要将生成的包名去掉,当然这个需要我们看MMIDlet.class属于什么包了。由于示例中的MMIDlet没有指定包,所以就是空的,为了让Main.java能方便的对MMIDlet.class进行操作,将它们弄在一个包里面。Main.java里的代码:

3.运行,这个时候千万记住,不是选中JavaApplication1进行运行,而是选中Main.java进行运行,不然会提示没有找到相应的类哟,呵呵~~

4.修改后的类在哪里呢?从项目文件根目录下去找。由于这里,包是空的,所以生成的文件就在根目录下,如果有包的话,就会在相应的文件夹里。(我可能对包的概念有所误解似的~)



 

 

5.查看修改结果,这个改属性的结果可以使用ide查看对象结构就可以看出来。不过,还是可以下载jad,或者FrontEnd Puls反编译一下看看结果哈~

  ok, 到这里应该知道怎么使用javassist进行简单的操作了。javassist的功能比这强大很多哈。再次说明一下,如果想更全面的掌握javassist请到官方网站看教程,当然,我这里上传了一个javassist的zip,官方网站上最新的版本,里面也有教程哈。另外,把反编译的工具也传上来了,可以试试看哈。

(做个小广告:过一阵子,我可能会抽时间将javassist翻译成中文,如果有兴趣看,可以关注一下,如果有兴趣一起翻译,可以联系我哈~)

  • 大小: 7.4 KB
  • 大小: 26 KB
  • 大小: 34.2 KB
分享到:
评论
7 楼 zhongdaiqi 2008-12-25  
oxromantic 写道

zhongdaiqi 写道

wangzhongjie 写道
嗯,操作中间代码,^_^,有道理 那都是需要非常熟悉中间码的人才能写出javassistClass Format很简单的,如果只是为了修改访问权限完全可以自己搞 http://java.sun.com/docs/books/jvms/second_edition/html/ClassFile.doc.html



Specification... ...

有空也看看~
6 楼 oxromantic 2008-12-24  
zhongdaiqi 写道

wangzhongjie 写道

嗯,操作中间代码,^_^,有道理




那都是需要非常熟悉中间码的人才能写出javassist


Class Format很简单的,如果只是为了修改访问权限完全可以自己搞
http://java.sun.com/docs/books/jvms/second_edition/html/ClassFile.doc.html
5 楼 zhongdaiqi 2008-12-23  
wangzhongjie 写道

嗯,操作中间代码,^_^,有道理



那都是需要非常熟悉中间码的人才能写出javassist
4 楼 wangzhongjie 2008-12-23  
嗯,操作中间代码,^_^,有道理
3 楼 zhongdaiqi 2008-12-22  
czlonly 写道

原理应该还是反编、修改、编译吧



呵呵~~原理是:对java中间代码非常熟悉,可以直接操作它们
2 楼 howesen 2008-12-22  
见识了!以前没有注意过
1 楼 czlonly 2008-12-22  
原理应该还是反编、修改、编译吧

相关推荐

    java 反编译工具 jboss-javassist

    5. **教学与研究**:由于它可以轻松地反编译和修改字节码,Javassist在教学和研究Java字节码和虚拟机工作原理时也是一个有价值的工具。 在使用Javassist时,开发者通常会先引入对应的jar包,例如压缩包中的"jbosss-...

    jclasslib反编译工具包,修改class文件

    jclasslib就是这样一款强大的反编译工具,它允许开发者查看和修改Java的Class文件,为我们的编程工作提供了极大的便利。本文将详细介绍jclasslib工具包的使用及其在JavaEE、移动开发,尤其是安卓开发中的应用。 ...

    javassist+jd-gui

    1. **实时查看**:打开 `.class` 文件后,可以在界面中实时浏览反编译出的源代码。 2. **搜索功能**:可以搜索特定的类、方法或变量,便于快速定位所需信息。 3. **代码折叠**:源代码可以折叠,方便查看大型类的...

    使用Javassist对.class文件进行修改.doc

    9. **与其他工具的对比**: Javassist 与反编译工具(如 JAD)不同,它不依赖源代码,而是直接操作字节码。这使得它在没有源代码的情况下修改已编译的类成为可能。 通过 Javassist,开发者可以实现很多创新的功能,...

    jboss-javassist和JByteMode整合包

    具体来说,可以将JByteMode用于反编译.jar包中的类,获取其源代码,然后利用Javassist修改这些源代码,最后再重新生成字节码并加载到Java虚拟机中。这样的流程在处理复杂的需求,如热更新、插件系统或者代码增强时...

    javassist.jar

    Javassist version 3,2019年最新版本的javasssit工具,亲测可用,可以直接修改class文件。不需要反编译

    源码jar包反编译工具

    查看: jd-gui源码jar包反编译工具:可以进行学习的源码jar查看; 修改jar源码: JByteMod-1.8.2(可以修改-不好用,不如360压缩打开后替换class); 建议采用javassist.jar

    javassist-3.17.1-GA(最新版).zip

    java 和 class 破解,修改工具.可以直接修改 class文件

    透视JAVA--反编译、修补和逆向工程技术

    但是,根据给出的标题和描述,我们可以详细说明“透视JAVA--反编译、修补和逆向工程技术”中提到的相关知识点。 首先,“反编译”是指将编译过的代码还原为源代码的过程。在Java领域,反编译通常用于分析和理解一个...

    java 反编译工具front end

    这样的工具使得非技术用户也能轻松地进行反编译操作,而无需通过命令行界面。 Java反编译工具有很多,例如JD-GUI、FernFlower、Procyon和JAD。这些工具的共同目标是解析.class文件并生成尽可能接近原始源代码的....

    Java下的Class代码查看器+修改器

    常见的Class查看工具有JAD (Java Decompiler)、 jclasslib、FernFlower等,它们能将.class文件反编译为接近源码的表示形式,帮助开发者理解代码逻辑。 当需要对类文件进行修改时,如改变方法行为、插入日志、修复...

    修改javaclass工具包

    2. **反编译(Decompiler)**:反编译工具如JAD(Java Decompiler)和JD-GUI可以将`.class`文件转换回接近原始`.java`源代码的形式。这些工具虽然不能完全恢复原始代码,但可以帮助开发者理解代码逻辑并进行修改。 ...

    透视Java-反编译、修补和逆向工程技术].Alex.Kalinovsky.扫描版.pdf

    Java反编译是将Java字节码(.class文件)转换回接近源代码形式的过程。这一过程对于理解已编译的Java程序结构和功能至关重要,尤其是在没有源代码的情况下进行代码分析或调试。书中深入介绍了各种反编译工具,如JD-...

    java解析class文件

    在实际开发中,解析Class文件的工具和库有很多,如javap(Java字节码反汇编器)、ASM、BCEL、Javassist等。这些工具可以帮助开发者深入理解字节码,甚至自动生成或修改字节码,实现一些高级功能。 总而言之,Java...

    java class文件解析

    另外,还有更强大的第三方工具,如JAD、FernFlower等,可以反编译成更接近源代码的形式。 6. **字节码分析与优化**:对于性能优化或者安全分析,开发者可能需要深入到字节码层面,例如使用ASM、BCEL、Javassist等库...

    java加壳的问题

    这是因为Java的类文件(.class文件)格式非常规范且易于反编译,反编译后的代码往往具有很高的可读性。因此,传统的加壳方法在Java中并不适用。为了解决这一问题,开发者通常会采取以下几种方式: 1. **使用混淆器*...

    java实现根据方法查看方法参数名称

    本文将深入探讨如何使用Java字节码和反编译技术来实现这个需求。 首先,我们要理解Java字节码。Java源代码在编译后会转化为字节码(.class文件),这是JVM(Java虚拟机)能直接执行的二进制格式。字节码并不直接...

    JAVA字节码操作库 BCEL

    4. **逆向工程**:BCEL可以用于Java类的反编译,虽然不如专用的反编译工具如JD-GUI详细,但可以提供基本的字节码级别的理解。 5. **动态代理**:BCEL可以用来创建动态代理类,实现对Java接口的动态实现,这是很多...

    美团IDEA插件实现Java应用的热部署实践

    同时,Sonic还具备流量回放、远程调用、远程反编译等功能,可以配合进行使用。 在实际编码工作中,多文件修改是家常便饭,Sonic对多文件的热部署能力尤为突出,它可以通过依赖分析等手段来对多文件批量进行远程热...

    seachClass.zip

    提取这些类文件可能是为了进行反编译、分析代码结构、或者是在不使用源码的情况下部署或运行程序。 执行"seachClass.exe"可能是一个辅助工具,用于搜索并操作这些类文件。这可能是一个命令行工具,用于在解压后的...

Global site tag (gtag.js) - Google Analytics