原創(chuàng)|其它|編輯:郝浩|2012-10-11 13:15:17.000|閱讀 404 次
概述:今天看到一個(gè)比較實(shí)用的安裝文件制作軟件Exe4j ,本文將介紹如何分離出Exe4j打包的Java可執(zhí)行文件中的jar。
# 界面/圖表報(bào)表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
今天看到一個(gè)比較實(shí)用的安裝文件制作軟件Exe4j ,本文將介紹如何分離出Exe4j打包的Java可執(zhí)行文件中的jar。
其中的關(guān)鍵:
exe文件的解碼(OR 88)
使用WinHex從解碼后的文件中分離出jar文件
其中第一步在文中已經(jīng)給出了源代碼如下:
mport java.io.*; import java.util.*; public class gen { public static void main(String args[]) throws IOException { FileInputStream fin = new FileInputStream(args[0]); // 可以將整個(gè)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(); }
}
第二步在文章中是這樣描述的:
分析提取出來的數(shù)據(jù)文件,使用WinHex查看其16進(jìn)制代碼。由于Jar文件的開頭總是PK開頭,并且總包含有manifest.mf文件,并且結(jié)尾總是有3個(gè)00,同時(shí)結(jié)尾段有整個(gè)Jar包文件的索引,我們可以根據(jù)這一特性來分析我們需要的片段。
1、搜索Jar的manifest,然后往前找,找到的第一個(gè)PK段,即為一個(gè)Jar的開頭。
2、查看片段里Jar里的每個(gè)class信息,直到最后的文件索引片段。
3、一個(gè)Jar的結(jié)束片段位于索引片段之后,仍然包含著PK段,并且最后包含著3個(gè)00,且這3個(gè)00距離PK大概20個(gè)字節(jié)左右根據(jù)以上3條準(zhǔn)則,足以提取整個(gè)Jar數(shù)據(jù)段,然后導(dǎo)入新文件中,并且以zip字段命名,嘗試用ZIP解壓縮軟件打開,看看是否抽取正確。
這個(gè)步驟需要不斷嘗試才能得到正確的文件,通過實(shí)踐發(fā)現(xiàn)有更簡(jiǎn)單的方法:在解碼后的文件中,如果包含多個(gè)jar文件,則之間用十六進(jìn)制88分隔,每個(gè)jar文件均以PK開始,因此可以在WinHex中這樣操作:
搜索十六進(jìn)制串:88888888504B03040A00,其中前面的88分隔符可以根據(jù)需要調(diào)整數(shù)量,將找到的PK(504B)標(biāo)注為塊的開始,按F3再次搜索此特征串,從找到的下一個(gè)位置處往前搜索到第一個(gè)非88的字節(jié)作為塊的結(jié)束,然后在Edit|Block中將選中的塊插入到新文件即可,現(xiàn)在找到的PK的位置即為下一個(gè)jar文件的開始。依次類推,可分離出所有的jar文件,注意:最后一個(gè)jar文件的結(jié)束是PK200 (即jar文件所使用的壓縮算法)。
經(jīng)過實(shí)踐,這個(gè)方法能快速地找到并分離Exe4j打包的exe文件中的jar文件。
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請(qǐng)務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請(qǐng)郵件反饋至chenjj@fc6vip.cn
文章轉(zhuǎn)載自:CCF技術(shù)論壇