首页
论坛
专栏
课程

[商业保护] 制作AUTOcad2002中文版网络版的Flexlm license

2004-11-4 17:29 23995

[商业保护] 制作AUTOcad2002中文版网络版的Flexlm license

2004-11-4 17:29
23995
发信人:laoqian

时 间:2004-11-2
软件名称: AUTOcad2002中文网络版
软件类别:地球人都知道
软件介绍:地球人都知道 Flexlm7.1f加密
破解工具:ollydbg 1.10(FLY) ,w32Dasm_2002828_pll621,UltraEdit8.0,Flexlm7.1f SDK,calcseed,lmkg,lmutil等

破解目的:制作无限制使用license文件

通过这篇文章我们将向你介绍如何制作FlexLm的license,当然有些重复的我省略了

第一部分: 废话

这个软件上次爆破了,大家也用的很满意。前些日子想玩玩Flexlm, 就拿它来开刀,我参考了tulipfan[CCG]大虾的《制作Compuware.SoftIce.Driver.Suite.3.0.1.StinkyD的license》,有些还照搬了!

第二部分: 转入正题

破解FlexLm最主要的是找到4样东西.

1. 确定版本号
2. 找vendor
3. 计算ENCRYPTION_SEED
4. 找FEATURE

有了这几个,就可以使用FlexLm SDK(如果你有)做出注册机了.
btw:FlexLm SDK一般是通用兼容的的,比如7.2就可以制作7.1的,甚至有时7.1也可以制作7.2的,关键是参数设置。

1. 确定版本号

* 确定版本号可以通过lmutil.exe(tulipfan[CCG]大虾提供的工具里有)来确定
* 还有一个办法就是用二进制编辑器,推荐使用HexWorkshop,它的查找功能很强,特别是Find All Instances更是我最最常用的.
在查找对话框Type中选择类型Text String,Value中输入"@(#) FLEXlm v",查找,"@(#) FLEXlm v"后面的就是版本号.
*以上是tulipfan[CCG]大虾说的
而我的方法是用Flexlm SDK里的lmtools(在\flexlm\v7.1\i86_n3目录里),运行进入Utilities,点击“Browse”查找你的Flexlm加密的程序主exe,然后“find version”,在下面就会显示你的Flexlm版本,用v7.1版甚至可以看到8.3版以后,是通用的。

最后确定版本号是7.1f,这一步的目的有两个,一是在lmkg.exe中生成Vendor信息时用,二是在写制作FlexLm的license时使用。

2. 先找FEATURE

我没有用IDA,太麻烦了,既然有SDK和前人的经验,我偷个懒。如果你没有像我的条件就只好去找lc_checkout,其实也不难,我记得在我写上篇《cad2002中文版的破解[网络验证及限制用户]》时,跟踪时我就看到它的FEATURE和VENDOR,但是当时不明白,只觉得这个值很特别就记下来了“41100ACD_2002_0F”和"adskflex",跟踪过程我到是忘记了。
我偷懒的办法,还是用Flexlm SDK里的lmtools!打开“Server status”项,点击“Perform status Equiry”,你就会看到服务器端的正版license.dat内容!

101: SERVER main 001234567890     (我的服务器网卡号,我隐去正确的,避免麻烦啊!)
80: VENDOR adskflex port=8080
150: INCREMENT 41100ACD_2002_0F adskflex 1.000 permanent 100 VENDOR_STRING=(中间有很多参数,省略避免麻烦)SIGN=787878787878(我隐去正确的,避免麻烦,为什么是78 ?)
     关联信息: 省略
170: (overall file checksum)

看到了吗!

VENDOR adskflex
INCREMENT 41100ACD_2002_0F,这个INCREMENT其实就是FEATURE,后面那个1.000就是Version
permanent 是用户数
VENDOR_STRING=  这个也参与计算验证的
中间有很多参数也参与计算验证的,省略避免麻烦
SIGN=787878787878 我就不说了

如果你没有像我的条件就只好去看别的资料学习,很简单的!

3. 找vendor以及计算seed的关键数据

下面引用自tulipfan[CCG]:
“要找vendor_id就需要找到l_sg这个函数了(至于为什么要找这个函数建议看一些更基础的文章),在这儿我主要是介绍一下如何定位l_sg函数,这个是FlexLm的一个内部使用的函数. lc_init,lc_checkout都会调用它下面是它们的调用关系,括号里面的数字是调用的次数,这个是我从7.2i版的demo.exe上跟踪得到的结果,其他版本可能略有不同.

