首页
论坛
专栏
课程

[商业保护] FLEXLM9.5该洗洗睡了吧---200水帖纪念

2006-4-13 11:28 27316

[商业保护] FLEXLM9.5该洗洗睡了吧---200水帖纪念

2006-4-13 11:28
27316
FLEXLM9.5该洗洗睡了吧---200水帖纪念

【郑重声明】:本文纯属技术交流,无其他目的。 请勿用于商业或其他非法用途,否则后果自负。转载需征得看雪论坛同意。
【软件名称】:Imaris 4.16版本,官方网站有DOWN。
【下载页面】:http://www1.skycn.com/soft/20059.html
【软件简介】:Flexlm9.5保护,医学用(汗,我不懂-:))
【调试环境】:XP、OLLYICE、PEID0.93、calcseed.exe、lmcryptgui.exe、SIG文件
    不会写破文,发了199个水帖,一直潜水不敢再发。据说200帖就可以成为中级了,我汗---我这么菜水平的都成中级?细想一下,我想看雪上的级别资格更多的是给那些有所奉献的朋友吧,不完全代表水平,于是菜鸟我心释然。
    论坛上有很多值得我尊敬的人:看雪、fly、一二三水(哈哈)、laoqian等,无私奉献技术,指导菜鸟提高。当然,我在学习FLEXLM的时候,请教时也曾遇到有人索要RMB的问题(至今心里忿然BS)。学CRACK仅仅是我的兴趣而非职业,是想了解别人的思想,因此绝不会靠CRACK去谋取一分钱,这也不是我学习的目的。
    受大水写了第500帖纪念的启发,于是发第200水帖纪念,希望大锅们不要扁我哈。论坛上有很多水牛,发了那么多帖子,按说水平也该很高了,希望大家也能在整百帖的时候发帖纪念一下,总结一下自己的经验,共同提高!
   转入正题:本文是学习CRACKZ的文章《FLEXlm latest information by CrackZ》后总结的。同样的软件,版本不同。

一、信息收集

1、-8,著名标志,许可证密码错误(0xFFFFFFF8 如果爆破的话,有用)
2、-5,著名标志,FEATURE名称错误
3、-2,许可证语法错误
4、验证逻辑:
如果许可证里面给的种子不对,做出的许可证即使过期了,也会提示-8错误,表示许可证密码无效。这说明是先进行种子参与的密码运算,接着进行密码验证;而后,才是进行日期检查。
如果给出的种子对了,而日期过期了,则会提示-10,表示FEATUER到期;也说明先进行密码检查,后进行日期检查。哈哈。
5、使用假的许可证,启动后出现提示-8提示,表示密码不正确
6、通过分析,比较容易发现VENDOR DAEMON是哪个可执行程序。
7、对于多进程情况,直接调试主干程序;如果调试创建进程的程序,则可能不中断,因为新进程在附加前已经完成了许可证检查
8、认真读看雪大锅的书,学习FLEXLM的基本知识。另外CRACKZ上也有不少好文章。

二、制作一个假的许可证FAKE.LIC

FEATURE feature_name vendor_name 1.000 permanent uncounted 123456654321\
HOSTID=ANY SIGN=123456789123   
格式一定要正确。如果用lmcryptgui.exe检查许可证时提示格式错误,它会自动校正;将前面的错误信息删除,再检查一次,则会成功。

三、确定VEDNDOR NAME

目的:确定VENDOR NAME
方法:搜索字符串“DEMO”,其前面的je跳转处会出现VENDOR NAME名称。(其实程序中多处出现,该步可略去)

006CE285  |.  05 0C030000   add     eax, 30C
006CE28A  |.  85C0          test    eax, eax
006CE28C  |.  74 2B         je      short 006CE2B9                     确定VENDOR=bitplane
006CE28E  |.  B9 B8A28E00   mov     ecx, 008EA2B8                    ;  ASCII "demo"
006CE293  |.  85C9          test    ecx, ecx
006CE295  |.  74 22         je      short 006CE2B9
006CE297  |.  68 C0A28E00   push    008EA2C0                         ; /s2 = "demo"
006CE29C  |.  8B95 6CFDFFFF mov     edx, [ebp-294]                   ; |
006CE2A2  |.  81C2 0C030000 add     edx, 30C                         ; |

