Feeling

              三人行,必有我師焉

             ::  :: 新隨筆 :: 聯系 ::  :: 管理 ::
            185 隨筆 :: 0 文章 :: 392 評論 :: 0 Trackbacks
          現在網絡上越來越流行.net和java寫的客戶端的小應用程序,而且后綴是exe。本文討論的是如何從exe4j封裝的exe文件中將自己想要的jar抽取出來。

          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();
              }
          }

          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才行。
          posted on 2010-08-22 01:03 三人行,必有我師焉 閱讀(6827) 評論(4)  編輯  收藏

          評論

          # re: 從exe4j生成的exe中抽取jar文件 2012-09-03 22:33 silenceleaf
          這個辦法對于新的EXE4J文件似乎已經失效了,哎……  回復  更多評論
            

          # re: 從exe4j生成的exe中抽取jar文件[未登錄] 2015-02-06 14:18 test
          成功提取  回復  更多評論
            

          # re: 從exe4j生成的exe中抽取jar文件 2015-07-23 16:50 游客
          今天使用了該方法,也成功把代碼找回來了。多些樓主。  回復  更多評論
            

          # re: 從exe4j生成的exe中抽取jar文件[未登錄] 2015-07-29 08:16 chan
          不知道用j2ewiz打包的java怎么提取呢  回復  更多評論
            


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          GitHub |  開源中國社區 |  maven倉庫 |  文件格式轉換 
          主站蜘蛛池模板: 宁陵县| 临夏市| 新余市| 绥阳县| 博白县| 鄂托克旗| 新丰县| 林芝县| 喀什市| 富裕县| 胶州市| 乐平市| 二连浩特市| 广东省| 连城县| 隆回县| 博白县| 宁波市| 新巴尔虎左旗| 荥阳市| 凤台县| 扎兰屯市| 普兰县| 镇江市| 正宁县| 南京市| 彩票| 肇庆市| 葵青区| 大丰市| 汕尾市| 吉木萨尔县| 伊川县| 广汉市| 康马县| 南投县| 司法| 刚察县| 凯里市| 河池市| 汉寿县|