a. lc_init -> l_init
b. l_init -> l_sg

a. lc_checkout -> l_checkout
b. l_checkout -> lm_start_real(2)
c. lm_start_real -> l_good_lic_key(3)
d. l_good_lic_key -> l_sg(2)

从上面可以看到它们的调用关系.

我们可以通过l_sg确定vendor_id和ENCRYPTION_SEED,通过lc_checkout可以确定FEATURE

IDA通过FlexLm的sig文件可以确定上面的大部分函数,再通过他们的调用关系,很容易找到其他函数.

制作FlexLm的批处理文件和工具包可去CrackZ去下载.

最后定位到l_sg函数”

*************************
各位看官说了,我们上面已经找到了 VENDOR,还麻烦什么?
嘿嘿,大头在后面呢!

废话少说,我们直接反汇编acad.exe(好大啊,我的机子是P42.8,用了10多分钟),我们查找“7648B98E”,来到下面,好像就这么1,2处。前人的经验就是宝贵啊,我省了很多事!

* Referenced by a CALL at Addresses:
|:00945490   , :0094C1EA   , :0094C7B0   , :0096383C   , :00971159   
|:00985C14   
|
:0094DB50 55                      push ebp    ====先在这个地方下断
:0094DB51 8BEC                    mov ebp, esp
:0094DB53 83EC30                  sub esp, 00000030
:0094DB56 C745F08EB94876          mov [ebp-10], 7648B98E   ====这个数在确定l_sg函数上很有用
:0094DB5D C745EC03000000          mov [ebp-14], 00000003
:0094DB64 8B4508                  mov eax, dword ptr [ebp+08]
:0094DB67 8B486C                  mov ecx, dword ptr [eax+6C]
:0094DB6A 8B91D4010000            mov edx, dword ptr [ecx+000001D4]
:0094DB70 81E200800000            and edx, 00008000
:0094DB76 85D2                    test edx, edx
:0094DB78 7423                    je 0094DB9D  ====这个跳,第一次肯定会跳的,迷惑了我一下。
:0094DB7A 833DC4DAB50000          cmp dword ptr [00B5DAC4], 00000000
:0094DB81 741A                    je 0094DB9D
:0094DB83 8B4510                  mov eax, dword ptr [ebp+10]
:0094DB86 50                      push eax
:0094DB87 8B4D0C                  mov ecx, dword ptr [ebp+0C]
:0094DB8A 51                      push ecx
:0094DB8B 8B5508                  mov edx, dword ptr [ebp+08]
:0094DB8E 52                      push edx
:0094DB8F FF15C4DAB500            call dword ptr [00B5DAC4] ====在这个地方下断,之后就是我们要的!
:0094DB95 83C40C                  add esp, 0000000C
:0094DB98 E913010000              jmp 0094DCB0

*************************
别急,先做一下准备工作:
*************************
因为我们是网络版,而且以前是正常使用的,就是说我们要去服务器验证正版的license.dat,那我们机子里已经有了LICPATH.LIC文件,这时我们必须断开网络!记得以前调试时没这么作,得到的seed1和seed2不对,不知道什么原因。
但是问题又来了,我们没有了license.dat,这就要我们做一个假的,格式我不说了看雪的书上很清楚了。
我们根据我们上面得到的正版license.dat内容,做一个假的license.dat,放在acad目录里:
***************
FEATURE 41100ACD_2002_0F adskflex 1.000 permanent uncounted \
        VENDOR_STRING="Cracked By laoqian[FCG]" HOSTID=ANY \
        SIGN=787878787878  (怎么又是78 !?)
***************
因为断开网络,所以运行acad会找不到license,我们把它指向我们的假的license.dat,当然是出错退出!

好,工作开始:
下面我启动ollydbg 1.10调入acad.exe,在入口停下,直接下bp 0094DB50,bp 0094DB8F
F9执行,中断在0094DB50。

