soapUI Pro 4.5.1的新破解方案

网上可以下到一个破解,原来是针对soapUI Pro 2.5.1的,但实际上对4.5.1同样有效。
研究了一下破解后的license4j-1.3.jar与原版license4j-1.3.jar的差别,就是用
JD-GUI逆一下,然后用BC比较目录,只有两个文件被修改,一个是MANIFEST.MF,另一
个是LicenseManager.java。

原作者在LicenseManager.loadLicense()中直接添加了License信息,使用的是老版的
License。估计2.5.1用的就是老版的License。现在4.5.1用的是新版License,但同时
支持老版License。

新破解方案没有什么优势,只是一种技术探索而已。

解压:

...\SmartBear\soapUI-Pro-4.5.1\lib\Protection-4.6.jar

打开:

com\jp\protection\pub\LicenseReader.class

找到:

--------------------------------------------------------------------------
文件偏移0x1a40

2a aload_0 0
03 iconst_0 0
b5 00 0f putfield #15;
--------------------------------------------------------------------------

将上面这个03改成04即可。

删除:

META-INF\SMARTBEA.RSA
META-INF\SMARTBEA.SF

修改:

META-INF\MANIFEST.MF

删除那些哈希信息。

以zip格式重新打包出Protection-4.6.jar,替换原版。导入scz.key完成破解。如果
碰上问题,删除如下文件:

%USERPROFILE%\.soapui\*.*

重新导入scz.key。

原理很简单,decodeLicense()在458行判断了isSkipEncryption()的返回值,如果返
回true,就不进行公钥解码。可以Patch让isSkipEncryption()返回true,从而伪造
明文状态的scz.key。

将protected成员变量fSkipEncryption置true,从而让isSkipEncryption()返回true。
我不知道soapUI留这么一个变量的原因,比较奇怪。fSkipEncryption缺省是false,
直接修改.class让缺省值变成true就可以完成破解。

从大小上看,Protection-4.6.jar有1MB,而license4j-1.3.jar只有17KB,显然后者
划算。但从修改过程来看,前者只需要修改一个字节,远比后者简单。

scz.key如下:

--------------------------------------------------------------------------
0000000: 00 06 73 6f 61 70 55 49 00 00 00 00 8b 17 f0 5a ..soapUI.......Z
0000010: 23 0d 0a 23 4d 6f 6e 20 4a 75 6c 20 34 20 30 31 #..#Mon Jul 4 01
0000020: 3a 30 30 3a 30 31 20 43 45 54 20 32 30 31 32 0d :00:01 CET 2012.
0000030: 0a 70 72 6f 70 5b 35 5d 2e 76 3d 53 6d 61 72 74 .prop[5].v=Smart
0000040: 42 65 61 72 2d 53 77 65 64 65 6e 2d 53 75 70 70 Bear-Sweden-Supp
0000050: 6f 72 74 40 53 6d 61 72 74 42 65 61 72 2e 63 6f [email protected]
0000060: 6d 0d 0a 70 72 6f 70 5b 34 5d 2e 6e 3d 70 72 2e m..prop[4].n=pr.
0000070: 66 69 72 73 74 4e 61 6d 65 0d 0a 6d 61 6a 3d 34 firstName..maj=4
0000080: 0d 0a 6f 70 74 3d 30 0d 0a 69 73 64 3d 31 33 34 ..opt=0..isd=134
0000090: 31 33 36 30 30 30 30 30 30 30 0d 0a 70 72 6f 70 1360000000..prop
00000a0: 5b 36 5d 2e 76 3d 53 6d 61 72 74 42 65 61 72 2d [6].v=SmartBear-
00000b0: 53 77 65 64 65 6e 2d 53 75 70 70 6f 72 74 40 53 Sweden-Support@S
00000c0: 6d 61 72 74 42 65 61 72 2e 63 6f 6d 0d 0a 75 6c martBear.com..ul
00000d0: 6d 3d 31 0d 0a 70 72 6f 70 5b 35 5d 2e 6e 3d 45 m=1..prop[5].n=E
00000e0: 4d 61 69 6c 0d 0a 70 72 6f 70 5b 30 5d 2e 76 3d Mail..prop[0].v=
00000f0: 50 72 6f 0d 0a 70 72 6f 70 5b 37 5d 2e 76 3d 53 Pro..prop[7].v=S
0000100: 6d 61 72 74 42 65 61 72 20 53 6f 66 74 77 61 72 martBear Softwar
0000110: 65 0d 0a 70 72 6f 70 5b 36 5d 2e 6e 3d 70 72 2e e..prop[6].n=pr.
0000120: 65 6d 61 69 6c 0d 0a 6e 75 6d 3d 5b 32 30 31 32 email..num=[2012
0000130: 2d 30 37 2d 30 34 20 30 31 5c 3a 30 30 5c 3a 30 -07-04 01\:00\:0
0000140: 30 5d 20 73 6f 61 70 55 49 20 74 72 69 61 6c 20 0] soapUI trial
0000150: 2d 20 53 6d 61 72 74 42 65 61 72 20 53 6f 66 74 - SmartBear Soft
0000160: 77 61 72 65 0d 0a 70 72 6f 70 5b 31 30 5d 2e 76 ware..prop[10].v
0000170: 3d 0d 0a 70 72 6f 3d 73 6f 61 70 55 49 0d 0a 70 =..pro=soapUI..p
0000180: 72 6f 70 5b 31 5d 2e 76 3d 73 6f 61 70 55 49 20 rop[1].v=soapUI
0000190: 50 72 6f 0d 0a 70 72 6f 70 5b 30 5d 2e 6e 3d 70 Pro..prop[0].n=p
00001a0: 72 2e 6c 61 73 74 4e 61 6d 65 0d 0a 70 72 6f 70 r.lastName..prop
00001b0: 5b 38 5d 2e 76 3d 46 49 0d 0a 70 72 6f 70 5b 37 [8].v=FI..prop[7
00001c0: 5d 2e 6e 3d 43 6f 6d 70 61 6e 79 0d 0a 70 72 6f ].n=Company..pro
00001d0: 70 2e 63 6f 75 6e 74 3d 31 31 0d 0a 70 72 6f 70 p.count=11..prop
00001e0: 5b 31 30 5d 2e 6e 3d 50 75 72 63 68 61 73 65 4f [10].n=PurchaseO
00001f0: 72 64 65 72 0d 0a 70 72 6f 70 5b 32 5d 2e 76 3d rder..prop[2].v=
0000200: 74 72 69 61 6c 0d 0a 6e 75 63 3d 33 0d 0a 65 78 trial..nuc=3..ex
0000210: 64 3d 34 30 38 36 38 30 36 34 30 30 30 30 30 0d d=4086806400000.
0000220: 0a 70 72 6f 70 5b 31 5d 2e 6e 3d 55 73 65 72 0d .prop[1].n=User.
0000230: 0a 70 72 6f 70 5b 39 5d 2e 76 3d 53 6d 61 72 74 .prop[9].v=Smart
0000240: 42 65 61 72 20 53 6f 66 74 77 61 72 65 0d 0a 70 Bear Software..p
0000250: 72 6f 70 5b 38 5d 2e 6e 3d 70 72 2e 63 6f 75 6e rop[8].n=pr.coun
0000260: 74 72 79 0d 0a 67 70 3d 30 0d 0a 6d 69 6e 3d 35 try..gp=0..min=5
0000270: 0d 0a 70 72 6f 70 5b 33 5d 2e 76 3d 30 30 30 30 ..prop[3].v=0000
0000280: 30 30 30 30 2d 30 30 30 30 2d 30 30 30 30 2d 30 0000-0000-0000-0
0000290: 30 30 30 2d 30 30 30 30 30 30 30 30 30 30 30 30 000-000000000000
00002a0: 0d 0a 70 72 6f 70 5b 32 5d 2e 6e 3d 4c 69 63 65 ..prop[2].n=Lice
00002b0: 6e 73 65 54 79 70 65 0d 0a 70 72 6f 70 5b 39 5d nseType..prop[9]
00002c0: 2e 6e 3d 70 72 2e 63 6f 6d 70 61 6e 79 0d 0a 70 .n=pr.company..p
00002d0: 72 6f 70 5b 34 5d 2e 76 3d 73 6f 61 70 55 49 0d rop[4].v=soapUI.
00002e0: 0a 70 72 6f 70 5b 33 5d 2e 6e 3d 53 61 6c 65 73 .prop[3].n=Sales
00002f0: 46 6f 72 63 65 49 44 0d 0a 74 79 70 3d 33 0a ForceID..typ=3.
--------------------------------------------------------------------------

