首页
社区
课程
招聘
[旧帖] [讨论]关于Flexlm user_crypt_filter和SIGN 0.00雪花
发表于: 2008-11-29 17:40 11149

[旧帖] [讨论]关于Flexlm user_crypt_filter和SIGN 0.00雪花

2008-11-29 17:40
11149
我最近在研究一个用Flexlm 8.1a保护的程序,似乎这个程序采用了uses user_crypt_filter保护,原因可以看下面的代码。
.text:0046ADD1                 mov     edx, off_493064
.text:0046ADD7                 push    edx
.text:0046ADD8                 push    4Ah
.text:0046ADDA                 mov     eax, dword_4AC488
.text:0046ADDF                 push    eax
.text:0046ADE0                 call    _lc_set_attr

在仔细研究了CrackZ的相关文章后,我终于从N长的代码段中成功恢复了permute table和xorvals。当然,两个加密的seeds还是很容易用老方法在l_sg内得到。然后在Flexlm SDK 8.1a中更新对应的文件,编译、执行后得到想要的lmcrypt程序,一切似乎很顺利。用lmcrypt产生的如下license也能成功被daemon接受。
INCREMENT [I]feature1 daemon[/I] 2008.0 01-jan-00 uncounted 0F33363EB470 HOSTID=INTERNET=*.*.*.*

似乎万事大吉了,可我突发奇想试了一下带SIGN格式的license,接下来的事情就把我彻底弄晕了。这个license根本无法正确被daemon识别。
INCREMENT [I]feature1 daemon[/I] 2008.0 01-jan-00 uncounted HOSTID=INTERNET=*.*.*.* SIGN=3EC17038B252

经过耐心乏味的代码跟踪,我发现user_crypt_filter部分正确的expected character应该是我用lmcrypt算出的3EC17038B252,而尝试用这个代码反推出的SIGN值为2DBD6848A2E4,把这个值带入license中真的可以成功被check out出。
INCREMENT [I]feature1 daemon[/I] 2008.0 01-jan-00 uncounted HOSTID=INTERNET=*.*.*.* SIGN=2DBD6848A2E4

可问题来了,为什么我用lmcrypt无法产生正确的SIGN值,而却可以产生正确的LK值呢?

接着,我试着修改permute table中的值,甚至干脆不用user_crypt_filter,结果我都得到了相同“错误”的SIGN值,而得到的LK值却会随我输入的permute table而变化。
无user_crypt_filter时的License Key.
INCREMENT feature1 daemon 2008.0 01-jan-00 uncounted BA674BA6A11B HOSTID=INTERNET=*.*.*.*


请问是否有同行曾经研究过user_crypt_filter,可有尝试用它去产生SIGN格式的license?产生的license和根本不用user_crypt_filter时可否相同?如果是相同的,那是否意味着user_crypt_filter只对LK起作用,而不会改变license中的SIGN值呢?如果是这样,那岂不意味着带SIGN格式的license无法使用user_crypt_filter,真的是这样的吗?那我的vendor daemon又是用什么方法来处理的呢?

希望有高手出来解释一下!

对user_crypt_filter有兴趣的朋友可以研究一下。

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (12)
雪    币: 324
活跃值: (192)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
研究了一下自己编译生成的daemon程序和lmcrypt程序,发现用lmcrypt产生的SIGN license竟然也无法通过自己编译的daemon,可同样lmcrypt产生的LK license却可以顺利通过daemon的检查。
难道是我的lmcrypt.c哪里设置不对吗?
extern void user_crypt_filter_gen();
lc_set_attr(lm_job, LM_A_USER_CRYPT_FILTER_GEN, (LM_A_VAL_TYPE)user_crypt_filter_gen);

lc_set_attr()也正确放在lc_init后面了呀,请高手指点一下。

谢谢!
2008-12-1 11:26
0
雪    币: 165
活跃值: (16)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
这个问题应该好好搞一搞,这个问题通了后FLEXLM就真的通了
2008-12-21 21:35
0
雪    币: 100
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
有没有遇到过flexlm 11.5版本的?经过跟踪,发现了sign对比的一段程序,但是记下对应的值写入许可文件后,还是报错。后来追踪到同样的位置,惊奇地发现用来对比的值居然变了!我非常困惑,难道sing值也是用来计算sign的一个因素!这太不可思议了!
我注意到:我的sign是30个4位的数。而对比仅仅对比了前15个,我当时觉得后面15个可能参与了用来对比的值的计算,所以我仅仅记下了前15个,并在我的许可文件中替换了前15个。但是这前面15个变化了,用来对比的值就变化了,每次都是如此。这意味着用来对比的前15个值一定参与了生成对比值的计算,既然如此,这种计算应该是可逆的。不知道我的猜测是否靠谱,期待专家解答。。。。。。。。。。。。。。。。
2009-6-12 16:11
0
雪    币: 324
活跃值: (192)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
请共享你的daemon程序或者完整程序。

NoFlexlm@163.com
2009-6-12 17:49
0
雪    币: 100
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
不好意思,daemon程序,是什么?
是lmgrd.exe还是lmtools.exe?
程序是朋友托给我的,我不太好给你,License Manager目录下只有这两个有用,其他的是pdf,我打包给你?
2009-6-12 19:09
0
雪    币: 324
活跃值: (192)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
既然这样,那你就自己玩吧!

呵呵!
2009-6-13 13:04
0
雪    币: 229
活跃值: (27)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
8
你都能发现ECC的明文对比,你好强大啊,
2009-6-16 11:16
0
雪    币: 324
活跃值: (192)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
个人感觉是个外行人。
2009-6-16 18:45
0
雪    币: 522
活跃值: (4826)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
谦虚……%#·
2009-6-17 00:05
0
雪    币: 100
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
我是彻头彻尾的外行,大家见笑了。这几天在研究ecc,费劲阿,整个过程在网上到处找,做算搞清楚自己面对的是什么了。我仔细考虑了一下,我发现攻破这个ecc,好像需要15*2^32次尝试。个人水平有限,只能修改一些跳转、赋值来让酷锐2来做这个最傻的事了。看我的运气如何,是几天还是100年。。。。。。
2009-6-17 22:57
0
雪    币: 324
活跃值: (192)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
希望你没有把2^64错误理解为15*2^32就行。
2009-6-18 14:56
0
雪    币: 100
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
多谢指教,2^64我还没弄通,但是那是求密钥的,我没那个水平,所以只想让验证通过,所以是15*2^32,即使我运气好,找到正确的许可,密钥还是不知道的,不过我也不想知道,太复杂了。
2009-6-18 16:56
0
游客
登录 | 注册 方可回帖
返回
//