这时第一次来到:0094DB78 7423  je 0094DB9D时它是要跳过去的,注意要跳就让他跳吧。我开始时强制不跳,倒是能来到0094DB8F,结果跟出了错误的seed1和seed2,而且居然多少次结果还都一样,邪门了。
再次F9,我们又回来中断在0094DB50,F8单步执行,这次不跳了,直到过了:0094DB8F,暂停!
我们在命令栏下如下命令,可以看到:(我纪录了2次的调试结果)

输入 dd [esp+4]
**********
00F886CC  6B736461
ESP+4    > 00F886CC  ASCII "adskflex"

输入 dd [esp+8]
****1****

0012F608  00000004
0012F60C  1731E48D     data[0]
0012F610  061711DA     data[1]
0012F614  A3A37979
0012F618  CC926A64
0012F61C  A1136749
0012F620  F174A41F
0012F624  00000000
********2************
0012F608  00000004
0012F60C  F3D50069     data[0]
0012F610  E2F3F53E     data[1]
0012F614  A3A37979
0012F618  CC926A64
0012F61C  A1136749
0012F620  F174A41F
0012F624  00000000

输入dd [esp]
******1*****

0131B660  00000066
0131B664  0073001F  
0131B668  AEF0D6A0   job+08
0131B66C  A21343D5   job+0c
0131B670  C156EC2E   job+10
0131B674  00000000
********2***********
0131B6C0  00000066
0131B6C4  0073001F  
0131B6C8  4A143244   job+08
0131B6CC  46F7A731   job+0c
0131B6D0  25B208CA   job+10

这些数据就是我们计算seed1和seed2的关键!

3. 计算ENCRYPTION_SEED

使用工具calcseed.exe,输入上述信息,计算

ENCRYPTION_SEED0 0x39e414xx   =SEED1 为了不给看雪带来麻烦故意给个错的
ENCRYPTION_SEED1 0x28c2e1xx   =SEED2 为了不给看雪带来麻烦故意给个错的

2次结果是一样的

至此,分析已经基本完成,可以使用SDK写license.dat

第三部分: 制作license.dat

我们得到数据如下:

Feathure  41100ACD_2002_0F
Version  1.000
#define ENCRYPTION_SEED1 0x39e414xx 为了不给看雪带来麻烦故意给个错的

#define ENCRYPTION_SEED2 0x28c2e1xx 为了不给看雪带来麻烦故意给个错的

VENDOR adskflex

使用lmkg.exe,选择version 7.0,在vendor_id输入"adskflex"得到:
/* Version 7 keys */
#define VENDOR_KEY1 0x2bb24a5b
#define VENDOR_KEY2 0x9d6d840b
#define VENDOR_KEY3 0x0f9b9894
#define VENDOR_KEY4 0x97fc2c5b
#define VENDOR_KEY5 0x7140af80
#define CRO_KEY1 0x2f924853
#define CRO_KEY2 0xdb4fe68d

#define VENDOR_NAME "adskflex"

按照上面的信息,编辑\flexlm\v7.1\machind\lm_code.h
**********************************
#ifndef LM_CODE_H
#define LM_CODE_H
#include "lm_cro.h"

/*
 *      Pick an LM_STRENGTH.
 *
 *              If you're not using CRO public-key, then leave this as
 *              LM_STRENGTH_DEFAULT.
 *              If you're upgrading from pre-v7.1, and want no changes,
 *              set this to LM_STRENGTH_LICENSE_KEY.
 */

#define LM_STRENGTH LM_STRENGTH_[COLOR=red]DEFAULT[/COLOR]   /*注意12位的SIGN要这个参数 */

/*
 * LM_STRENGTH Options are
 *      LM_STRENGTH_DEFAULT             Public key protection unused
 *                                      Use SIGN= attribute
 *                                      sign length = 12
 * Public key:
 *       LM_STRENGTH_113BIT, LOW        sign length = 58 chars
 *       LM_STRENGTH_163BIT, MEDIUM     sign length = 84 chars
 *       LM_STRENGTH_239BIT, HIGH       sign length = 120 chars
 *
 * Use pre-v7.1, non-CRO
 *       LM_STRENGTH_LICENSE_KEY        Use pre-v7.1 license-keys.
 *                                      Doesn't use SIGN= attribute.
 */

/*
 *      Vendor's private seeds, -- replace with 32-bit numbers that
 *                                 you make up.
 */

