本文提供的方法仅供学习用,不对结果负责。

总体思路

  1. 定位授权或加密类
  2. 分析加密/授权方法
  3. 修改Jar包文件
  4. 重新打包

这里提供一种提供试用版软件的破解方法。假设程序需要输入试用License文件才能试用。具体的方法步骤如下。

定位加密文件和类

定位的方法是苦功夫,至少我是这么干的,打开你安装的程序的文件夹,找一找有点像的jar包名称,如active,license等,这个靠人品了,具体的软件有所不同。

工具

用一个你熟悉的Java反编译器来反编译Java的class文件,我用jd-gui,官网在这里
运行JD后,把你要分析的jar包拖进去或者用文件打开,就能看到你要的“Java源代码”了

定位

接下来就是苦功夫了,如果我们没有能够一下找到license授权管理所在的jar包,我们就要慢慢找了,可以把你认为有可能性的包都拖进来,用JD的search功能搜关键字,如license,找到后去慢慢分析,如果不是则可以换一个别的关键字试试。

分析加密/授权方法

如果运气不错,你能碰到一个比较简单的授权方法,如通过密码,那我们就能够通过前一步骤中打开的Java类找到对应的解密方法,然后反推加密方法。
对于支持试用类的软件,也比较好办,找到试用管理的函数或者类,我们自然也就找到了加密解密的方法了,这种时候可以通过编写一个keygen生成一个密码或文件。

修改Jar包文件

我们谈谈修改Jar包里边的文件,这个也有很多种方法,我用的是javassist-3.15.0-GA,官网在这里,使用方法请参考这篇文章,我写的代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
package modifyclass;
import java.io.IOException;
import java.util.Arrays;
import javassist.*;

public class modifyclass {
	public static void main(String[] args) throws NotFoundException, 
CannotCompileException, IOException, InstantiationException,
IllegalAccessException
{ ClassPool pool = ClassPool.getDefault();
CtClass cc = pool.get("com.test.license");
CtMethod cm = cc.getDeclaredMethod("getPublicKey");
cm.insertBefore(func);
cc.writeFile();
}

private static String func =
"byte [] data = new byte[] { 95, 63, 46, 79 }; key_data = data;" }

这个程序运行后会在com/test文件夹下生成一个新的license.class文件,这个文件就是我们修改过得文件了。

重新打包文件

用jar命令来重新打包

  1. 将原来的jar包解压出来,命令jar xvf license.jar
  2. 将前一步骤生成的class文件替换jar包解压出来的文件
  3. 使用jar命令重新打包,命令为jar cvf license.jar com/ META-INF/
    解释一下这条命令,license.jar是我们要打包的文件名称,后边的com/ META-INF/是要打包进去的文件或文件夹。

这样基本就完成了,剩下的事情就是用了。当然,如果是要写keygen的话,需要编写其他的代码。

其他

有时候我们会碰到一些混淆的代码,难度对应会增加,但基本思路还是差不太多的。