四、定位_l_init()函数

函数目的:定位_l_init()函数可确定_l_sg函数,确定VENDOR NAME
方法:查找默认的种子0x12345678 & 0x87654321 可以确定_l_init() 函数

该函数调用时堆栈出现正确的VENDOR NAME;
006CE309  |.  51            push    ecx                              ; |Arg2
006CE30A  |.  8B95 6CFDFFFF mov     edx, [ebp-294]                   ; |
006CE310  |.  52            push    edx                              ; |lc_init函数
006CE311  |.  E8 453DFFFF   call    006C205B                         ; \调用_l_sg函数,F7跟进
006CE316  |.  83C4 0C       add     esp, 0C
006CE319  |.  81BD 84FDFFFF>cmp     dword ptr [ebp-27C], 87654321    ;   默认的种子1,定位标志1
006CE323  |.  74 0C         je      short 006CE331                  
006CE325  |.  81BD 88FDFFFF>cmp     dword ptr [ebp-278], 12345678    ;  默认的种子2,定位标志2
006CE32F  |.  75 5D         jnz     short 006CE38E
006CE331  |>  8B85 6CFDFFFF mov     eax, [ebp-294]
注意调用_l_sg函数完毕后不会填入正确的种子,因为在_l_sg函数中会提前跳转

五、定位_lc_checkout()函数以及对其的调用处

目的:确定FEATURE和产品版本号(不是FLEXLM的版本号)
方法:在字符串参考中查找'lm_ckout.c';总共也就出现几次,比较容易确定。一般是挨着的两个才是;另外有四个挨着的不是。
定位_lc_checkout()函数比较容易,可以执行到其返回,再F8,就可以确定主程序中对它的调用处。(直接查找可能有多处,运行一次找到)006BE4C0  /$  55            push    ebp
1、定位_lc_checkout函数
006BE4E8  |.  8990 FC030000 mov     [eax+3FC], edx
006BE4EE  |.  68 95000000   push    95                            ; /Arg3 = 00000095
006BE4F3  |.  68 8C9B8E00   push    008E9B8C                   ; |Arg2 = 008E9B8C ASCII "lm_ckout.c",确定标志1,
                                                        //堆栈和寄存器出现FEATURE
006BE4F8  |.  8B4D 08       mov     ecx, [ebp+8]                  ; |
。。。。。
006BE543  |.  E8 B3000000   call    006BE5FB                         ; \堆栈出现产品版本和FEATUER名称
。。。。。
006BE5A6  |.  E8 50000000   call    006BE5FB                         ; \如果许可证密码错误,这里会间接调用_l_sg函数
(跟进发现有对l_valid_version 验证版本;lc_check_key 调用_l_sg函数等函数的调用)
(!!!注意:在这里初次不会调用该CALL。慢慢来,呵呵。我们在该函数里能得到FEATURE和版本号就足够了!)
。。。。。
006BE5DE  |.  68 A6000000   push    0A6                           ; /Arg3 = 000000A6
006BE5E3  |.  68 989B8E00   push    008E9B98                      ; |Arg2 = 008E9B98 ASCII "lm_ckout.c 确定标志2
006BE5E8  |.  8B55 08       mov     edx, [ebp+8]                  ; |
2、定位对其的调用
0041E785    .  51            push    ecx
0041E786    .  53            push    ebx
0041E787    .  52            push    edx
0041E788    .  E8 33FD2900   call    006BE4C0                        ;  调用_l_checkout
0041E78D    .  8BE8          mov     ebp, eax                        ; |
0041E78F    .  8B46 2C       mov     eax, [esi+2C]                   ; |
0041E792    .  53            push    ebx                             ; |Arg2
0041E793    .  50            push    eax                             ; |Arg1
0041E794    .  E8 BDEC2900   call    <_lc_hostid 009E:_l_hostid>     ; \堆栈出现产品版本号与FEATURE
0041E799    .  8B4E 08       mov     ecx, [esi+8]
0041E79C    .  83C4 24       add     esp, 24
记录前面的版本号和FEATURE(有的软件可能有几个产品版本号)

六、修改假的许可证

为什么我们在前面不能再次调用_l_sg函数?这是因为FLEXLM的验证机制,如果FEATUER和产品号验证不正确,眼看要煮熟的鸭子_l_sg就直接飞了,就不会再断下来!
修改许可证,_l_sg函数就可以再次停下来了,这就相当于帅哥有钱,MM停下来;看来造假还是不好,来接近于真的:
FEATURE ImarisBase bitplane 4.1 permanent uncounted 123456654321\
HOSTID=ANY SIGN=123456789123   

七、定位_l_sg函数及其返回

函数目的:_l_sg的意思是"签名vendor_key5",呵呵。其返回处是恢复加密种子的关键!
方法:搜索常量SEEDVAL,9.2版本的是6F7330B8;注意,有两个出现,其中一个是混淆函数_l_svk()里面的。可以在?_l_init函数里面通过F7跟进确定,也结合后面的固定结构
V7           glseed?=?0x788F71D2                  seedval?=?0x7648B98E
V8           glseed?=?0x3CDE3EBF                 seedval?=?0x6F73330B8
V9           glseed?=?0x72346B53                  seedval?=?0x6F7330B8
v10          glseed?=?0x5332322F                   seedval?=?0x6F7330B8
(seedval:用于确定_l_sg函数;glseed:可以用来确定vendor name,堆栈出现)
(这些值最早出现于WOODOOM网站,laoqian大锅的总结一文也提及了-惠及众生,爽)
可以执行到返回,然后用dd命令
1、定位函数
006C205B  /$  55            push    ebp                              ;  _l_sg函数
。。。。。
006C206B  |.  8845 EF       mov     [ebp-11], al
006C206E  |.  C745 F4 B8307>mov     dword ptr [ebp-C], 6F7330B8      ;  seedval 寻找L_SG,注意混淆函数
006C2075  |.  C745 FC 00000>mov     dword ptr [ebp-4], 0
。。。。。
006C21D7  |.  5D            pop     ebp                              ;  _l_sg函数返回

2、定位函数的返回:
006C02FF  |.  8B45 08       mov     eax, [ebp+8]                     ; |
006C0302  |.  50            push    eax                              ; |Arg1
006C0303  |.  E8 531D0000   call    006C205B                         ; \调用_l_sg函数
006C0308  |.  83C4 0C       add     esp, 0C                          ;  返回到这里,该处下断,用dd [esp]和dd [esp+8]命令
006C030B  |.  8B4D 08       mov     ecx, [ebp+8]

八、追踪加密种子和许可证

方法:在调用_l_sg函数的返回处(后面一般是一个add…命令,就可以在add命令处下断,使用dd命令),用dd [esp]   dd [esp+8]命令查看内存中的内容。
dd [esp]     得到的是00000066。。。job[]结构内容
dd [esp+8]   得到的是00000004。。。data[]内容
如果是正确的许可证,与调用_l_sg函数的次数关系不大,除了_l_init函数不填充正确的job结构外,每一个FEATUER都要调用_l_sg函数一次;
其返回值将是正确的job和data结构数据;也就是说,每个FEATUER对应的job和data值不相等,但用它们算出的加密种子却一样。
1、追踪加密种子
在_l_sg函数的返回处,使用dd命令
006C0308  |.  83C4 0C       add     esp, 0C                  ;  返回到这里,该处下断,用dd [esp]和dd [esp+8]命令

dd [esp]
03A7C350  00000066
03A7C354  00000000
03A7C358  ********    job+08
03A7C35C  ********    job+0c
03A7C360  ********    job+10
03A7C364  00000000

dd [esp+8]
0012F5CC  00000004
0012F5D0  ********     data[0]
0012F5D4  ********     data[1]
0012F5D8  18A011ED
0012F5DC  274BE197
0012F5E0  E26A21A8
0012F5E4  52580441
0012F5E8  00020009

