首页
社区
课程
招聘
[求助]flexlm+sentinel如何破解
发表于: 2006-9-9 16:55 21791

[求助]flexlm+sentinel如何破解

2006-9-9 16:55
21791
收藏
免费 0
支持
分享
最新回复 (44)
雪    币: 332
活跃值: (479)
能力值: ( LV9,RANK:330 )
在线值:
发帖
回帖
粉丝
26
这个不改server xxx xxx_dongle=13744 7362
你只能带狗了,把dongle=13744 7362去掉!换网卡
2006-9-28 09:08
0
雪    币: 180
活跃值: (251)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
27
按网卡的方式构造如下的licesne文件:
SERVER 主机 网卡号(共12位) 27000
DAEMON xxx xxx.exe
INCREMENT 10007 xxx 30.000 1-jan-0 1 12345678901234567890 \
  VENDOR_STRING=xxx

在守护程序中的算法的地址为cs:429cf2
cs:429ddc处可以找到seed1,seed1=eax=0x91827364
cs:429f38处可以找到seed2,seed2=eax=0x90187236

守护程序可以自动计算出密码,记下计算出的密码串。
记加下您虚构的license文件中密码串中的第2 4 6 8处的数值
(假设为2 4 6 8),将这四个数值插入到正确密码串的第2 4 6 8
处位置。
方法如下:
假设虚构的密码串为:12345678901234567890
                     * * * *(2 4 6 8处的值)
计算出的密码串为  :A72BA7E13EA5344B
正确的密码串为    :A27426B8A7E13EA5344B
                     * * * *(2 4 6 8处的值)
2006-9-28 10:25
0
雪    币: 51
活跃值: (1841)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
28
Nothing special.
From the deamon program, the dongle isn't a must.
If the main program requires the dongle, because it only uses the RNBExtendRead function, patch is easy.
2006-9-28 10:51
0
雪    币: 200
活跃值: (227)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
29
感谢marstj和laoqian等专家的帮助,你们找的种子跟我跟踪到的是一样的,看来我没有找错,现在闲来无事,我在研究为什么找出的seed无法做出带狗的lic,哈哈!

2006-9-28 12:27
0
雪    币: 200
活跃值: (227)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
30
比如我带狗跟踪到的lic是

SERVER *** ***_DONGLE=13744 7362
DAEMON *** ***.exe
INCREMENT 10096 kcs 30.000 1-jan-0 99999 EDC3267C91CE18DB07EE \ VENDOR_STRING=***

但是用seed和SDK算出来的却是
SERVER *** ***_DONGLE=13744 7362
DAEMON *** ***.exe
INCREMENT 10096 kcs 30.000 permanent 99999 7DA376DC29D0C10E1C55 \ VENDOR_STRING=***

2006-9-28 12:27
0
雪    币: 180
活跃值: (251)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
31
to luj107:
   您跟踪出的结果和用SDK计算出的都正确。
为什么密码不一样,因为计算密码有好几套算法,而您只跟踪到了一套。算法对license文件的处理就有多种方式,可以将VENDOR_STRING的信息转换为大写的串,这样可计算一套密码;也可以将VENDOR_STRING的信息转换为小写的串,这样也可以计算出一套密码;也可以保持其信息不变,又计算出一套密码。而在检验时,只要license文件中的密码与计算出的任一套相一致就可通过检测。您可以试着跟踪出其他的算法。(算法大都一样,只是把license文件中的信息作了不同的处理)
2006-9-28 15:02
0
雪    币: 200
活跃值: (227)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
32
to marstj

谢谢你的解释,这一点我在跟踪的时候也发现了,但是我用sdk算出的那个号码并不正确哦,Invalid license key (inconsistent authentication code)
2006-9-28 16:04
0
雪    币: 200
活跃值: (227)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
33
to marstj:
还有一个,如果换成sign的话,是不是跟踪的算法不同呢?
2006-9-29 07:26
0
雪    币: 180
活跃值: (251)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
34
To uj107:
    标准的FlexLm对加密狗的识别用的是FLEXID=6-xxxx。用lmcryptgui.exe生成的lmcrypt程序,可以生成加密狗为FLEXID=6-xxxx的license文件。至于不能正确生成您的软件的license,是因
