j2me obfuscator Proguard & retroguard

本文分享了作者在Java J2ME开发中使用ProGuard和RetroGuard两款混淆器的经验。介绍了如何将RetroGuard集成到WTK及遇到的问题解决方法,同时提到了ProGuard在EclipseMe中的集成步骤和常见错误及其解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

今天尝试了一下java的打包混淆,上网下载,试用了两个在j2me开发中最常用到的混淆器:ProGuard 和 RetroGuard.这两个混淆器都是开原免费的,但License上说如果用于商业用途也要求付费.窃以为在中国是肯定不会有人会付费给他们的了,估 计国外的除大公司以外也不会有人付钱了吧.
使用过程中有些问题是要注意的.
1.RetroGuard.先把RetroGuard集成到 WTK中:看网上介绍直接把Retroguard.zip 解压得到的jar文件丢到WTK/bin/目录中就可以在Ktoolbar中使用了.我试了,结果不行,提示是说找不到Proguard.原来WTK中默 认的混淆器是Proguard,要换用Retroguard,必须到WTK/wtklib/Windows(platform)下找到 ktools.properties文件,把其中的obfuscator.runner.class.name: com.sun.kvem.ktools.RunPro 改成:obfuscator.runner.class.name: com.sun.kvem.ktools.RunRetro
就可以了.在这个文件中还有一些关于混淆的选项配置,也可以按需要自己修改.
eclipseme也是默认只使用ProGuard的,可是我没有找到配置文件,捣鼓了半天没能把Retroguard集成到EclipseMe中去.是我的EclipseMe的版本不对?谁知道可以告诉我?

2.Proguard.这是WTK和EclipseMe的默认选择,集成很简单,WTK直接解压丢到目录WTK/bin中去就可以.EclipseMe则在preference中指定解压的文件夹就可以.但混淆打包中碰到两次errors.
第 一个是could not find jar tool executable,是因为在preference中指定的jre目录包含的文件不足,没有jar工具的程序.这一般是把jre指向到了装其他软件时附 带装上的jre了,所以里面缺少一些jar tool executable.把preference里jre指向一个jdk的jre就行了.
第 二个是errors preverifying jar d.b()Z....原来混淆后要打包成j2me应用之前还要先通过预审核,这是预审核阶段出错误了.原因可能有两个,一是类,属性,方法太多了,用完了 默认的a-z字符,开始使用A-Z字符,而windows不区分大小写,于是后面的标识符把前面的覆盖了,在使用混淆时加上参数:- dontusemixedcaseclassnames.二是,可能混淆器优化程序出了错误,可以禁止优化来解决,方法是加参数:- dontoptimize.
经常混淆打包完之后,混淆器会提示有duplicate definition problems,是因为混淆器查找classpath找到多个同名的类.暂时也没有影响我的开发.

java混淆器 RetroGuard 免费提供源码 可运行jar文件 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 只需做很小的变化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值