你若安好
便是晴天

解包Jar2exe加密的java源代码

前言

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

下载Jar2exe并打包一个样本

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

猜测运行机制

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

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

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

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

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

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

总结

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

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

原创作品未经允许不得转载:WTF博客 » 解包Jar2exe加密的java源代码

评论 4

文章评论已关闭!

  1. #1

    站长安安 网上JAR2EXE脱壳文档好像很少
    今天刚好搜寻到你的网站来 真是幸运
    小弟有个JAR2EXE加密代码想请你看看

    MT2年前 (2019-08-23)回复
    • 按照文章中的思路,举一反三,基本上可以解决大部分问题。建议你去简单研究一下class字节码的运行原理,jvm运行机制。然后hook相关函数,应该能dump出来所有的class文件。

      博主2年前 (2019-08-23)回复
  2. #2

    大佬不好意思我没有这些基础有点困难@@” 可否请大佬帮忙 愿意有偿

    MT2年前 (2019-08-23)回复
  3. #3

    这个我也测试过好像不行@@
    https://github.com/whereisr0da/exe2jar

    MT2年前 (2019-08-23)回复