如何制作Java可执行程序以及安装程序

上传人:ji****72 文档编号:39517324 上传时间:2018-05-16 格式:DOC 页数:10 大小:64KB
返回 下载 相关 举报
如何制作Java可执行程序以及安装程序_第1页
第1页 / 共10页
如何制作Java可执行程序以及安装程序_第2页
第2页 / 共10页
如何制作Java可执行程序以及安装程序_第3页
第3页 / 共10页
如何制作Java可执行程序以及安装程序_第4页
第4页 / 共10页
如何制作Java可执行程序以及安装程序_第5页
第5页 / 共10页
点击查看更多>>
资源描述

《如何制作Java可执行程序以及安装程序》由会员分享,可在线阅读,更多相关《如何制作Java可执行程序以及安装程序(10页珍藏版)》请在金锄头文库上搜索。

1、将将 JavaJava 程序转换成程序转换成 exeexe 文件的七种方法文件的七种方法(2006-02-04 13:10:03) 转载 分类: IT 时空 一、exe4j 说明:exe4j 可以将 Jar 文件制作成 exe 文件,但需 jre 支持,也可 将 Jar 文件放在外面。软件性质:共享软件二、JBuilder说明:新版本的 JBuilder 可以直接把工程制作成各系统的可执行文件, 包括 Windows 系统。软件性质:商业软件三、NativeJ说明:与 exe4j 功能类似。软件性质:共享软件四、Excelsior JET说明:可以直接将 Java 类文件制作成 exe 文件,

2、除 AWT 和 Swing 及第 三方图形接口外可不需 jre 支持(Java5.0 不行)。软件性质:共享软件五、jshrink说明:可将 Jar 文件打包进 exe 文件。同时具有混淆功能(这才是它 的主要功能)。软件性质:共享软件六、InstallAnywhere说明:打包工具,对 Java 打包最好用。可打包成各操作系统运行包。 包括 Windows 系统。软件性质:商业软件。七、InstallShieldX说明:与 InstallAnywhere 类似,但比 InstallAnywhere 功能强大。 相对的,比较复杂,不易上手,我现在还没学会。软件性质:商业软件。作者:舵手申明:如

3、转载请保证文章的完整性来源: extracts the minimal set of Java class files for an application, removes unused code and data, obfuscates symbolic names, finalizes code for optimized execution, and stores the results in a Java archive .jar file. Jshrink typically reduces program size by 30-40%. Jshrink obfuscated co

4、de is much harder to comprehend when decompiled, a claim that can be readily verified using Jshrinks built-in Java decompiler. What at first glance seems to be meaningful names in Jshrink obfuscated code are often reused system names, a Jshrink obfuscation technique called semantic recycling.一直没怎么用过

5、,闲来无聊想研究下它的功能,用 jshrink 打开一个 class 文件双击提示“Missing license key, see www.e- to request evaluation license”,以前申请了一个试用的 license key,恢复过系统,早丢了。java 写的,反编译出来看看,解压jar,并反编译所有的 class 文件,类被混淆过,这里要注意的是,有些方法混淆后名称和类名一样,但千万不要把它当作构造函数,否则可能会带来一点麻烦。在整个源代码中查找上面的报错字符串,居然没找到。在解压后的目录里找了一下,发现 I.gif 挺可怀,打开一看果然是加密了的东东,并不是