用WinHex写回成binary就是了。实际信息是:

--------------------------------------------------------------------------
#
#Mon Jul 4 01:00:01 CET 2012
prop[5][email protected]
prop[4].n=pr.firstName
maj=4
opt=0
isd=1341360000000
prop[6][email protected]
ulm=1
prop[5].n=EMail
prop[0].v=Pro
prop[7].v=SmartBear Software
prop[6].n=pr.email
num=[2012-07-04 01\:00\:00] soapUI trial - SmartBear Software
prop[10].v=
pro=soapUI
prop[1].v=soapUI Pro
prop[0].n=pr.lastName
prop[8].v=FI
prop[7].n=Company
prop.count=11
prop[10].n=PurchaseOrder
prop[2].v=trial
nuc=3
exd=4086806400000
prop[1].n=User
prop[9].v=SmartBear Software
prop[8].n=pr.country
gp=0
min=5
prop[3].v=00000000-0000-0000-0000-000000000000
prop[2].n=LicenseType
prop[9].n=pr.company
prop[4].v=soapUI
prop[3].n=SalesForceID
typ=3
--------------------------------------------------------------------------

后面是一些冗余信息,只关心结果不关心过程的兄弟请略过。

prop[2].v的有效值有trial、professional,这个就是LicenseType。这里必须保持为
trial,Title上可以看出是试用版License,仍然是全功能的。如果把这里设成
professional,会导致程序退出。利用BTrace调试这个过程:

--------------------------------------------------------------------------

@OnMethod
(
clazz = "java.lang.System",
method = "exit"
)
public static void Trace_exit
(
)
{
println( "jstack() is :" );
println( "[" );
jstack();
println( "]" );
}
--------------------------------------------------------------------------

加载professional.key时会看到:

--------------------------------------------------------------------------
jstack() is :
[
java.lang.System.exit(Unknown Source)
com.eviware.soapui.SoapUIPro$SoapUIProRunner.run(SourceFile:1813)
com.eviware.soapui.SoapUIPro.main(SourceFile:288)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
java.lang.reflect.Method.invoke(Unknown Source)
com.exe4j.runtime.LauncherEngine.launch(Unknown Source)
com.exe4j.runtime.WinLauncher.main(Unknown Source)
]
--------------------------------------------------------------------------

至少是1804行调用isAutoUpdateVersion()之前抛出的异常。

你可能感兴趣的:(破解补丁,SOAPUI,pro,4.5.1)