Feeling

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

             ::  :: 新隨筆 :: 聯(lián)系 ::  :: 管理 ::
            185 隨筆 :: 0 文章 :: 392 評論 :: 0 Trackbacks
          <2015年7月>
          2829301234
          567891011
          12131415161718
          19202122232425
          2627282930311
          2345678

          常用鏈接

          留言簿(53)

          隨筆檔案(85)

          朋友圈

          搜索

          積分與排名

          最新評論

          閱讀排行榜

          評論排行榜

          現(xiàn)在網(wǎng)絡(luò)上越來越流行.net和java寫的客戶端的小應(yīng)用程序,而且后綴是exe。本文討論的是如何從exe4j封裝的exe文件中將自己想要的jar抽取出來。

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

          1. 分析Exe4J,得知其在添加文件到.exe時(shí),使用0x88將文件內(nèi)容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]); // 可以將整個(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();
              }
          }

          2.分析提取出來的數(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解壓縮軟件打開,看看是否抽取正確。

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

          評論

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

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

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

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


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


          網(wǎng)站導(dǎo)航:
           
          GitHub |  開源中國社區(qū) |  maven倉庫 |  文件格式轉(zhuǎn)換 
          主站蜘蛛池模板: 乳源| 嵩明县| 高密市| 夏邑县| 大丰市| 康保县| 临安市| 营口市| 射阳县| 越西县| 易门县| 麻阳| 二连浩特市| 巫溪县| 成安县| 寿光市| 汶川县| 邓州市| 临沂市| 德州市| 彝良县| 周宁县| 泸溪县| 鹤峰县| 江都市| 汉沽区| 西充县| 醴陵市| 昌平区| 北碚区| 木里| 双柏县| 霸州市| 会泽县| 肇源县| 绥德县| 安图县| 当阳市| 恩施市| 南召县| 小金县|