生成jar包+混淆代码+生成exe
第一次做这个事情,花了几天时间才将老师给的项目成功混淆并生成exe。
使用的工具是:intellij idea、allatori obsfucator和jsmooth,做的时候遇到一些问题,费劲解决了七七八八吧。
废话少说,直接描述过程。
1.生成jar包
我的开发ide是intellij idea,也是第一次用,生成jar包的方式可能也不是最方便的一种。
进入intellij idea->file->project structure,
点击artifacts,如下图

创建jar时,首先选择main class,然后选择extract to the target Jar,这个选项是将所有依赖jar全部打入一个jar包中,下面的选项则保留第三方jar包。

点击确认后,输入jar名称及目录,勾选build on make,点击apply->ok

菜单栏build->make project,即可生成jar包
这里要强调的就是:是否要将第三方jar包一并打包生成独立的jar,注意那个选项
2.混淆代码
为方便使用,可将allatori 工具复制到jar包所在文件夹下,

在config.xml中进行混淆相关配置

可根据情况调整。
进入cmd,进入到该文件夹,输入命令
java -Xms1024m -Xmx2048m -jar allatori.jar config.xml
即可生成混淆之后的jar包。
这里要备注的是:
1)config文件的配置:官方有文档说明,重点是<keep-names>和<ignore-classes>,一般main class要保留,我做的时候可能有些类或方法有依赖类,有时报错找不到,我就将这种包直接忽视,不混淆了。这样的结果可能就是弱混淆。还有些标签比如<classpath>添加依赖包。
2)我做的时候遇到了内存溢出的情况,这里就将-Xms1024m -Xmx2048m改大就好了,不过这个已经是改大的结果了。
3)报错:method code too large,这个问题我也没有解决,不过似乎不影响混淆结果。
4)有些类找不到报错,又不能忽视,就搜索带有这些类的jar包,添加依赖,重新生成jar,再混淆吧。使用<classpath>还可能报其他的错,这种问题一般也搜不到答案,可能是用的人比较少。
这个就这些吧,当时做的时候卡了很久,作为一只小白,开始完全使用allatori自带的教程bat,报错闪退,我都不知道怎么查看错误信息,后来知道输入pause命令了。。。还是推荐直接使用cmd输入命令吧。
3.生成exe
打开jsmooth,先设置skeleton,如果项目无图形界面,则选console wrapper,否则选择windows service,我是这样理解的。

进入executable,选择要生成的exe文件目录及名称,exe图标,current directory勾选即可

进入application,勾选use an embedded jar,选择要生成的exe的jar包,然后选择main class

进入jvm,勾选jvm bundle,选择jre所在位置

点击上方保存,输入名称,类型是jsmooth,自动带入
点击车轮形状的设置按钮,生成exe

进入cmd,进入exe所在文件夹,输入命令
***.exe,如果有参数,直接在后面加上即可。
这里要备注:
1)skeleton的选择;
2)main class的选择;
3)jre的选择,如果只是本机使用,配有jre,则不用选择,如果要发布,则要添加jre环境。
这就是基本过程说明。我再排个雷,这些情况会影响混淆或者生成exe,也可能是我有些东西不知道。
如果项目中有资源文件,是按照一般相对路径描述的,即没考虑生成jar包后的路径问题,那把资源文件和jar包及exe放在一个目录下,一般就没问题。
如果资源文件想一同放入jar包,那不能直接拖进去,即使程序中的路径描述考虑到了jar包相对路径的问题,后续混淆也会报错(malformed错误),我不知道是不是因为这样破坏了jar包,allatori识别不出来了。反正我试了是不行。
也许你会想,我先混淆jar包,再将资源文件拖进去,行不?行,我试了,jar包执行结果没问题,但生成exe的时候出错了,它找不到main class了。。。
所以最好的方式是将资源文件放在src目录下,这样就能一起打包成jar,后续混淆也没问题。但这里仍要强调:注意程序中的路径问题,这里是一切的关键。
做的时候痛不欲生,原来理理思路,也没干嘛,可能是搜不到说明,自己做的时候有些混乱,有些问题一时不能正确思考解决方式。
浙公网安备 33010602011771号