首页
社区
课程
招聘
[求助]关于flexlm.jar
2011-4-7 00:14 12529

[求助]关于flexlm.jar

2011-4-7 00:14
12529
本人刚开始学习flexlm不久,很多东西不明白,请各位老大指导:
软件使用了ECC,反编译了其中的vendorinfo.class后能获得有用的信息吗?

请指导下面该如何去做?

[培训]二进制漏洞攻防(第3期);满10人开班;模糊测试与工具使用二次开发;网络协议漏洞挖掘;Linux内核漏洞挖掘与利用;AOSP漏洞挖掘与利用;代码审计。

收藏
点赞0
打赏
分享
最新回复 (9)
雪    币: 323
活跃值: (147)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
NoFlexlm 2011-4-7 21:47
2
0
貌似flexlm.jar是由Flexnet来提供的,与你的程序没有关系吧?
不过,也可以把里面的ECC去掉,对任何程序都永远返回正确值。
雪    币: 318
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
sethsam 2011-4-13 21:29
3
0
能指导下如何把ECC去掉吗,论坛上那些patch方法好像都是针对exe和dll的吧
雪    币: 323
活跃值: (147)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
NoFlexlm 2011-4-14 22:47
4
0
如果程序使用flexlm.jar说明程序应该是java的,你试着把里面的_l_pubkey_verify函数始终返回正确看看。
雪    币: 318
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
sethsam 2011-4-15 11:06
5
0
在反编译出的源文件\com\macrovision\flexlm\lictext下PriKey.java里面有pubkeyVerify函数,

public static boolean pubkeyVerify(byte[] paramArrayOfByte1, byte[] paramArrayOfByte2, VendorInfo paramVendorInfo, int paramInt)
    throws FlexlmException
  {
    String str1 = initCerticom();
    if (str1 == null)
      throw new FlexlmException(-514, 4026);
    String str2;
    switch (paramInt)
    {
    case 2:
      str2 = "sect113r1";
      break;
    case 3:
      str2 = "ec163a02";
      break;
    case 4:
      str2 = "ec239a03";
      break;
    default:
      throw new FlexlmException(-515, 4027);
    }
    SystemConfig localSystemConfig = SystemConfig.getConfig();
    localSystemConfig.setCurve(str2);
    localSystemConfig.setConformance(16);
    localSystemConfig.setPtCompression(2);
    localSystemConfig.setFormat(10);
    PublicKey localPublicKey1 = paramVendorInfo.getPublicKey(paramInt);
    if (localPublicKey1 == null)
      throw new FlexlmException(-515, 4028);
    byte[] arrayOfByte = localPublicKey1.getEncoded();
    X509EncodedKeySpec localX509EncodedKeySpec = new X509EncodedKeySpec(arrayOfByte);
    KeyFactory localKeyFactory;
    try
    {
      localKeyFactory = KeyFactory.getInstance("ECDSA");
    }
    catch (NoSuchAlgorithmException localNoSuchAlgorithmException1)
    {
      throw new FlexlmException(-515, 4029);
    }
    PublicKey localPublicKey2;
    try
    {
      localPublicKey2 = localKeyFactory.generatePublic(localX509EncodedKeySpec);
    }
    catch (InvalidKeySpecException localInvalidKeySpecException)
    {
      throw new FlexlmException(-515, 4030);
    }
    boolean bool;
    try
    {
      Signature localSignature = Signature.getInstance("ECDSA", str1);
      localSignature.initVerify(localPublicKey2);
      localSignature.update(paramArrayOfByte1);
      bool = localSignature.verify(paramArrayOfByte2);//////这里验证
    }
    catch (NoSuchProviderException localNoSuchProviderException)
    {
      throw new FlexlmException(-515, 4031);
    }
    catch (NoSuchAlgorithmException localNoSuchAlgorithmException2)
    {
      throw new FlexlmException(-515, 4032);
    }
    catch (InvalidKeyException localInvalidKeyException)
    {
      throw new FlexlmException(-515, 4033);
    }
    catch (SignatureException localSignatureException)
    {
      throw new FlexlmException(-515, 4034);
    }
    return bool;    //////////////////这里返回
  }

      看到有一个帖子里面说将返回值改为1就行,我想问这个打补丁的方法:
      是需要将反编译出来的所有源码重新编译下(这个我不知道是否能重新编译过去),
      还是也可以像程序打补丁一样,直接在原来的jar文件上只改几个字节就好?
      这两种办法我都没找到详细说明的帖子,还请老大具体指导下
雪    币: 323
活跃值: (147)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
NoFlexlm 2011-4-15 12:44
6
0
你找的位置很正确啊,始终返回true就行了啊。
至于用什么途径和方法,那就应该属于java破解的方法了,只要最后得到你要的结果,不都一样吗。
雪    币: 318
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
sethsam 2011-4-16 12:33
7
0
在flexlm.jar下的\com\macrovision\flexlm\lictext中
找到prikey.class,提取出来,用ultraedit将150dac改为0004ac
在IDA中对应的是将iload 13,ireturn改为iconst_1,ireturn
函数名是pubkeyVerify

将补丁后的文件替换原来jar中的prikey.class文件
自己测试,发现可用,分享出来,同时感谢NoFlexlm老大的热情指导

最后,再问老大一个问题,我现在要破解的一个软件,里面有flexlm.jar,也有加密过的exe和dll,其中一个dll还是.net的,请问下这些个文件都需要patch掉吗?论坛里的ecc generic patcher对.net程序的patch有效么?
雪    币: 318
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
sethsam 2011-4-16 12:33
8
0
在flexlm.jar下的\com\macrovision\flexlm\lictext中
找到prikey.class,提取出来,用ultraedit将150dac改为0004ac
在IDA中对应的是将iload 13,ireturn改为iconst_1,ireturn
函数名是pubkeyVerify

将补丁后的文件替换原来jar中的prikey.class文件
自己测试,发现可用,分享出来,同时感谢NoFlexlm老大的热情指导

最后,再问老大一个问题,我现在要破解的一个软件,里面有flexlm.jar,也有加密过的exe和dll,其中一个dll还是.net的,请问下这些个文件都需要patch掉吗?论坛里的ecc generic patcher对.net程序的patch有效么?
雪    币: 323
活跃值: (147)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
NoFlexlm 2011-4-17 13:49
9
0
不是特别清楚你说的加密过的exe和dll是什么意思。如果是说这些程序也是flexlm保护的,那就要看程序如何去验证license了,如果最终是通过java的flexlm.jar,那你patch了flexlm.jar后可想而知。如果程序在某些地方还执行exe或者dll里的检测,那结果也可想而知了。

保险的话,看下这几个文件里有无_l_pubkey_verify函数,有则patch,没有则不用管了。

另外,你说的ECC通用patcher如果对.Net无效,也没什么好奇怪的。如果自己掌握了要patch的地方,也是非常容易的。
雪    币: 42
活跃值: (200)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
mb_nxxnhzzc 2019-12-18 00:07
10
0
感谢前辈的帖子,帮了大忙!
游客
登录 | 注册 方可回帖
返回