用calcseed.exe计算加密种子
vendor=bitplane
enseed1=*******         enseed2=********         与VENDOR NAME的关系是仅仅与其第一个字母有关

vendor=Bitplane

追出的VENDOR NAME是小写:bitplane,算出的LIC正确;
而网上有DOWN的许可证,第一个字母是大写的VENDOR NAME:Bitplane也正确。这里将VENDOR换成大、小写都没有关系,但用小写VENDOR计算的加密SEEDS。
2、做出许可证
用lmcryptgui.exe。具体方法参见laoqian大锅的文章。
用SDK也可以制作,只不过在lm_code.h中要添加一些信息,麻烦哦。我懒,如果你做好了,别忘了送我一份啊:)

后记:该文的方法对于7.2、8.0、9.2的版本都适用。7之前的版本应该也可以用该方法,因为FLEXLM的某些关键结构(哈哈)一直没有改变!这是通用的方法。
本想做个循序渐进册子,突然发现该方法其实对老版本的_l_init,_l_new_job等方法都包容了。
可以这样说,对于没有使用ECC等技术(需要PATCH,SIGN超过12位则使用了该技术,以后讨论)的情况,FLEXLM就像一张纸。
    关键点:定位对_l_sg函数的调用返回处,逐步修改假许可证(格式正确)中的内容,就会在_l_sg函数处停下来恢复加密的种子。

感谢

CrackZ
Nolan Blender
tulipfan[CCG]
laoqian
看雪论坛上的朋友们!

附:一些常见问题的处理,希望大家补充:
1、FLEXLM追出了正确加密种子,7.2等SDK做不出正确的许可证?
   如果能正确启动genlic32.exe,恭喜你找对了加密的种子,试试添加选项"advanced->Add Compatible License Key"
2、_l?_sg函数函数只调用一次,不来第二次?
  CRACKZ的文章也曾提及,但没有说明原因和处理办法。常见处理:
   A:许可证格式要正确
   B:设置正确的环境变量,可在"我的电脑->属性"里面或者autoexec.bat里面设置
   C:许可证里面逐步填入正确的VENDOR,FEATUER,产品版本号等
   CRACKZ的另外一篇文章还提及了另外一种处理办法:终止DAEMON进程,在许可证里面加入UER_...信息,但我没有用它试验成功过。
3、如何让后台程序安息?
  运行程序,会发现至少有三样不少:lmgrd.exe是一陪,vendor daemon是二陪,Cracker是“三陪”,哈哈。
  将许可证做成无任何限制的格式,前面两陪直接上床睡觉(进程不启动),晕吧。如果不知道什么是无任何限制的格式,赶快买看雪大锅的书看看(书店一般脱销,我托人才买到)。
4、有了正确的许可证,怎么找加密种子?
  实在恭喜你,省事啊。VENDOR,FEATURE等等都不用找了。
  一般情况了,有了正确的许可证,_l_sg函数会在每个FEATURE的验证后返回正确的值,用通用的种子恢复技术就可以了。
5、相互交流,才能共同提高!仅作技术交流,恳请不要用于非法用途!

[公告]安全测试和项目外包请将项目需求发到看雪企服平台:https://qifu.kanxue.com

最新回复 (54)
newsearch 9 2006-4-13 11:29
2
0
晕,原来是198帖,记错了。哈哈,放水!
nbw 24 2006-4-13 11:39
3
0
支持交流.汉.有机会学习.
kanxue 8 2006-4-13 11:59
4
0
沙漠菜刀再现江湖了
wyuu 2006-4-13 12:25
5
0
呵呵!这那是水帖啊?
强人哦,学习下哦!
Phoenix 2006-4-13 13:24
6
0
顶了
CCDebuger 24 2006-4-13 13:43
7
0
哈哈,顶一下菜刀,顺便灌个水
萝卜 1 2006-4-13 14:00
8
0
刀兄最近很少qq?
lnn1123 13 2006-4-13 14:16
9
0
原来你就是沙漠菜刀啊
prince 16 2006-4-13 14:20
10
0
传说中的沙漠菜刀现身了~
ah007 2 2006-4-13 14:24
11
0
ding!
林海雪原 6 2006-4-13 14:24
12
0
传说?..传说中的人物!
wenglingok 26 2006-4-13 14:34
13
0
Up Up 抬个头
fly 85 2006-4-13 14:36
14
0
对Flexlm没研究
学习
thinkSJ 4 2006-4-13 14:42
15
0
沙漠菜刀 刀无虚发,
萝卜 1 2006-4-13 14:56
16
0
最初由 thinkSJ 发布
沙漠菜刀 刀无虚发,

