java exe 解包_解包Jar2exe加密的java源代码

前言

一直以来都不曾发现Java程序也可以打包成exe,直到遇见了Jar2exe, 于是对它产生了一点兴趣,各种资料知识点刷了一遍后,对它的原理有个一个初步的了解。原理很简单,Jar2exe实际上就是通过C++代码创建jvm,通过jni接口调用Java代码。其提供了多个设置,比如加密并且隐藏class file,本文主要分析Java代码的加密部分,还原出源代码,具体细节运行机制等待不表。

下载Jar2exe并打包一个样本

去官网下载并安装,随便找一个可以运行的jar程序,然后打包并勾选(Encrypt and hide class files)选项,一直下一步就好了。其提供了几天的免费试用,对于我们来说时间足够了。

java2exe_2018-05-15_17-41-38.jpg

猜测运行机制

先做一个大胆的猜测,jar2exe调用的是jni接口,那么程序的运行是离不开jre的,为啥?因为java是解释性语言呗,需要jvm虚拟机才能运行。从而可以知道,jar包并没有转换成C++代码,应该还是jar包,被藏在了某个地方,藏在哪里呢?先用火绒剑分析以下,通过火绒剑,并没有发现临时文件,是不是说明jar包就在样本文件的资源中,拿PE工具看一下,果然有一个资源文件,看前面字节C613,并不能确定就是jar包,也有可能是经过了加密,先假设就是加密过后的jar包。

java2exe_2018-05-15_18-26-42.jpg

OD调试程序,dump解密后的数据

如果猜的没错,样本应该是先获取资源数据,然后采用解密函数解密。所有先对LockResource()下断点,可以看到成功断下来了。快捷键alt+f9执行到用户代码区。对eax寄存器数据窗口跟随,看到了资源区的数据了。

java2exe_2018-05-15_18-41-33.jpg

对C61EF996数据下硬件访问断点,我们要定位到解密函数,按F9,断在了解密函数部分。eax=0049DA0,指向资源数据,取了第一个字节到al,循环了四次。

java2exe_2018-05-15_19-01-09.jpg

这个时候F8跟下去(忘了说,jar的头标记是504B(PK))。观察运算过程,运行到mov byte ptr ds:[ecx],al; 发现al中的C6解密为50,重复一次1E解密为4B。。。一切都简单了,数据窗口跟随地址,解密后的数据都在这里。

java2exe_2018-05-15_19-10-55-1.jpg

用lordpe将解密后的数据dump出来,用zip打开,可以看到所有的class文件

java2exe_2018-05-15_19-24-12.jpg

总结

所以说嘛,解释性语言,无论怎么加密,都是浪费时间,最终还是要经过jvm执行。

根据博主的不断重复调试,猜测应该是xor256stream加密算法,网上的资料比较少,只能看源码理解了。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值