为XXX_DONGLE=13744在内存中的表示方式和lmcrypt程序识别的方式不一致。您可以将licesne文件中的硬件标识改为不同的形式,就可以分析出网卡号,磁盘序列号,ANY ,DEMO以及其他加密狗等在内存中的表示方式。真正的算法是不变的。对于用SIGN方式,计算的算法与不用SIGN方式的算法不一样,但两种算法所在的位置相差不远,其对licesne文件在内存中的数据的前8个字节的处理方式完全一致,方法都是为:8个字节xor seed(也为8个字节),并且共用同一段代码。找到这段代码后,您根据流程的走向应该可以找到处理处理SIGN=xxxxxx方式的代码和不用SIGN=xxxxxx方式的代码。如果您读通了程序,可以自己用高级语言写出计算licese的通用程序,只要更换不同的seed,就可以计算出不同产品的licesne,就像lmcryptgui.exe一样,lmcryptgui.exe需要的信息也只是vendor name和seeds。算法对flexlm v5.0 ~10都有效,当然对ECC除外。
2006-9-29 08:58
0
雪    币: 332
活跃值: (479)
能力值: ( LV9,RANK:330 )
在线值:
发帖
回帖
粉丝
35
最初由 marstj 发布
按网卡的方式构造如下的licesne文件:
SERVER 主机 网卡号(共12位) 27000
DAEMON xxx xxx.exe
INCREMENT 10007 xxx 30.000 1-jan-0 1 12345678901234567890 \
VENDOR_STRING=xxx

在守护程序中的算法的地址为cs:429cf2
cs:429ddc处可以找到seed1,seed1=eax=0x91827364
cs:429f38处可以找到seed2,seed2=eax=0x90187236

守护程序可以自动计算出密码,记下计算出的密码串。
记加下您虚构的license文件中密码串中的第2 4 6 8处的数值
(假设为2 4 6 8),将这四个数值插入到正确密码串的第2 4 6 8
处位置。
方法如下:
假设虚构的密码串为:12345678901234567890
* * * *(2 4 6 8处的值)
计算出的密码串为 :A72BA7E13EA5344B
正确的密码串为 :A27426B8A7E13EA5344B
* * * *(2 4 6 8处的值)


密码串中的第2 4 6 8处的数值 不明白是什么作用?
2006-9-29 09:16
0
雪    币: 180
活跃值: (251)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
36
to laoqian:
   2 4 6 8处的值您可以任意给定。您虚构的licesne文件中如果
用的20位的密码,2 4 6 8位的值参与运算计算出的密码位为16位,
在形成正确的密码串时要保持2 4 6 8处的值不变(即虚构的是什么,在正确的license中就用什么,同样保持在2 4 6 8位置,这样正确的密码串也就为20位)
2006-9-29 09:47
0
雪    币: 200
活跃值: (227)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
37
hi, marstj
你所说的内存表示方式,我不太明白,是不是说要调试守护程序,并找到相关的东西吗?看样子xxx_dongle=13744已经不是标准的lic格式了.
哈哈,不要嫌我罗嗦哦,既然着手研究这个问题,所以就想搞清楚,谢谢你的指点
2006-9-29 11:48
0
雪    币: 180
活跃值: (251)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
38
to luj107:

:00429CE3 8B8D74FEFFFF       mov ecx, dword ptr [ebp+FFFFFE74]
:00429CE9 83C101             add ecx, 00000001
:00429CEC 898D74FEFFFF       mov dword ptr [ebp+FFFFFE74], ecx
:00429CF2 83BD74FEFFFF08     cmp dword ptr [ebp+FFFFFE74], 00000008
:00429CF9 7D2B               jge 00429D26
:00429CFB 8B55F4             mov edx, dword ptr [ebp-0C]
:00429CFE 039574FEFFFF       add edx, dword ptr [ebp+FFFFFE74]
:00429D04 33C0               xor eax, eax
:00429D06 8A02               mov al, byte ptr [edx]
:00429D08 8B8D74FEFFFF       mov ecx, dword ptr [ebp+FFFFFE74]
:00429D0E 33D2               xor edx, edx
:00429D10 8A91801E4A00       mov dl, byte ptr [ecx+004A1E80]
:00429D16 33C2               xor eax, edx
:00429D18 8B8D74FEFFFF       mov ecx, dword ptr [ebp+FFFFFE74]
:00429D1E 8881801E4A00       mov byte ptr [ecx+004A1E80], al
:00429D24 EBBD               jmp 00429CE3
这是您提供的程序中计算license密码的一段代码。
请注意
:00429D06 8A02   mov al, byte ptr [edx]
该指令,ds:edx中的内容即为license文件的内容(密码串除外)经转换后
存放到内存中的内容,您应该可以分析出网卡,demo,加密狗等标识在
内存中的表示方式。
2006-9-29 16:07
0
雪    币: 200
活跃值: (227)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
39
哈哈,晕哦,确实找到了相关的内容,不过这之后呢?是不是再跟sign进行xor运算啊
2006-9-29 16:47
0
雪    币: 200
活跃值: (227)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
40
看来问题是越来越复杂了,脑子不够用了,以后再说了,哈哈!
2006-9-30 10:45
0
雪    币: 200
活跃值: (227)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
41
hi, marstj

我在woodmann网站有了一个新的发现,原文是这样的
My target is GC-Powerstation, it's proctection is Flexlm + Sentinel Dongle.
Flexlm uses LM_A_VENDOR_ID_DECLARE to change HOSTID to GC_DONGLE ID (ex. HOSTID=GC_DONGLE=1234 ).
If I make a license which HOSTID=ANY, the program can't pass.
How can I crack this target

我看我这个软件跟他的非常相似,也就是说也使用了LM_A_VENDOR_ID_DECLARE,这个是不是应该在l_new_hostid函数上跟踪呢?
2006-9-30 16:18
0
雪    币: 332
活跃值: (479)
能力值: ( LV9,RANK:330 )
在线值:
发帖
回帖
粉丝
42
顶了,我不搞破解了,但是喜欢,没有整块的时间,哎!愿你解决他!
2006-9-30 17:29
0
雪    币: 205
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
43
If you check the "lm_attr.h" from any version of flexlm sdk. You can find the interesting thing as follow:

#define LM_A_VENDOR_ID_DECLARE  58        /* set: PTR to LM_VENDOR_HOSTID struct*/
                                        /* get: PTR to LM_VENDOR_HOSTID_PTR */

From the daemon "kcs.exe", Use "bp _lc_set_attr" several times, you will find

.text:0040D1E2                 push    eax
.text:0040D1E3                 push    3Ah    -->(decimal 58)
.text:0040D1E5                 push    dword_4A4A80
.text:0040D1EB                 mov     esi, offset sub_40D02E
.text:0040D1F0                 mov     [ebp+var_10], offset aKcs_dongle ; "KCS_DONGLE"
.text:0040D1F7                 mov     [ebp+var_C], 3E9h
.text:0040D1FE                 mov     [ebp+var_4], esi
.text:0040D201                 call    _lc_set_attr
.text:0040D206                 add     esp, 18h
.text:0040D209                 mov     edi, offset aLm_a_vendor_id ; "LM_A_VENDOR_ID_DECLARE FAILED"
.text:0040D20E                 test    eax, eax
.text:0040D210                 jz      short loc_40D220
2006-10-1 23:42
0
雪    币: 200
活跃值: (227)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
44
最初由 ericliu 发布
If you check the "lm_attr.h" from any version of flexlm sdk. You can find the interesting thing as follow:

#define LM_A_VENDOR_ID_DECLARE 58 /* set: PTR to LM_VENDOR_HOSTID struct*/
/* get: PTR to LM_VENDOR_HOSTID_PTR */

........


LM_A_VENDOR_ID_DECLARE FAILED,跟踪了半天是这个结果,怎么回事啊?
2006-10-3 08:54
0
雪    币: 200
活跃值: (227)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
45
研究了2天的9.2源代码,终于将问题搞定了,在此还是要谢谢marstj
和laoqian等高手的帮助
2006-10-4 18:30
0
游客
登录 | 注册 方可回帖
返回
//