Java 代码编译后生成的 class 中包含有源代码中的所有信息(不包括注释),尤其是在其中保存有调试信息的时候。所以一个按照正常方式编译的 Java class 文件可以非常轻易地被反编译。反编译工具有很多种,其中非常强大的一种是 jad。
为了避免出现这种情况,保护开发者的劳动,又有一种叫做 Java 混淆器的工具被开发出来。Java 混淆器的作用是对编译好的代码进行混淆,使得其无法被反编译或者反编译后的代码混乱难懂。Java 混淆器也有很多种,其中比较强大的一种是 RetroGuard(只说比较强大是因为我对其功效还是有些怀疑的)。
这里我介绍一下 RetroGuard 的使用方法。
将下载的 targz 或者 zip 文件解压。有用的只有 retroguardjar 一个文件,其它的是源代码和文档。
RetroGuard 是针对 jar 文件做混淆的。使用之前需要先配置一下。可以手工编辑配置文件,更好的方法是使用 RetroGuard 提供的 GUI 工具来生成配置文件。使用方法如下:
java -classpath retroguardjar;xxxjar;yyyzip; RGgui
然后在 GUI 的 Wizard 中设置各个参数。上面的 -classpath 中应该列出要混淆的 jar 所依赖的所有的包。
RGgui 的详细使用方法可以看 RetroGuard 的文档 docshtml。
配置文件生成后,就可以运行 RetroGuard 进行混淆了。使用方法如下:
java -classpath xxxjar;yyyzip; RetroGuard vvv-unofbjar vvvjar vvvrgs vvvlog
其中 vvv-unofbjar 是未混淆的 jar 文件,vvvjar 是混淆后生成的 jar 文件,vvvrgs 是配置文件,vvvlog 是日志文件。缺省的配置文件名称为 scriptrgs,缺省的日志文件名称为 retroguardlog。
在生成配置文件时需要注意的是:
1、所有 public 的类名、方法名、变量名应该全部保留。因为所有设置为 public 的内容代表了整个包对外表现的接口。若某个内容不想为外界访问,就不应该设置为 public 的。
2、若包中某个类使用了 javalangClass 或者 javalangClassLoader 中的某个方法加载了一个类,若这个类在包外,不需要特别处理;若这个类在包内,则需要保留这个类的类名,否则混淆后会找不到这个类。
3、在包中的所有调试信息(源文件名、行号、变量/参数信息等等)应全部删除。针对android 选择user版本进行编译的时候,会出现proguard错误,我们需要知道的事情
1proguard是做什么的,他的作用是将java代码进行混淆的工具
2因为proguard是混淆工具,所以android的mk文件也对其支持为两种方式:
1指定不需要混淆的native方法与变量的proguardflags文件如:LOCAL_PROGUARD_FLAG_FILES := proguardflags
2制定编译的工程,不要使用代码混淆的工具进行代码混淆如:LOCAL_PROGUARD_ENABLED := disabled
3不设置,默认使用LOCAL_PROGUARD_ENABLED := full即将该工程代码全部混淆1、手机验证码,microsoft会发送一条带有安全代码的短信到你绑定的安全手机。
2、邮件,microsoft会发送一封带有安全代码的邮件到你绑定的安全邮箱微软。
3、当你将该代码返回给微软时,他们会知道是你本人,因此可以帮助你重新访问Microsoft帐户。仅在访问个人信息或检测到你的帐户出现问题时,才使用你的安全信息来验证。微软(Microsoft)是一家美国跨国科技企业,1975年4月4日创立。2021财年微软营收为1681亿美元,净利润为613亿美元,公司总部设立在华盛顿州雷德蒙德(Redmond,邻近西雅图),以研发、制造、授权和提供广泛的电脑软件服务业务为主。net软件加密锁,可试试德国的威步,威步(WIBU)信息系统的软件加密狗,还能申请免费试用版。
加密锁:威步(WIBU)的CodeMeter,AxProtector(fornet)两款软件加密锁性能非常不错
混淆的问题,与传统的代码混淆工具(Obfuscator)不同,AxProtector可以完全阻止对NET 程序集(由 C#, VBNET, DelphiNET, ASPNet… 等语言编写)的反编译。通俗的讲,AxProtector在破解者和您的 NET 代码之间构建了强大的防破解保护屏障,生成一个基于 Windows 的而不是基于 MSIL 的兼容格式文件。原始的 NET 代码完整的被加密后封装在本地代码内,无论何时都不会释放到硬盘,对于破解者是不可见的。
与单纯的net加密软件不同,AxProtector与CodeMeter硬件加密狗配套餐使用,采用了更为严密的密钥管理,及最先进的AES、RSA、ECC等加密算法存储或传输密钥,保证通讯安全。
Net代码编译后生成的 class 中包含有源代码中的所有信息(不包括注释),尤其是在其中保存有调试信息的时候。所以一个按照正常方式编译的class 文件可以非常轻易地被反编译。一般软件开发商会采用一种叫做混淆器的工具。混淆器的作用是对编译好的代码进行混淆,使得其无法被反编译或者反编译后的代码混乱难懂。由于混淆器只是混淆了方法名称或流程,而不能防止源代码被反编译,因此混淆器的作用只是增加了反编译的难度,最终的结果也是治标不治本。对于一些掌握工具的人来说几乎还是透明的。AxProtector是一款真正意义的加密源代码、防止反编译的net软件加密软件。
AxProtector加密了net原代码,任何时候原代码都不可能被还原到硬盘当中。采用AxProtector加密后的net代码只有在程序调用或执行某一段函数的时候,才能通过AxProtectorClass在内存中解密后返回到程序中执行,运行之后迅速立即加密。这种随机加密、按需解密原代码的功能,能很好的防止Net程序的反编译,同时能够很好地防止API加密点被摘除。有效地保证了源代码的执行效率和安全性。混淆加密有各种不同的算法, 必须知道他的算法才可以解密;Xenocode Fox,一款类似 Reflector 的 net 反编译工具等借助反编译工具可以破解,至于你加密后不能正常使用,建议你好好看看你加密工具的使用文档,一般都有详细的说明
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)