JAVA逆向

Java 逆向工程- 解除封印- 执行结果

最近在试用某软体,试用期太短又被限制功能,想延长试用期限跟打开被限制的功能。
所以就诞生了此篇解除封印教学,呼吁请支持正版!

前言

该付费软体是用Java开发,并打包成jar档。此教学适用于没有被混淆过的jar档。
怕有法律问题,故不公开软体名称。以下以target.jar代称。

执行程式

首先我们要确定target.jar能被正常执行。我用的target.jar是用console来执行,执行画面如下:

Java 逆向工程- 执行结果

查看原始码

使用Java Decompiler打开target.jar,可以浏览jar档里面的内容,并能看到编译后的class以原始码的方式呈现。展开target.jar找到名称较为关键的字眼(如:License、Validate),看功力也看运气。
target.jar我有找到LicenseProvider.class,大概看一下程式码后,可以判断出它从外部载入参数,读入记忆体中,包含了限制条件即使用期限等等(如下图)。

Java 逆向工程- 查看原始码

模拟物件

由于授权资讯跟限制条件是在LicenseProvider 载入,只要把他改写,就可以成功延长授权,步骤如下:

1. 用eclipse 开新Java 专案(或其它Java IDE)

Java 逆向工程- eclipse 开新Java 专案- 1

2. 专案名称跟LicenseProvider 的package name 相同

Java 逆向工程- eclipse 开新Java 专案- 2

3. 在该专案建立新的class,名称为LicenseProvider

Java 逆向工程- 建立LicenseProvider

4. 将Java Decompiler 读到的LicenseProvider复制到LicenseProvider.java

Java 逆向工程- 编辑LicenseProvider - 1

5. 改掉限制条件,并延长使用期限

Java 逆向工程- 编辑LicenseProvider - 2

6.因程式码少了外部reference ,所以载入原本的target.jar

Java 逆向工程- 载入原jar

7. 进行编译

Java 逆向工程- 编译

8.用WinRAR把原本的target.jar打开,并用编译后的LicenseProvider.class取代

※记得把eclipse跟Java Decompiler关掉,不然target.jar会被咬死不能编辑内容*
Java 逆向工程- 取代LicenseProvider.class

解除封印

回到console再次执行,执行画面如下:

Java 逆向工程- 解除封印- 执行结果

转载:https://blog.johnwu.cc/article/java-reverse-engineering.html

原文地址:https://www.cnblogs.com/DeeLMind/p/7640780.html