好像是弹无虚发
dINO 2006-4-13 17:59
17
0
最初由 萝卜 发布
好像是弹无虚发


-_-b
xiaoboy 2 2006-4-13 19:52
18
0
谢谢大哥的好文,学习了。
k99992002 2006-4-13 20:13
19
0
又是一位刀兄啊
hjm 2006-4-13 20:35
20
0
沙漠菜刀  这分明是一篇很有份量佳作!学习中!
四清四清 2006-4-13 23:19
21
0
呵呵 说的很好 就是那个data[0]和data[1]以及8  0c  12 难找 有些软件看不到那个东西啊  谢谢  我又学了一招
skyege 2 2006-4-13 23:34
22
0
对Flexlm没研究  ,看不太懂
looyoo 3 2006-4-14 00:14
23
0
提议不错,期待。。。
pendan2001 4 2006-4-14 01:40
24
0
传说中的人物!
clide2000 7 2006-4-14 09:29
25
0
我也看不懂,没看过Flexlm
WAKU 7 2006-4-14 11:54
26
0
嗯看不懂,不过人家也不懂都给破了....菜啊
baby2008 28 2006-4-14 11:56
27
0
刀兄不是说要到5月份才放水的吗?提前也不通知一声
laoqian 8 2006-4-14 13:25
28
0
原来是菜刀就是你,俺怎么成了大锅了,炒勺是谁?――可以做菜了!
兄弟进步神速啊,看的懂e文就是好啊,在crackZ俺只能是走马观花的看的似懂非懂。
WHO-AM-I 2006-4-14 13:39
29
0
强人,不得不佩服!!!!
zengtm 2006-4-14 14:32
30
0
、_l?_sg函数函数只调用一次,不来第二次,谁知道到底怎么处理啊?
ggosgg 2006-4-14 15:19
31
0
都是潜水的人,差距咋就那么大呢?
四清四清 2006-4-14 22:08
32
0
FLEXLM9.5该洗洗睡了吧---200水帖纪念   这篇文章写得很好啊  我碰到了一个Flex8.0 保护的软件  起初我按照前辈们介绍的7.2 的方法  查找data和job   可是到那个关键地方就跳走  还是看了你老兄的这篇  才受到的启发  在l_sg的返回处  找到了这5个数据  可是很奇怪啊  所有的job  都等于零  所以data[0]=CRYTPTSEED1  data[1]=CRYTPTSEED2   开始我认为他是错误的  可是算出来以后 确实正确的  你说奇怪不奇怪啊  后来我才明白  他的VENDOR和lmgrd  差不多 呵呵  晕  请问newsearch老兄  你碰到过吗 ? 我是一个才学破解一个月的菜鸟啊 谢谢newsearch兄啦
huijp 2006-4-21 19:04
33
0
newsearch老兄,我也遇见了这个问题,就是所有的job数值都是零。这个是不是有错呢,还有我遇到的license文件是经过ecc加密的,我有正版的license,请问:哪儿有ecc补丁呢?
cjyjs 2006-5-6 18:28
34
0
好文!又学了不少东西.谢谢了!能否再写点带ECC的文章给大伙学学?
爱在天涯 3 2006-5-7 12:01
35
0
是不我的好兄弟菜刀呀!
loucm 2006-5-8 15:49
36
0
不错啊,这也叫水帖?那我就更不敢发贴了!
jjdg 2006-5-27 12:26
37
0
楼主:你提到的lmcryptgui.exe找不到啊?怎么办?能不能提供一下!
luj107 2006-5-31 07:36
38
0
这是篇好文章哦,可是如果带狗的话应该怎么破解呢?
bluegugu 2006-6-9 11:36
39
0
为什么_l_sg()就是不能调用第二次呢,调用之前就跳走了,郁闷哦
sln 2 2006-9-2 22:54
40
0
感谢楼主,受益匪浅.
但是我的情况很特殊,OD下的断点不好用,直接走了,断不下.
郁闷啊
北极星2003 25 2006-9-3 10:02
41
0
原来LZ是菜刀兄
hottomson 2006-9-4 09:46
42
0
我最近遇到一个flexlm加密的软件,是04年的,查版本7.2f,然后就按laoqian大虾的做法,顺利的把FEATURE、SEED都找到了,嘿嘿,一下子就成功了。
后来发现这个软件网上公布了一个试用版,想把它试用的功能全部开放(试用也需要授权,免费的只有部分),查flexlm版本,始终找不到,不过根据前人的经验,由特征值可以知道这个应该是8.0以后的,于是找种子,嘿嘿,竟然和旧版一样,可是新的使用了CRO,我水平有限,怎么去除CRO不知道,但想起来别人破解的一个软件的方法,于是拿来用,果然,修改了三个字节后使用如下格式的lic就可以了