#define ENCRYPTION_SEED1 [COLOR=red]0x39e414xx[/COLOR]   /*我们找到的SEED1 */
#define ENCRYPTION_SEED2 [COLOR=red]0x28c2e1xx[/COLOR]   /*我们找到的SEED2 */
#define ENCRYPTION_SEED3 0x22222222     /*没用,不变 */
#define ENCRYPTION_SEED4 0x32323232   /*没用,不变 */

/*
 *      FLEXlm vendor keys -- enter as received from Globetrotter.
 *      Changing these keys has NO impact on license files (unlike
 *      the ENCRYPTION_SEEDs).
 */
/*-
 *      Generate these keys with: lmvkey -v demo -d (+3 months) -p ALL -c DEMO
 *              (Use a date approx 3 months out)
 */


#define VENDOR_KEY1 [COLOR=red]0x2bb24a5b[/COLOR]   /*我们算出的 */
#define VENDOR_KEY2 [COLOR=red]0x9d6d840b[/COLOR]   /*我们算出的 */
#define VENDOR_KEY3 [COLOR=red]0x0f9b9894[/COLOR]   /*我们算出的 */
#define VENDOR_KEY4 [COLOR=red]0x97fc2c5b[/COLOR]   /*我们算出的 */
#define VENDOR_KEY5 [COLOR=red]0x7140af80[/COLOR]   /*我们算出的 */
#define CRO_KEY1 0x2f924853        /* Used to enable CRO -- turned off by default */
#define CRO_KEY2 0xdb4fe68d        /* Be sure to reset LM_STRENGTH above if
                               CRO_KEY is non-zero */

/*
 *      FLEXlm vendor name.  Leave as "demo" if evaluating FLEXlm.  Otherwise
 *                           set to your vendor daemon name.
 */

#define VENDOR_NAME "[COLOR=red]adskflex[/COLOR]"  /*我们找到的VENDOR */

/*
 *      Older customers with newer versions may want to set
 *      behavior defaults to previous version, though this is usually
 *      discouraged.  Behaviors can be changed individually using
 *      LM_A_xxx in the flexible API.  New customers should use the
 *      current default, as set below
 *
 *      Valid settings include:
 *              LM_BEHAVIOR_V2, _V3, _V4, _V5, _V5_1, _V6, _V7, _V7_1
 */

#define LM_VER_BEHAVIOR LM_BEHAVIOR_[COLOR=red]V7_1[/COLOR] /*这里因为是FLexLm版本号是7.1f */
#endif /* LM_CODE_H */

**************************************
编辑好了,存盘,OK

打开\flexlm\v7.1\i86_n3\genlic.exe开始我们的制作吧
看附图:


1.basic窗口内填好Feathure,选择permanent打勾,选择run anywhere
2.进入advance窗口,version内填FEATURE的Version就是1.000,Vendor info填上Cracked by laoqian[FCG]



3.其余不改了,回到basic窗口,点击make license,然后save你的license.dat文件
大功告成!
你可以制作各种限制条件的license.dat,随你便了,我做的是无限制!

第四部分: 感谢(又照搬了tulipfan[CCG])

CrackZ
Nolan Blender
Oleh Yuschuk
tulipfan[CCG]
allenzhu[CCG]
FCG的同仁
和所有看学论坛上的朋友们!

第五部分 ...
tulipfan[CCG]介绍了直接用VC编译lmcrypt.c的方法,我试了多次总是不成功,真希望他老人家有空详细说说。
另外,我看了cad2004中文网络版是8.3的,他的在确定l_sg函数上很有用地那个数不同了,也有我找到了,只是我们没有关于8.3的计算工具calcseed.exe(是否一样呢),谁有啊?


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

最新回复 (15)
ijia 2004-11-4 19:08
2
0
《制作Compuware.SoftIce.Driver.Suite.3.0.1.StinkyD的license》这篇文章哪有啊?我搜索论坛没找到啊
laoqian 8 2004-11-4 21:00
3
0
最初由 ijia 发布
《制作Compuware.SoftIce.Driver.Suite.3.0.1.StinkyD的license》这篇文章哪有啊?我搜索论坛没找到啊


在001老论坛,可惜关了,只好等精华6出来,你再看了,
ForEver 20 2004-11-5 13:54
4
0
收集一贴。
老迁 是什么 CG来,忘了。抱歉。:D
laoqian 8 2004-11-6 11:04
5
0
biotech7  要的FlexLM7.x的sig文件

