首页
社区
课程
招聘
java验证license破解手记:CPP Test 6.5 [原创]
发表于: 2005-12-26 22:02 12238

java验证license破解手记:CPP Test 6.5 [原创]

2005-12-26 22:02
12238

java 验证license 破解手记:
Parasoft C++ Test Pro v6.5.8.1

C++Test    64.5 MB    (last update 2005-Oct-27)
http://www.parasoft.com/jsp/downloads/cpptest/cpptest_win32_6.5.8.1_pro.exe

Parasoft.C.Plus.Plus.Test.Pro.v6.5.8.1-SHOCK
这个是有问题的,他只是破解了Toolkit.dll,可以运行C++TestW.exe进行GUI测试的。
可是强大的comandline没有破解到。这样你要套用makefile对整个工程进行test就不可能了。

G:\editg\CPPTest65\bin>cpptest t.c
There is no license to run command line.
Please launch C++Test GUI to enter license details.

用c32asm反编译可以得看到他导入alex.dll的几个函数验证license:
ALEX.DLL:??0RegistryKey@@QAE@W4PredefinedKey@0@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@W4Mode@0@W4Access@0@@Z
ALEX.DLL:?isValid@RegistryKey@@QBE_NXZ
......

反编译ALEX.DLL,分析这些函数,太多,太复杂,找不到关键点。
从error message 入手,用winhex搜索ALEX.DLL,包括ansi/unicode,并未发现“There is no license to run command line”字符串。
用uedit对整个bin目录下所有文件搜索,也未发现。那么,这一句license error message从那里冒出来得?

G:\editg\CPPTest65\bin>cpptest t.c之后,
在系统temp目录下发现一个文件Toolkit16970.log,主要内容如下。
[INFO] Checking main feature...
[INFO] Version: Application: C++Test 6.5
[INFO] License configured
[INFO] Final status: 0
[INFO] checkConfiguration(t):finish
[INFO] cancelOtherThreads:begin
[INFO] cancelOtherThreads:finish
[INFO] checkConfiguration:finish
[INFO] isFeatureConfigurated returned ErrorCode:  -3
[toolkit.modules.common.license.LicenseConfigurationException: isFeatureConfigurated returned ErrorCode:  -3
[        at toolkit.modules.common.license.LicenseUtils.isFeatureConfigurated(LicenseUtils.java:177)
[        at toolkit.modules.common.license.LicenseModule.getFeatureStatus(LicenseModule.java:392)
[        at com.parasoft.cpptest.app.LicenseManager.printErrorMessage(LicenseManager.java:814)
[        at com.parasoft.cpptest.app.LicenseManager.checkLicense(LicenseManager.java:424)
[        at com.parasoft.cpptest.app.ModuleTest.mainSlave(ModuleTest.java:1539)
[        at com.parasoft.cpptest.app.ModuleTest.main(ModuleTest.java:1376)

这时想到这个东西有很大一部分是java写的。发现bin\jars有一堆.jar文件。
其中有一个license.jar.因为.jar文件就是zip压缩的一堆.class文件,
于是用winrar解压了这个.jar。
可见,LicenseUtils.java的isFeatureConfigurated返回-3,(引起一系列后续处理),表示没有license。

去下了个Jad - the fast JAva Decompiler,和它的GUI前端FrontEnd Plus v1.04:
http://www.kpdus.com/jad.html#download
顺便分析了FrontEnd的注册码:
--------------cut--------------------
REGEDIT4

[HKEY_CURRENT_USER\Software\FrontEnd Plus]
"First Name"="readyu"
"Last Name"="#newsmth"
"Serial No"="22249790-678B4188-06D766F0"
--------------end---------------------

反编译LicenseUtils.class,看函数,我考,是boolean,太爽了,从这里看,直接return true应该表示成功:
public static synchronized boolean isFeatureConfigurated(LicenseFeature testedLicensefeature, Hashtable featuresStates)
        throws LicenseConfigurationException
    {
        int dfeaturesStatus = getFeatureFailReasonInt(testedLicensefeature, featuresStates);
        if(dfeaturesStatus == 0)
            return true;
        if(dfeaturesStatus == 7 || dfeaturesStatus == 9)
            return false;
        else
            throw new LicenseConfigurationException("isFeatureConfigurated returned ErrorCode: ", dfeaturesStatus);
    }
   
修改思路:   
        if(dfeaturesStatus == 0)
            return true;
直接改为:
       return true;                 
   
LicenseUtils.class就是JVM的机器码了,没法直接改。反编译出来的LicenseUtils.java也只有阅读价值,
根本编译不过。

去下了一个jclasslib,开源的jvm bytecode反汇编工具,看class的JVM汇编指令。
http://puzzle.dl.sourceforge.net/sourceforge/jclasslib/jclasslib_windows_3_0.zip

用jclasslib打开LicenseUtils.class, isFeatureConfigurated的JVM汇编代码如下:
0 aload_0
1 aload_1
2 invokestatic #15 <toolkit/modules/common/license/LicenseUtils.getFeatureFailReasonInt>
5 istore_2
6 iload_2
7 ifne 12 (+5)
10 iconst_1
11 ireturn
12 iload_2
13 bipush 7
15 if_icmpeq 24 (+9)
18 iload_2
19 bipush 9
21 if_icmpne 26 (+5)
24 iconst_0
25 ireturn
26 new #16 <toolkit/modules/common/license/LicenseConfigurationException>
29 dup
30 ldc #17 <isFeatureConfigurated returned ErrorCode: >
32 iload_2
33 invokespecial #18 <toolkit/modules/common/license/LicenseConfigurationException.<init>>
36 athrow

思路:只要把条件语句
7 ifne 12 (+5)
NOP调即可,不让它判断非0跳转,乖乖的return 1.

可是我不认识java的机器码,怎么改呢?不急,去sun公司的网站下一本手册JVM Specification。
The JavaTM Virtual Machine Specification, Second Edition.
http://java.sun.com/docs/books/vmspec/
http://java.sun.com/docs/books/vmspec/download/vmspec.2nded.html.zip

找到CHAPTER 9 Opcode Mnemonics by Opcode,我们要用到的机器码如下:
00 (0x00) nop
03 (0x03) iconst_0
04 (0x04) iconst_1
28 (0x1c) iload_2
61 (0x3d) istore_2
172 (0xac) ireturn
154 (0x9a) ifne

按照我在前面的分析,只要把
ifne 12 这一句的三个字节nop掉即可。
用uedit打开LicenseUtils.class,搜索
3d1c9a0005,即以下3句。改为3d1c000000,后面的用3个NOP.只要改动2个字节就够了。
5 istore_2
6 iload_2
7 ifne 12 (+5)

把改好的LicenseUtils.class加到license.jar(zip压缩文件),替换原来的。

测试:
G:\editg\CPPTest65\bin>cpptest t.c

Creating project configuration based on: builtin://VC++6.0
Using project configuration: project://VC++6.0

Test started: Dec 26, 2005 8:37:48 PM
------------------------
...省去几十页....
------------------------
Test finished: Dec 26, 2005 8:38:02 PM

OK了。收工。

爆破,比较简单,在此抛砖引玉。
希望能给初学者一点启发。


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 7
支持
分享
最新回复 (8)
雪    币: 313
活跃值: (440)
能力值: ( LV12,RANK:530 )
在线值:
发帖
回帖
粉丝
2
哈哈,原来JAVA程序是这么搞定的,谢谢了
2005-12-26 22:09
0
雪    币: 215
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
最初由 readyu 发布
java 验证license 破解手记:
LicenseUtils.class就是JVM的机器码了,没法直接改。反编译出来的LicenseUtils.java也只有阅读价值,
根本编译不过。
........


可以把相关java 文件加在classpath 上,然后只编译这个文件。
我看该java代码,好像也未做反反编译处理,
jad 的反编译效果很好,应该稍微修改一下即可编译通过。

运行修改过的java class,一般情况下也不用更动源文件,把修改过的
java class放在classpath的最前面就可以了。
2005-12-26 23:00
0
雪    币: 82
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
哪位把jclasslib_windows_3_0.exe放一个在这里?到网站下总下不全。
2005-12-27 08:45
0
雪    币: 257
活跃值: (105)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
5
我上传一个给你吧,不过用处不是很大,要是直接能修字节码那就爽了:)
2005-12-27 08:52
0
雪    币: 82
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
上传到哪了呢?
2005-12-27 09:47
0
雪    币: 257
活跃值: (105)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
7
不知为什么没上传上去
2005-12-27 10:36
0
雪    币: 82
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
那发送到Xieyu_zzl@126.com可以吗?先谢了。
2005-12-27 11:23
0
雪    币: 1
活跃值: (124)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
大神,请教一个问题。这样直接暴力破解再放回去jar压缩包里面,有没有不适用的程序,比如会对jar包自校验的可能,实际逆向过程中我遇到过一个软件,感觉应该是有这个校验,许可检测暴力破解了,但是还是说许可不对。请问有没有这种如何破解自校验的教程呢,谢谢大神。
2018-4-6 13:26
0
游客
登录 | 注册 方可回帖
返回
//