开始找种子花了很长时间,发现CRO还要搞定,我水平有限,突然想起来还有一个软件与其加密类似,程序中修改了3个字节,然后做一个如下格式的lic就正常运行了:
PACKAGE standard vendor_name version_num COMPONENTS="aaa bbb ccc"
SIGN=1 SIGN2=2
FEATURE standard vendor_name version_num permanent uncounted HOSTID=ANY ISSUER=CAX \
        ck=256 SIGN=1 SIGN2=2
其中aaa bbb ccc为软件中的feature。
wanggh 2006-9-4 10:14
43
0
有个一直没搞明白的问题:
楼主文中提到:
2、_l?_sg函数函数只调用一次,不来第二次?
  CRACKZ的文章也曾提及,但没有说明原因和处理办法。常见处理:
   A:许可证格式要正确
   B:设置正确的环境变量,可在"我的电脑->属性"里面或者autoexec.bat里面设置
   C:许可证里面逐步填入正确的VENDOR,FEATUER,产品版本号等
   CRACKZ的另外一篇文章还提及了另外一种处理办法:终止DAEMON进程,在许可证里面加入UER_...信息,但我没有用它试验成功过。

我一直不知道怎么设置,让调试的时候,程序会自动去读写那个假的license而不是一下就跳出了.
jb1968 2006-9-4 17:19
44
0
hottomson:
“开始找种子花了很长时间,发现CRO还要搞定,我水平有限,突然想起来还有一个软件与其加密类似,程序中修改了3个字节”
能讲详细点吗?
hottomson 2006-9-4 21:16
45
0
关于修改三个字节,是国外一个叫LONG的发布的,主要针对一个软件的,后来我发现竟然适用到别的一个软件,至于通用性如何,就要看你的运气了.我并没有深入研究它究竟是修改的什么地方,只知道肯定是让一个地方直接返回0.

http://hottomson.ys168.com/
其它 下面的 FIX.COM 1.0KB

下载后与加密的文件放在一起,运行,如果修改成功你就可以按照42楼的说法做lic了
jb1968 2006-9-4 23:42
46
0
最初由 hottomson 发布
关于修改三个字节,是国外一个叫LONG的发布的,主要针对一个软件的,后来我发现竟然适用到别的一个软件,至于通用性如何,就要看你的运气了.我并没有深入研究它究竟是修改的什么地方,只知道肯定是让一个地方直接返回0.

http://hottomson.ys168.com/
其它 下面的 FIX.COM 1.0KB

........

我的SIGN=1 SIGN2=2为啥老是一样的?
hwwhmgy 2006-9-4 23:54
47
0
先支持,再看!
wanggh 2006-9-5 10:58
48
0
最近碰到一个这个格式的license,怎么启动不了.
seed这些都找对了的.
mzscym 2007-11-23 21:36
49
0
顶了  顶了  顶了
BestHacker 2007-12-14 12:05
50
0
新水手来了!
游客
登录 | 注册 方可回帖
返回