现在网络上越来越流行.net和java写的客户端的小应用程序,而且后缀是exe。本文讨论的是如何从exe4j封装的exe文件中将自己想要的jar抽取出来。
exe4j一直是一种比较通用的java exe封装工具,但是其并没有将jar转换为本地文件,而是将jar文件通过特殊处理后,封装成的一个exe文件。因此只要我们了解了exe4j的原理,就可以将jar文件从exe文件中提取出来,并通过反编译工具来查看程序代码。
1. 分析Exe4J,得知其在添加文件到.exe时,使用0x88将文件内容Xor,所以第一步,我们需要将原始的数据提取出来:
exe4j一直是一种比较通用的java exe封装工具,但是其并没有将jar转换为本地文件,而是将jar文件通过特殊处理后,封装成的一个exe文件。因此只要我们了解了exe4j的原理,就可以将jar文件从exe文件中提取出来,并通过反编译工具来查看程序代码。
1. 分析Exe4J,得知其在添加文件到.exe时,使用0x88将文件内容Xor,所以第一步,我们需要将原始的数据提取出来:
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();
}
}
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();
}
}