前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >“码码”再也不用担心我的代码被反编译了!

“码码”再也不用担心我的代码被反编译了!

作者头像
程序源代码
发布2018-03-30 16:14:45
2.9K0
发布2018-03-30 16:14:45
举报
文章被收录于专栏:程序源代码程序源代码

自己辛辛苦苦写出来的代码,被别人无情的反编译了怎么办?

一、背景

Java是一种跨平台的、解释型语言,Java源代码编译成中间“字节码”存储于class文件中。由于跨平台的需要,Java字节码中包括了很多源代码信息,如变量名、方法名,并且通过这些名称来访问变量和方法,这些符号带有许多语义信息,很容易被反编译成Java源代码。为了防止这种现象,我们可以使用Java混淆器对Java字节码进行混淆。

自己辛辛苦苦写出来的代码,被别人无情的反编译了怎么办?下面教会大家使用工具对自己心爱的代码进行加密。

二、牛X工具

ProGuard是一个压缩、优化和混淆Java字节码文件的免费、开源的工具,它可以删除无用的类、字段、方法和属性。可以删除没用的注释,最大限度地优化字节码文件。它还可以使用简短的无意义的名称来重命名已经存在的类、字段、方法和属性。

目前最新版本:proguard4.10版本(官方)

测试使用的是:proguard3.8版本(汉化版)

它处理的顺序是:先压缩,然后优化,最后才进行混淆。

三、引申

其实代码混淆的方法有很多,主要常用有以下几方面。

1、更名,将私有类,私有的成员、方法体内部的变量名改名,改成a,b,c等等,甚至1,2,3(代码中不允许不等于成果物中不允许)。

2、改变逻辑的流向,如将if条件取反,if/else对换。

3、等价代码,如将循环改成GOTO。

4、无效代码,插入不可及的无用代码。

四、使用proguard工具对挑选出来的特定.jar进行代码混淆

(1)通过eclipse将工程中com.stkj.action包下的所有类,打包成com.stkj.action.jar。

此.jar 用于代码混淆测试

(2)运行proguardgui.jar文件

或者右键选择java(TM)运行。打开proguard图形界面工具。如下图:

我个人认为,其实图形界面主要是为了得到.pro的代码压缩、优化、混淆的配置文件。对于复杂的混淆来说,图形界面中没有的属性,就要参考proguard提供的使用文件,按照自己想要的要求在.pro文件中配置了。其实proguard的使用关键就是编写这个配置文件。

(3)编写.pro配置文件,执行压缩、优化、混淆。

1、点击【运行】

进入工具使用界面,如下是工具打开界面。

2、进入【输入输出】选项

添加要输入/输出的.jar包(输入.jar包是你要混淆的jar包,输出.jar包是混淆后得到的.jar)。

1、注意:【类库】栏目中是工程必须要引用的资源,所以要将ssh的.jar全部加载到类库中。建议直接将webapps\JGJ_V2\WEB-INF\lib包添加。

2、注意:【类库】栏目中默认会自带rt.jar(JAVA基础类库),需要将其修改为和工程相对应的版本。此外应该是jdk1.6中的rt.jar。如下图所示:

3、进入【压缩】选项

此选项卡是对工程进行压缩,我在测试中未使用此功能。

4、进入【混淆】选项

此是代码混淆的重点,重要注意几个选择项。

重点的选项介绍

1、【输入映像文件】printmapping

保存混淆前后的对照文件。文件格式可设为.txt

-keepnames class com.stkj.action.** extends com.stkj.action.GenericAction { public private protected <fields>; public protected <methods>;}

2、【保留不参与混淆的类名和类成员名】

就是对应的-keep 属性,此处是重点需要研究的所在。需要详细参考使用说明或者一些例子。如下面图所示:

5、进入【优化】选项

这个界面主要用它可以删除无用的类、字段、方法和属性。可以删除没用的注释,最大限度地优化字节码文件。

6、进入【参数信息】选项

这个界面主要是一些参考配置。比如说将日志输出。

7、进入【处理】选项

到这一步我们初步通过工具形成的.pro配置文件。所以的步骤产生的配置,全部都写到的.pro配置文件中。我们先通过【查看配置信息】查看下,也可以通过【保存配置信息】将配置信息以.pro的格式保存到本地目录中。然后打开进行查看

另外:此也可以按照自己的要求在.pro文件中进行添加,修改或者删除一些属性配置。以便达到想要的结果。建议将.pro文件保存到本地,如果更新的话,另存为一个新.pro

8、进入【执行】选项

加载.pro配置文件,点击【执行!】, proguard将会按照配置文件中描述的内容,对com.stkj.action.jar 进行执行。

执行中注意出现的问题。执行成功后会有提示成功的信息。

最终后得到com.stkj.action.out.jar,可以会反编辑软件打开混淆后的.jar进行查看。如下是打开一个.class文件后看到的效果。其中的某些方法体已经受混淆。

四、混淆测试

将混淆后的.jar拷贝放到\webapps\JGJ_V2\WEB-INF\lib目录下。然后启动Tomcat服务器。测试登录、各模块与Action相关的功能是否能正常运行。需要详细测试。

五、问题汇总

在使用progurad进行混淆时和测试时遇到的一些问题,总结了一下。

问题1:混淆是针对.class文件混淆,但是出现如下问题,AJAX实现的功能,没法重现。如下:

解决方案:

(1) 把AJAX的代码,删了,写成js。

(2)把ajax调用的action取消混淆,建议使用,此方法对于页面无影响,只需要在工具.pro添加【保留不参与混淆的类和类成员】但要调试下

问题2:执行时报错,执行失败。提示如图,貌似缺少配置。

解决方案:调整混淆中的【保留】选项

问题3:执行时报错,执行失败,提示缺少类库。

解决方案:在【类库】时添加工程必须的lib,其中JDK下面的rt.jar(java基础类包)必不可少。同时也要注意使用的JDK版要与工程使用的JDK版本保持一致。

问题4:登录平台后,平台报错。提示缺少方法 。

解决方案:原因是工程有更新,我本地测试的对应的.class和配置文件没有对应的更新成最新。重新部署下工程(如:com.stkj.service.更新。spring 的配置.xml文件更新)

声明:文章属于个人原创,转载请注明文章出处

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-03-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 全华班 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档