彩票走势图

如何分离出Exe4j打包的Java可执行文件中的jar

原创|其它|编辑:郝浩|2012-10-11 13:15:17.000|阅读 358 次

概述:今天看到一个比较实用的安装文件制作软件Exe4j ,本文将介绍如何分离出Exe4j打包的Java可执行文件中的jar。

# 慧都年终大促·界面/图表报表/文档/IDE等千款热门软控件火热促销中 >>

今天看到一个比较实用的安装文件制作软件Exe4j ,本文将介绍如何分离出Exe4j打包的Java可执行文件中的jar。

其中的关键:

exe文件的解码(OR 88)

使用WinHex从解码后的文件中分离出jar文件

其中第一步在文中已经给出了源代码如下:

 

mport java.io.*;
import java.util.*;
public class gen {
public static void main(String args[]) throws IOException {
FileInputStream fin = new FileInputStream(args[0]); // 可以将整个exe文件解码
FileOutputStream fout = new FileOutputStream(args[1]);
BufferedInputStream bin = new BufferedInputStream(fin);
BufferedOutputStream bout = new BufferedOutputStream(fout);
int in = 0;
do {
in = bin.read();
if (in == -1)
break;
in ^= 0x88;
bout.write(in);
} while (true);
bin.close();
fin.close();
bout.close();
fout.close();
}

}

第二步在文章中是这样描述的:

分析提取出来的数据文件,使用WinHex查看其16进制代码。由于Jar文件的开头总是PK开头,并且总包含有manifest.mf文件,并且结尾总是有3个00,同时结尾段有整个Jar包文件的索引,我们可以根据这一特性来分析我们需要的片段。

1、搜索Jar的manifest,然后往前找,找到的第一个PK段,即为一个Jar的开头。

2、查看片段里Jar里的每个class信息,直到最后的文件索引片段。

3、一个Jar的结束片段位于索引片段之后,仍然包含着PK段,并且最后包含着3个00,且这3个00距离PK大概20个字节左右根据以上3条准则,足以提取整个Jar数据段,然后导入新文件中,并且以zip字段命名,尝试用ZIP解压缩软件打开,看看是否抽取正确。

这个步骤需要不断尝试才能得到正确的文件,通过实践发现有更简单的方法:在解码后的文件中,如果包含多个jar文件,则之间用十六进制88分隔,每个jar文件均以PK开始,因此可以在WinHex中这样操作:

搜索十六进制串:88888888504B03040A00,其中前面的88分隔符可以根据需要调整数量,将找到的PK(504B)标注为块的开始,按F3再次搜索此特征串,从找到的下一个位置处往前搜索到第一个非88的字节作为块的结束,然后在Edit|Block中将选中的块插入到新文件即可,现在找到的PK的位置即为下一个jar文件的开始。依次类推,可分离出所有的jar文件,注意:最后一个jar文件的结束是PK200 (即jar文件所使用的压缩算法)。

经过实践,这个方法能快速地找到并分离Exe4j打包的exe文件中的jar文件。


标签:

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@pclwef.cn

文章转载自:CCF技术论坛

为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
扫码咨询


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP