原創|其它|編輯:郝浩|2012-10-11 13:15:17.000|閱讀 404 次
概述:今天看到一個比較實用的安裝文件制作軟件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@fc6vip.cn
文章轉載自:CCF技術論壇