6、gif 文件,在 I.I.class 反编译源代码中果然发现了 I.gif,如下:InputStream inputstream = (new I().getClass().getResourceAsStream(“ + I + . + g + i + f);即然建立输入流读取方文件,肯定有解密过程,分析原代码后写出一个解密代码:import java.io.InputStream;public class I static byte COWY;static String append = new String256;static int close = new int256;public S

7、tring td(int i)int j = i if(closej != i)closej = i;if(i 0)i String s = new String(COWY, i, COWYi - 1 appendj = s;System.out.println(appendj);return appendj;public static void main(String args) tryInputStream inputstream = (new I().getClass().getResourceAsStream(“ + I + . + g + i + f);/这里他用I + . + g

8、+ i + f,如果我们直接查找 I.gif,肯定没有结果,所以当搜索 I.gif没找到时,/一定要试试这种方法,还有数组形式存放。if(inputstream != null)int i = inputstream.read() 16 | inputstream.read() 8 | inputstream.read();COWY = new bytei;int j = 0;byte byte0 = (byte)i;byte abyte0 = COWY;while(i != 0) int k = inputstream.read(abyte0, j, i);if(k = -1)break;i

9、 -= k;for(k += j; j k; j+)abyte0j = byte0;inputstream.close();catch(Exception exception) I i = new I();for (int j=0; j7200; j+ )/为什么这个 j 最大值为 7200,因为大概查看了一下源代码中调/用 I.I.I()这个方法的最大值就是这个,试图加大后,抛出异常。System.out.print(j+“:“);i.td(j);当上面的循环体里 j 为 4088 时字符串是 Missing license key, see www.e- to request evalua

10、tion license,在整个原代码是搜索 4088,发现只在 A.class中有,switch(getViewRect)case -1: case 0: / 0return true;case 1: / 001getChildCount();getJarEntry(I.I.I(4088);/Missing license key, see www.e- to request evaluation license/I.I.I(4088)返回的串return false;case 2: / 002getChildCount();getJarEntry(I.I.I(4168);/Evaluati

11、on license key has expired, purchase new key at www.e- false;case 3: / 003getChildCount();getJarEntry(I.I.I(4249);/Invalid license key/I.I.I(4249)返回的串return false;case 4: / 004getJarEntry(I.I.I(4269);/Internal error verifying license key/I.I.I(4269)返回的串return false;return false;不想分析注册 key 详细算法,暴破试一下

12、,把上面每个 case 子句里的代码变为 return true; 可能问题就能解决,用十六进制编辑器打开 A.class,查找 03AC,连续五个在一起,改为 04AC,现在程序已经可以正常运行,只是还有无 License 的提示对话框,那么把04AC(前面已修改)前的十个四字节,如:2AB7016B2A110FF8B8056DB7003A 全改为00,相当于汇编里的 nop 保存打包,运行就再没有提示对话框了。这样不完全暴破就已经成功,之所以说不完全是因为还有 Z.class 有类 A.class 的功能,读取 I.gif 文件并解密,我们并没有对 A.class 这个类的调用做跟踪分析,

13、这样很有可能还有一些地方有限制而我们没有破除掉。没什么技术性,但能为菜鸟破 JAVA 程序提示一点思路。今天搜了一下,才发现这个早有人已经写出注册机了,牛人多多。不过想研究暴破的可以从下面下载本人修改过的和原版程序:链接暂时不再提供java-package 包的使用方法 当一个大型程序交由数个不同的程序人员开发时,用到相同的类名是很有可能的,那么如果发生了这样的事件我们该怎么办那?,在我们 java 程序开发中为了避免上述事件,提供了一个包的概念(package),那么既然有了这样一种方法能避免上述事件,那么我们怎样使用 package那?,使用方法很简单我们只需要在我们写的程序第一行使用 p

14、ackage 关键字来声明一个包就行了,例如我们来声明一个名为 pack1 的包名,package pack1;好了下面我们就利用范例来说明 package 的使用方法,及其编译运行的方法。假设我们在 d 盘下的新建一个文件(pack1),在 pack1 文件内包含两个 java 程序一个是Showmethod.java 和 Testshow.java;Showmethod.java1.package pack1;/在这里把 Showmethod 类纳入到 pack1 包内 2.class Showmethod 3. public void show() 4. System.out.print

15、ln(“Im a show method() of Showmethod class“); 5. 6. 7. Testshow.java;1. package pack1;/在这里把 Testshow 类也纳入到 pack1 包内 2.public class Testshow 3. public static void main(String args) 4. Showmethod sm=new Showmethod(); 5. sm.show(); 6. 7. 8. 下面我们就先来看一下如何编译这两个位于同一个包内的 java 程序,1:javac pack1Showmethod.java2:javac pack1Testshow.java这就是编译的方法 pack1 是包名,包名后面跟的就是我们要编译的那个类名,编译好后pack1 目录下回声成两个 class 文件,运行方法:java pack1.Testshow注意运行时要指出包名,包名后有一个点然后是类名。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号