Feeling

              三人行,必有我師焉

             ::  :: 新隨筆 :: 聯系 ::  :: 管理 ::
            185 隨筆 :: 0 文章 :: 392 評論 :: 0 Trackbacks
          <2010年8月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          2930311234

          常用鏈接

          留言簿(53)

          隨筆檔案(85)

          朋友圈

          搜索

          積分與排名

          最新評論

          閱讀排行榜

          評論排行榜

          現在網絡上越來越流行.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 三人行,必有我師焉 閱讀(6835) 評論(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倉庫 |  文件格式轉換 
          主站蜘蛛池模板: 江华| 四平市| 怀集县| 麦盖提县| 瓮安县| 阿克苏市| 类乌齐县| 巴彦淖尔市| 房山区| 东方市| 兴海县| 阜宁县| 南澳县| 来宾市| 夏河县| 固阳县| 三门县| 莱阳市| 黑龙江省| 遂昌县| 大渡口区| 芦山县| 云浮市| 伊春市| 冀州市| 玉门市| 铜梁县| 阿鲁科尔沁旗| 涟水县| 达尔| 陆河县| 天长市| 岳池县| 和龙市| 柳江县| 罗甸县| 湟源县| 扎赉特旗| 宣恩县| 米林县| 福鼎市|