提取Jar2Exe源代码[JavaAgent监控法]

碰到了一个这样的问题,废了半天劲发现了一个比较好玩有用的方法,小小记录下
本文主要是针对jar2exe这个软件加密jar文件,我们想得到原文件。一般情况下jar2exe有三种处理方式:明文、隐藏、加密。

    明文:很简单的处理,zip解压一下class文件都在里面

    隐藏:Jar包会被经过简单的加密之后存储在Exe程序中的资源中

    加密+隐藏:Jar包会被加密,并且所有文件名都会被哈希,之后存储在Exe程序的资源中。这是最常见的一种加密,也是相对最麻烦的一种提取方式。

面对后两种情况下,通常来说,我们如果想要提取完整的jar包,必须用ODB调程序执行到解密完成调用jar的位置,然后dump内存把所有内容dump下来。

这里学习一种方法(但是方法有一定缺点,我们后面讲把)
首先构建一个Java代理(JavaAgent),目的是让程序员可以更加灵活的监控Java虚拟机的运行。我们要实现的是监控ClassLoader,在它要加载一个类的时候,dump出这个类来并写入一个jar文件中。

然后激活该JavaAgent,接着运行Jar2Exe编译的Exe程序。尽可能多的测试程序中的功能,点击不同的按钮,让更多的类文件被加载到内存中,这样它们就会被dump出来。

但是缺点是很明显的
1.如果class没有加载就dump不到了
2.jar中的图片、音频等资源是得不到的。

重点来了!下面讲步骤

1.准备工作

下载我们写好的监控程序(当然了我这种辣鸡怎么会写…脚本小子…)
下载地址https://github.com/ravinow/e2j

然后放到同一个目录下

打开命令行并进入要破解的程序所在目录,在命令行输入以下命令设置JavaAgent的加载

set JAVA_TOOL_OPTIONS=-javaagent:e2j-agent-1.6.jar

该命令是让java程序在加载一个类时会自动调用JavaAgent

2.操作

大量测试执行程序, 结束程序,然后在当前目录下会多出一个e2j-dump.jar,这就是提取出的类文件包。

顺手抄了大佬的随笔

另附资源文件的提取方法:

Java毕竟是一种在虚拟机中运行的语言,所有的操作都需要JRE的支持。所以我们可以修改JRE中的有关加载资源的API的代码,在加载资源的同时把它们dump出来。原理类似上面JavaAgent的实现。效果也同JavaAgent一样,在程序运行时必须让资源文件被加载到内存中才能dump出来。



具体步骤是:

1、 打开JDK安装目录下的src.zip,这里有大部分Java API的源文件。

2、 找到java/lang/class.java,修改getResourcegetResourceAsStream方法,使它们在返回结果前dump出要读取的资源文件。如果需要的话一并修改其它涉及到加载资源文件的类和方法。

3、编译修改过的源文件,并将编译出来的class文件复制进JRE安装目录下的lib/rt.jar包中,覆盖原文件。(注意:编辑的JDK源文件版本必须与现有JRE版本相匹配,不然会出现问题)

4、运行目标程序,尽可能多的测试功能,让资源文件被加载。这样你就能在目录下找到dump出来的资源文件了。

不过我的代码水平可能还改不了,先记录着把,emmm
感谢LonelyInAustralia大佬了,文不多但是对我这个辣鸡启发很大。
(不管怎么样貌似还是把jar提取出来比较完整…)

















学习来源:
http://blog.csdn.net/ravinow/article/details/51123839

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值