`
walksing
  • 浏览: 217149 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Java 混淆器 RetroGuard 的使用方法

阅读更多
前发在别的地方的帖子。

Java 代码编译后生成的 .class 中包含有源代码中的所有信息(不包括注释),尤其是在其中保存有调试信息的时候。所以一个按照正常方式编译的 Java .class 文件可以非常轻易地被反编译。反编译工具有很多种,其中非常强大的一种是 jad。
为了避免出现这种情况,保护开发者的劳动,又有一种叫做 Java 混淆器的工具被开发出来。Java 混淆器的作用是对编译好的代码进行混淆,使得其无法被反编译或者反编译后的代码混乱难懂。Java 混淆器也有很多种,其中比较强大的一种是 RetroGuard(只说比较强大是因为我对其功效还是有些怀疑的)。

这里我介绍一下 RetroGuard 的使用方法。
将下载的 .tar.gz 或者 .zip 文件解压。有用的只有 retroguard.jar 一个文件,其它的是源代码和文档。
RetroGuard 是针对 jar 文件做混淆的。使用之前需要先配置一下。可以手工编辑配置文件,更好的方法是使用 RetroGuard 提供的 GUI 工具来生成配置文件。使用方法如下:
java -classpath retroguard.jar;xxx.jar;yyy.zip;... RGgui
然后在 GUI 的 Wizard 中设置各个参数。上面的 -classpath 中应该列出要混淆的 jar 所依赖的所有的包。
RGgui 的详细使用方法可以看 RetroGuard 的文档 docs.html。
配置文件生成后,就可以运行 RetroGuard 进行混淆了。使用方法如下:
java -classpath xxx.jar;yyy.zip;... RetroGuard vvv-unofb.jar vvv.jar vvv.rgs vvv.log
其中 vvv-unofb.jar 是未混淆的 jar 文件,vvv.jar 是混淆后生成的 jar 文件,vvv.rgs 是配置文件,vvv.log 是日志文件。缺省的配置文件名称为 script.rgs,缺省的日志文件名称为 retroguard.log。

在生成配置文件时需要注意的是:
1、所有 public 的类名、方法名、变量名应该全部保留。因为所有设置为 public 的内容代表了整个包对外表现的接口。若某个内容不想为外界访问,就不应该设置为 public 的。
2、若包中某个类使用了 java.lang.Class 或者 java.lang.ClassLoader 中的某个方法加载了一个类,若这个类在包外,不需要特别处理;若这个类在包内,则需要保留这个类的类名,否则混淆后会找不到这个类。
3、在包中的所有调试信息(源文件名、行号、变量/参数信息等等)应全部删除。

RetroGuard 还有一种打 patch 的所谓“增量式混淆”的使用方法。方法的要点是把上一次混淆生成的 log 文件作为下一次混淆的配置文件,这样就可以生成一个仅包含修改的 patch jar。在使用的时候把这个 path jar 放在 CLASSPATH 的上一次混淆 jar 之前。这种增量式混淆有两种方法:
1、每个 patch jar 仅包含上一个版本混淆以来发生的变化,这样每个 patch jar 会很小,但是 CLASSPATH 会越来越长。
2、每个 patch jar 包含上一个主要版本(2.0、3.0、4.0)混淆以来发生的变化,这样两个主要版本间的 patch jar 会越来越大。但是 CLASSPATH 只需做很小的变化。
以上的两种方式我都不喜欢,感觉都不够优雅。
分享到:
评论

相关推荐

    java混淆器 RetroGuard

    java混淆器 RetroGuard 免费提供源码 可运行jar文件 Java 代码编译后生成的 .class 中包含有源代码中的所有信息(不包括注释),尤其是在其中保存有调试信息的时候。所以一个按照正常方式编译的 Java .class 文件...

    混淆工具 retroguard

    在Android应用开发过程中,为了防止恶意用户逆向工程分析APP,开发者通常会使用混淆工具对代码进行混淆,使得原始的类名、方法名和变量名变得难以理解。RetroGuard就是这样一个工具,它能够将Java字节码转换为一种...

    java混淆器jocky和retroguard-v2.3.1.zip

    在压缩包"java混淆器jocky和retroguard-v2.3.1.zip"中,很可能包含了Jocky和RetroGuard的源码、文档、示例、配置文件以及相关的使用指南。使用者需要根据自身需求,配置混淆参数,然后运行混淆工具对Java类文件进行...

    java混淆器

    本文将详细介绍Java混淆器,特别是RetroGuard-v2.3.1的使用方法。 首先,让我们理解什么是Java混淆。混淆是一种优化技术,通过改变类名、方法名、变量名等标识符,使得原始代码变得难以理解和分析。这有助于防止...

    JAVA混淆编译工具

    ### JAVA混淆编译工具知识点详解 #### 一、概述 在现代软件开发中,随着Java语言的广泛应用,代码安全成为了不容忽视的问题。为了保护源代码不被轻易逆向工程或非法复制,开发者们通常会采用一种名为“混淆编译”的...

    retroguard.jar

    Java代码混淆器retroguard.jar

    java混淆研究报告.pdf

    本文主要探讨了一种名为Jocky的Java混淆工具的使用方法。 Jocky是一个适用于MyEclipse集成开发环境的Java混淆插件,它能够有效地混淆Java源代码,降低代码可读性,同时还能减少代码体积,便于用户下载和运行。混淆...

    一种改进加密Java源码的方法.pdf

    这方面的研究结果很多,既有混淆器(如现在大名鼎鼎的JODE、RetroGuard),也有针对反编译器的“炸弹”(如针对反编译丁具Mocha的“炸弹”Crema和HoseMocha)。混淆器,顾名思义,就是通过模糊处理Java代码,具体地...

    一种改进的加密JAVA源码的方法.pdf

    市面上有许多工具支持JAVA代码的模糊处理,如JODE、RetroGuard等混淆器,以及针对特定反编译工具(如Mocha)设计的“炸弹”如Crema和HoseMocha等。 **局限性**:尽管模糊处理可以增加代码的复杂度,但这种方法并不...

    yguard-2.3.0.1

    yGuard是一款专业的Java代码混淆工具,它是RetroGuard的后续版本,主要功能是对Java字节码进行混淆,以增加代码的复杂性和安全性。在软件开发过程中,尤其是涉及到商业应用或者开源项目时,保护源代码不被轻易反编译...

    软件开发中的一个重要环节―――混淆 (2004年)

    详细阐述了混淆在软件开发中的重要作用,并讨论了4种需要混淆代码的情形以及常见的混淆方法。在此基础上着重分析了Java字节码的特点,并列举了几种典型的Java字节码混淆器,具体介绍了RetroGuard混淆器的特点和用法。

    jive.chm

    1 Sun公司的混淆器JADE 2 RetroGuard的使用方法 <br> JVM 1 JVM之class文件结构 2 JVM 內的資料處理 <br> MVC Framework 1 应用Struts的网站建设 <br> Java基础...

    Jive资料集

    系统设计 1 jive设计思路 2 jive的工作内幕 3 Jive源代码研究 4 Jive中的设计模式 5 jive学习...2 RetroGuard的使用方法 <br> JVM 1 JVM之class文件结构 2 JVM 內的資料處理

    Complete_Guide_to_J2ME_Polish

    - **结合多个混淆器**: 支持同时使用多种混淆策略。 - **特定混淆器设置**: - **ProGuard** - **yGuard** - **RetroGuard** - **Zelix KlassMaster** - **DashO Pro** - **JODE** - **`<variables>` 和 `...

    j2me 面试题 经典的

    c) **混淆(Obfuscation)**:混淆是将代码中的类名、方法名和变量名替换为难以理解的形式,以增加反编译难度。好处包括保护源码和减小代码体积。常见的混淆工具有Proguard和RetroGuard。 d) **状态机**:状态机是...

    GameLoft面试题目及答案

    a) 垃圾回收是Java自动回收不再使用的内存空间的过程。系统自动判断何时触发GC,但不能保证总能满足内存需求。 b) short的取值范围是-32768(-2^15)到32767(2^15-1)。 c) 混淆是将代码变得更难理解的过程,提高...

    xyhuman1656

    - 解释:Java 自动管理内存,当对象不再被引用时,垃圾回收器会自动释放这些对象占用的内存空间。 - **b)** **short 类型取值范围** - 解释:`short` 类型的取值范围为 `-32768` 到 `32767`,即 `-2^15` 到 `2^15 ...

Global site tag (gtag.js) - Google Analytics