2019独角兽企业重金招聘Python工程师标准>>>

从exe4j生成的exe中抽取jar文件 博客分类: java

现在网络上越来越流行.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才行。

转载于:https://my.oschina.net/xiaominmin/blog/1597872

从exe4j生成的exe中抽取jar文件相关推荐

  1. exe4j生成的exe文件反编译

    现在网络上越来越流行.net和java写的客户端的小应用程序,而且后缀是exe.本文讨论的是如何从exe4j封装的exe文件中将自己想要的jar抽取出来. exe4j一直是一种比较通用的java ex ...

  2. 使用jar命令替换jar包中的jar文件

    替换jar包中的jar文件(一般jar不会压缩使用-0表示不压缩) 1. 根据文件名,查询出文件目录 jar -tvf xxxx.jar | grep jdbc.jar 2. 将需要修改的文件,解压出 ...

  3. 怎样在nexus 中 搜索到远程maven仓库中的jar 文件

    怎样在nexus 中 搜索到远程maven仓库中的jar 文件 url: http://www.oschina.net/question/95712_21999 点击Administration菜单下 ...

  4. Pyinstaller打包: 将资源文件或文件夹打包到最后生成的exe中

    前提:用pyinstaller打包时部分资源文件可以利用qrc转成py文件来读取,但是有部分文件类型不适用. 原理:Pyinstaller 将资源文件一起打包到exe中.当exe运行时,会生成一个临时 ...

  5. EXE4J生成的exe文件自动请求管理员权限(UAC)

    Visual Studio UAC设置[/caption] 这时候就要用到Resource Hacker这个工具来对打包好的EXE文件进行修改 下载地址: 链接: http://pan.baidu.c ...

  6. java中的jar文件

    官方英文介绍******************************************************************************************* In ...

  7. 如何在Windows10系统中修改.jar文件的默认应用

    普通方式(无效) 通常,我们在Windows10系统中修改文件的默认应用有两种方式: 打开系统设置->应用->默认应用->按文件类型指定默认应用,找到相应的文件类型后进行修改: 选中 ...

  8. 使用AMDU工具从无法MOUNT的DISKGROUP中抽取数据文件

    AMDU是ORACLE针对ASM开发的源数据转储工具,其全称为ASM Metadata Dump Utility(AMDU) AMDU具体以下三个主要功能: 1. 将ASM DISK上的元数据转储到文 ...

  9. 向Maven的本地库中添加jar文件

    有时我们要用的 maven 依赖项在官方repo库中找不到,然而我们从其他渠道获得了依赖项中的所有jar文件,本文记录了如何向本地库添加jar文件. 从复杂到简单,有三种方法: 使用 maven 的仓 ...

最新文章

  1. vue 手写一个时间选择器
  2. centos下 keepalived1.2.8配置文件
  3. 使用说明 vector_Paddlepaddle学习|Ubuntu环境使用 Mahout 进行朴素贝叶斯模型的训练和测试...
  4. 保留凸性的方式:一个凸函数在一个随机变量上的期望仍然是凸函数
  5. 解决sql脚本文件太大无法打开的问题
  6. 基础总结篇之八:创建及调用自己的ContentProvider
  7. Ruby之父讲什么是闭包
  8. 匿存函数,内存函数,递归函数,二分法查找
  9. CrossOver for Mac 怎么用?
  10. WordPress简单好看的线报主题baolog
  11. 工商银行java script error windows7_Win8.1装工行网银提示"called runscript when not marked in progress"的解决方法...
  12. php是世界上最好的语言吗
  13. Linux下线程经典问题(生产者消费者问题,哲学家问题...)
  14. 下载bilibili视频
  15. 华为云ManageOne北向对接之基本名词概念(一)
  16. 如何做好公众号编辑—壹间网络
  17. Bootstrap 的基本使用方法
  18. 关于远心镜头的基础知识
  19. 『注册中心』Consul微服务注册中心的使用及相关集群搭建
  20. 游戏输入控制的五条黄金法则

热门文章

  1. 使用第三方插件,对office,PDF 进行预览
  2. composer的简单使用
  3. ansible+heartbeatV2构建高可用群集
  4. sql语句练习(一)
  5. PHP 入门 - 9.安全
  6. 将 gitblog 的博客内容搬迁到 CSDN
  7. 记录一个AndroidX和Android support库不能共存的坑
  8. C++11新特性,利用std::chrono精简传统获取系统时间的方法
  9. 浅谈c/c++typedef和#define区别[转]
  10. sqlserver数据库大型应用解决方案总结 数据库负载均衡