读书人

exe4j生成的exe资料反编译

发布时间: 2012-09-02 21:00:34 作者: rapoo

exe4j生成的exe文件反编译

转自:http://www.blogjava.net/cnfree/archive/2010/08/22/329559.html

?

现在网络上越来越流行.net和java写的客户端的小应用程序,而且后缀是exe。本文讨论的是如何从exe4j封装的exe文件中将自己想要的jar抽取出来。

exe4j一直是一种比较通用的java exe封装工具,但是其并没有将jar转换为本地文件,而是将jar文件通过特殊处理后,封装成的一个exe文件。因此只要我们了解了exe4j的原理,就可以将jar文件从exe文件中提取出来,并通过反编译工具来查看程序代码。

1. 分析Exe4J,得知其在添加文件到.exe时,使用0x88将文件内容Xor,所以第一步,我们需要将原始的数据提取出来:

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->import?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();
????}
}


2.分析提取出来的数据文件,使用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解压缩软件打开,看看是否抽取正确。

需要注意的是WinHex非注册版,只能保存280K大小的文件,更大的Jar文件,需要注册版的WinHex才行。

?

**************

?

注:可以用 ultraedit来查看十六进制,非常方便

读书人网 >编程

热点推荐