附件:FLEXlm_Lmgr72f.rar
ForEver 20 2004-11-6 14:36
6
0
晕。下载不了。
linhanshi 2004-11-6 14:42
7
0
支持!!!
yesky1 5 2004-11-6 15:11
8
0

另外,我看了cad2004中文网络版是8.3的,他的在确定l_sg函数上很有用地那个数不同了,也有我找到了,只是我们没有关于8.3的计算工具calcseed.exe(是否一样呢),谁有啊?

一直到10.0这个calcseed.exe都是可以用的,算法没变
laoqian 8 2004-11-8 17:10
9
0
最初由 ForEver 发布
晕。下载不了。

可以下载了
laoqian 8 2004-11-12 15:53
10
0
最初由 yesky1 发布

一直到10.0这个calcseed.exe都是可以用的,算法没变


我发现2004基本没有改变.
那我们做他2004的无限制license太简单了!我已经成功作出了!
只是动态跟踪有些麻烦,他居然加壳了.还是peid一看是safedisc2.20
才知道Flex被safedisc的那个公司Macrovision Corporation收购了?
biotech7 2004-12-10 15:43
11
0
感谢laoqian的奉献!
pendan2001 4 2004-12-10 16:34
12
0
收藏先!!!!!
newsearch 9 2004-12-10 22:02
13
0
很不错。
老兄,想问你一个问题:我有一款FLEXLM7.2f保护的软件,反汇编后在EXE和DLL文件里面没有发现l_sg函数,而是在动态链接库DLL里发现了确定该函数的7648B98E,结构和你的一样。
请问我怎样去data[]?谢谢
laoqian 8 2004-12-11 11:04
14
0
在那里下断点,看看。
DLL下断点,用OD就可以啊。具体看看od的资料。
laoqian 8 2004-12-13 11:48
15
0
最初由 ijia 发布
《制作Compuware.SoftIce.Driver.Suite.3.0.1.StinkyD的license》这篇文章哪有啊?我搜索论坛没找到啊

找到了,隐藏的这么深啊!
http://crackforum.bbs.net/bbs/01/271115.html?title=%D6%C6%D7%F7Compuware.SoftIce.Driver.Suite.3.0.1.StinkyD%B5%C4license
softcrk 2006-9-8 23:38
16
0
输入 dd [esp+4]
**********
00F886CC  6B736461
ESP+4    > 00F886CC  ASCII "adskflex"

输入 dd [esp+8]
****1****

0012F608  00000004
0012F60C  1731E48D     data[0]
0012F610  061711DA     data[1]
0012F614  A3A37979
0012F618  CC926A64
0012F61C  A1136749
0012F620  F174A41F
0012F624  00000000
********2************
0012F608  00000004
0012F60C  F3D50069     data[0]
0012F610  E2F3F53E     data[1]
0012F614  A3A37979
0012F618  CC926A64
0012F61C  A1136749
0012F620  F174A41F
0012F624  00000000

输入dd [esp]
******1*****

0131B660  00000066
0131B664  0073001F  
0131B668  AEF0D6A0   job+08
0131B66C  A21343D5   job+0c
0131B670  C156EC2E   job+10
0131B674  00000000
********2***********
0131B6C0  00000066
0131B6C4  0073001F  
0131B6C8  4A143244   job+08
0131B6CC  46F7A731   job+0c
0131B6D0  25B208CA   job+10

这些数据就是我们计算seed1和seed2的关键!

3. 计算ENCRYPTION_SEED

使用工具calcseed.exe,输入上述信息,计算

ENCRYPTION_SEED0 0x39e414xx   =SEED1 为了不给看雪带来麻烦故意给个错的
ENCRYPTION_SEED1 0x28c2e1xx   =SEED2 为了不给看雪带来麻烦故意给个错的

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
我用了calcseed.exe,输入上述信息,计算

data[0]  填入1731E48D
data[1]  填入061711DA
VENDORNAME 填入adskflex
但是ENCSEED[0] 陪 ENCSEED[1] 都是空白,????生
selector values 出? Can't convert job08 to int ?息

job+0x08 job+0x0c job+10 也未?生??

?求?忙~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

游客
登录 | 注册 方可回帖
返回