Feeling

              三人行,必有我?guī)熝?/p>

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

          exe4j一直是一種比較通用的java exe封裝工具,但是其并沒有將jar轉換為本地文件,而是將jar文件通過特殊處理后,封裝成的一個exe文件。因此只要我們了解了exe4j的原理,就可以將jar文件從exe文件中提取出來,并通過反編譯工具來查看程序代碼。

          1. 分析Exe4J,得知其在添加文件到.exe時,使用0x88將文件內容Xor,所以第一步,我們需要將原始的數(shù)據(jù)提取出來:
          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.分析提取出來的數(shù)據(jù)文件,使用WinHex查看其16進制代碼。由于Jar文件的開頭總是PK開頭,并且總包含有manifest.mf文件,并且結尾總是有3個00,同時結尾段有整個Jar包文件的索引,我們可以根據(jù)這一特性來分析我們需要的片段。

          1、搜索Jar的manifest,然后往前找,找到的第一個PK段,即為一個Jar的開頭。
          2、查看片段里Jar里的每個class信息,直到最后的文件索引片段。
          3、一個Jar的結束片段位于索引片段之后,仍然包含著PK段,并且最后包含著3個00,且這3個00距離PK大概20個字節(jié)左右

          根據(jù)以上3條準則,足以提取整個Jar數(shù)據(jù)段,然后導入新文件中,并且以zip字段命名,嘗試用ZIP解壓縮軟件打開,看看是否抽取正確。

          需要注意的是WinHex非注冊版,只能保存280K大小的文件,更大的Jar文件,需要注冊版的WinHex才行。

          評論

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

          # 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怎么提取呢  回復  更多評論
            


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


          網(wǎng)站導航:
           
          GitHub |  開源中國社區(qū) |  maven倉庫 |  文件格式轉換 
          主站蜘蛛池模板: 南澳县| 白银市| 乐业县| 山东省| 醴陵市| 高清| 嘉义市| 彭山县| 策勒县| 寻乌县| 万安县| 疏附县| 油尖旺区| 沈丘县| 夹江县| 乌拉特后旗| 乐东| 静乐县| 马边| 桂林市| 崇明县| 伊金霍洛旗| 灌云县| 西乌| 天全县| 长沙市| 应用必备| 汝南县| 西贡区| 平乐县| 五家渠市| 溧水县| 广南县| 清水县| 龙口市| 象州县| 盐亭县| 乃东县| 昭苏县| 鸡西市| 铁力市|