在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 44263|回复: 197

Flexlm_sdk_11_4以及相关教程(转载)

 关闭 [复制链接]
发表于 2009-6-5 16:29:26 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
本帖属于转载,仅作为技术交流。


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

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

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

1. 确定FlexLm版本号 BEHAVIOR Version

方法一:
* 用二进制编辑器,推荐使用HexWorkshop(我用UltraEdit10.0,呵呵),它的查找功能很强,特别是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或dll,

然后“find version”,在下面就会显示你的Flexlm版本,用v7.1版甚至可以看到8.3版以后,是通用的。有个别程序可能此法不行!
方法三:在反汇编以后,搜索“87654321”,在前面设断点
在Flexlm SDK里lm_code.h文件里你可以看到一下几句:

代码: *      Vendor's private seeds, -- replace with 32-bit numbers that *                                 you make up. */#define ENCRYPTION_SEED1 0x87654321#define ENCRYPTION_SEED2 0x12345678/* *      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) */

这说明demo的SEED1=0x87654321,SEED2=0x12345678
对应Zendenc里是:
代码:0043391D    E8 184B0400       call <jmp.&MSVCRT.memcpy>00433922    83C4 0C           add esp,0C00433925    8D8D 40FFFFFF     lea ecx,dword ptr ss:[ebp-C0]  ;我们可以在这里设断点!0043392B    51                push ecx0043392C    8B95 30FFFFFF     mov edx,dword ptr ss:[ebp-D0]  ;ebp-D0地址是以后要用的!00433932    81C2 4C010000     add edx,14C                    ;计算得到VENDOR地址00433938    52                push edx                       ;VENDOR入栈!(ASCII "zend")00433939    8B85 30FFFFFF     mov eax,dword ptr ss:[ebp-D0]0043393F    50                push eax00433940    E8 95560000       call zendenc.00438FDA   ;这个call就是著名的所谓7648B98E标志call!后面要进去的!!!00433945    83C4 0C           add esp,0C00433948    81BD 44FFFFFF 214>mp dword ptr ss:[ebp-BC],87654321  ;此处比较是否是demo的seed1,当然在此seed1已被加密!00433952    74 0C             je short zendenc.00433960           ;此处比较是否是demo的seed2,当然在此seed2已被加密!00433954    81BD 48FFFFFF 785>cmp dword ptr ss:[ebp-B8],123456780043395E    75 5D             jnz short zendenc.004339BD00433960    8B8D 30FFFFFF     mov ecx,dword ptr ss:[ebp-D0]00433966    8379 14 00        cmp dword ptr ds:[ecx+14],00043396A    74 17             je short zendenc.00433983

我们在断点停下d ebp-c0
代码:0012D404  00000004  ...0012D408  E0AAA4A0  _お?  此seed1已被加密0012D40C  C0121579  y    此seed2已被加密!0012D410  3F9F6A79  yj?    此VENDOR_KEY1已被加密!0012D414  25DC750E  u?    此VENDOR_KEY2已被加密!0012D418  B8B046C5  臚案0012D41C  0B2EAC4E  N? ......向下拉看0012D4A8  00000000  ....0012D4AC  00010007  ..0012D4B0  37300064  d.07   此处显示7.1d0012D4B4  0000312E  .1..   7.10012D4B8  00000000  ....

这之后,等我们第一次走过著名的所谓7648B98E标志call,“00433940   call zendenc.00438FDA”以后,会发现被加密seed又改变了,其实

就是简单的xor,可是这个xor我们不得而知!
我们得到BEHAVIOR Version  V7.1d
btw:87654321此处,在6.x版时,可以得到真seed,
参考文章“Ansoft Serenade v8.5 - Tutorial”

http://www.woodmann.com/crackz/Tutorials/Serenade.htm
代码:I also remembered that the checks for the default seed codes (shipped with the SDK) was a good place to fish the correct seeds, a simple disassembly search for '87654321' finds this code :-:00429C4C CMP D, [EBP-34], 87654321 <-- Check for encryption_seed1.:00429C53 JZ 00429C5E <-- Jump to Error.:00429C55 CMP D, [EBP-30], 12345678 <-- Check for encryption_seed2.:00429C5C JNZ 00429C85 <-- Good jump.:00429C5E MOV EDI, FFFFFFA5 <-- Error Code (-91).Routines inside Ser85.exe detect bpx type breakpoints and patching of key files, the checking code starts at 0040EFD3, here you'll see the names of the files that are checked and the rather obvious 'PUSH 7' instructions which produce a cryptic error message box asking you to call Ansoft for assistance. The files verified should give us a good idea where to look for other parts of the protection, Ansoft's developers evidently tried (as is good policy) to identify possible points of attack. Using bpmb style breakpoints we can quickly recover (what we think are valid) encryption_seed1 (0x7CB2B081) & encryption_seed2 (0x2DFE22B6)......


最后用方法一、二可以确定Zendenc版本号是7.1d,这一步的目的有两个,一是在lmkg.exe中生成Vendor信息时用,二是在使用FlexLm SDK制作

FlexLm的license时使用。

2. 先找FEATURE

方法一:
不用IDA,太麻烦了,既然有SDK和前人的经验,我偷个懒。我偷懒的办法,还是用安装Flexlm SDK里的lmtools!打开“Server status”项,

点击“Perform status Equiry”,你就会看到服务器端的正版license.dat内容!前提是你要配置好,而且有正版程序和license,废话!
比如显示如下:
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 我就不说了

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

btw:如果你的选项得当,现在你甚至就可以在客户端控制license服务器,你可以关闭license服务——慎用!!!,我曾在几次无意的操作中

关闭了license服务,结果单位的所有机器cad罢工,管理员还不知道怎么回事,只好重启服务器,那几天可忙坏了她!这是flexlm的一个bug吧




[ 本帖最后由 shack 于 2009-6-5 17:02 编辑 ]

Flexlm_sfk_11_4.part01.rar

3.34 MB, 下载次数: 1449 , 下载积分: 资产 -2 信元, 下载支出 2 信元

Flexlm_sfk_11_4.part02.rar

3.34 MB, 下载次数: 903 , 下载积分: 资产 -2 信元, 下载支出 2 信元

Flexlm_sfk_11_4.part03.rar

3.34 MB, 下载次数: 873 , 下载积分: 资产 -2 信元, 下载支出 2 信元

Flexlm_sfk_11_4.part04.rar

3.34 MB, 下载次数: 1020 , 下载积分: 资产 -2 信元, 下载支出 2 信元

Flexlm_sfk_11_4.part05.rar

3.34 MB, 下载次数: 976 , 下载积分: 资产 -2 信元, 下载支出 2 信元

发表于 2009-6-5 16:33:05 | 显示全部楼层
是叫flexlm sdk
不叫sfk....
 楼主| 发表于 2009-6-5 17:23:04 | 显示全部楼层

接着传

方法二:
用lmcryptgui可以制作成功以上的license!
我们得到数据如下:
代码:Feathure  Zend_EncoderFeathure Version  1.0ENCRYPTION_SEED1 0xfa5410deENCRYPTION_SEED2 0xdaeca107VENDOR ZendBEHAVIOR Version  V7.1d

1.手动找到vendor,seed1,seed2,FEATURE和版本7.1,7.2....,8.x等
2.填写vendor,seed1,seed2,和BEHAVIOR Version 7等,注意没有0x
3.执行,生成一个exe文件.
4.制作一个假的license.dat文件,格式参考其他资料了,一定要正确的格式,只有sign=是随便写一个!
5.把这个假的license.dat文件往那个生成的exe文件上一拖放,及自动生成正确的license.dat文件,sign已经是正确的了,前提是你前面得到的

vendor,seed1,seed2,FEATURE和版本等都是正确的!
附license.dat的写法:

FEATURE xxxxx VENDORxxx 1.000 permanent uncounted \
VENDOR_STRING=WWW.FCGCHINA.COM HOSTID=ANY ISSUER="by \
laoqian[FCG] 献给自由的FCG" ISSUED=11-NOV-2004 \
SIGN=123456789012

其中“xxxxx ”FEATURE这个需要你手动找,“VENDORxxx”版本 Feathure Version“1.000 ”也需要你手动找确定,不过Feathure Version可

以随便呢,我试了几个都可以运行的。
SIGN=123456789012随便填写12位16进制的数。其余一样。

license.dat文件格式根据版本不一样,以上是flexlm7.1版本之后的格式。
flexlm7.1之前的格式,没有SIGN=,而且位置在前面。

又说明:VENDOR_STRING,ISSUER,ISSUED可以不要的 。

btw:这个的license文件名必须是Zend_Encoder.dat,且必须放在zendenc.exe同目录里!zendenc.exe程序在DOS窗口运行!
代码:FEATURE Zend_Encoder zend 1.0 permanent uncounted VENDOR_STRING=blah \  HOSTID=ANY SIGN=B6457F8A4618

第四部分: 原创发挥

分析得知flexlm9.22。sdk的源码
代码:我们在flexlm9.22 sdk的源码里看到l_privat.h*- *  ------------------------------------------------------------- *  license-key-length stuff */#define LM_OPTFLAG_LKEY_LONG        0x800 /* default False */#define L_SECLEN_SHORT 0x66D8B337#define L_SECLEN_LONG 0x289BEB8A#define L_SECLEN_SET_LONG job->options->flags |= LM_OPTFLAG_LKEY_LONG; \      job->options->sf = L_SECLEN_LONG;#define L_SECLEN_SET_SHORT job->options->flags &= ~LM_OPTFLAG_LKEY_LONG; \      job->options->sf = L_SECLEN_SHORT;#define L_SECLEN_OK (((job->options->flags & LM_OPTFLAG_LKEY_LONG) && \      (job->options->sf == L_SECLEN_LONG)) || \      (job->options->sf == L_SECLEN_SHORT))


0x66D8B337是license-key-length 的一个标志,估计是12位sign!

代码:0043C545    25 FF000000                and eax,0FF0043C54A    25 FF000000                and eax,0FF0043C54F    A2 41E64900                mov byte ptr ds:[49E641],al0043C554    C605 47E64900 00           mov byte ptr ds:[49E647],00043C55B    8A15 47E64900              mov dl,byte ptr ds:[49E647]0043C561    8815 46E64900              mov byte ptr ds:[49E646],dl0043C567    C785 74FEFFFF 08000000     mov dword ptr ss:[ebp-18C],80043C571    817D 18 37B3D866           cmp dword ptr ss:[ebp+18],66D8B337  ;就在这里断下!走到这看看!0043C578    75 0F                      jnz short zendenc.0043C5890043C57A    8B85 74FEFFFF              mov eax,dword ptr ss:[ebp-18C]


输入d 49E641 【长型——ASCII 转存】可以看到如下:
代码:0049E63D  B6000000  ...0049E641  468A7F45  E奆0049E645  EE000018  ..


这是看到我的SIGN=B6457F8A4618,再看上面是什么B6+“468A7F45”+18!其中“468A7F45”低位在前的原则,你发现原来明码在这里!

怎么找到这里的0043C571?
代码:0043C6D0    83BD 8CFEFFFF 00  cmp dword ptr ss:[ebp-174],00043C6D7    74 2A             je short zendenc.0043C7030043C6D9    8B95 78FEFFFF     mov edx,dword ptr ss:[ebp-188]0043C6DF    33C0              xor eax,eax0043C6E1    8A82 40E64900     mov al,byte ptr ds:[edx+49E640]0043C6E7    50                push eax0043C6E8    8B8D 78FEFFFF     mov ecx,dword ptr ss:[ebp-188]0043C6EE    51                push ecx0043C6EF    8D95 30FEFFFF     lea edx,dword ptr ss:[ebp-1D0]0043C6F5    52                push edx0043C6F6    8B45 08           mov eax,dword ptr ss:[ebp+8]0043C6F9    50                push eax0043C6FA    FF95 8CFEFFFF     call dword ptr ss:[ebp-174]0043C700    83C4 10           add esp,100043C703    8B8D 30FEFFFF     mov ecx,dword ptr ss:[ebp-1D0]0043C709    81E1 FF000000     and ecx,0FF0043C70F    8B95 78FEFFFF     mov edx,dword ptr ss:[ebp-188]0043C715    33C0              xor eax,eax0043C717    8A82 40E64900     mov al,byte ptr ds:[edx+49E640]   ;看到49E640地址了吗?我们去那里下内存断点吧0043C71D    3BC8              cmp ecx,eax                       ; eax=真sign的一位和ecx=假sign的一位比较0043C71F    74 04             je short zendenc.0043C725     ;比较0043C721    33C0              xor eax,eax                   ;不对就拜拜了!0043C723    EB 26             jmp short zendenc.0043C74B0043C725  ^ E9 6BFEFFFF       jmp zendenc.0043C595           ;再比较下一位!0043C72A    8B4D 18           mov ecx,dword ptr ss:[ebp+18]


怎么找到这里的0043C71D? 因为我们要读假license文件,读出假sign要在内存存着,我们在那里下内存断点(硬件断点),一步一步跟到这

里,呵呵,需要耐心!不过也不难找,第二次进入“7648B98E”的call,之后慢慢跟就来到了,中间过程不再罗嗦了!


现在,你只要查找66D8B337,看到上面上面的类似代码,下断吧!此发适用于8.x,9.x可能也适用!因为66D8B337没有变!

就是说我们可以找明码,至少在0043C71D处可以一位一位找到!前提,你做了一个正确的假license文件,而且路径正确,还要解决一下anti(

如果有的话)


第五部分:一个问题:
就是我们在跟踪某些flexlm加密的软件时,有时不会来到类似00439019 call dword_49E5EC的地方,应该是2次来到这个地址所在的call,一般

第一次跳过00439019 call dword_49E5EC,第二次才真正进入这个00439019,此时才能得到文中那些值;问题是很多第二次就不来了!直接出

错退出,即使是假licese文件格式参数正确(除了sign以外),也不过来第二次,因此无法得到需要的值,强制跳来是不行的!遇到此问题,

如何解决呢?一般此情况出现是,关键call断点在dll中!个人感觉是license文件名或路径不对,或者有anti和crc校验,再或者是ecc作怪!此问题需要

有心之人来解决!

Flexlm_sfk_11_4.part06.rar

3.34 MB, 下载次数: 981 , 下载积分: 资产 -2 信元, 下载支出 2 信元

Flexlm_sfk_11_4.part07.rar

3.34 MB, 下载次数: 718 , 下载积分: 资产 -2 信元, 下载支出 2 信元

Flexlm_sfk_11_4.part08.rar

3.34 MB, 下载次数: 898 , 下载积分: 资产 -2 信元, 下载支出 2 信元

Flexlm_sfk_11_4.part09.rar

3.34 MB, 下载次数: 763 , 下载积分: 资产 -2 信元, 下载支出 2 信元

Flexlm_sfk_11_4.part10.rar

3.34 MB, 下载次数: 819 , 下载积分: 资产 -2 信元, 下载支出 2 信元

发表于 2009-6-5 17:31:51 | 显示全部楼层
不错,就是希望有一些实例出来就更好了
 楼主| 发表于 2009-6-5 17:41:00 | 显示全部楼层

上传完毕

上传完毕上传完毕

Flexlm_sfk_11_4.part11.rar

3.34 MB, 下载次数: 763 , 下载积分: 资产 -2 信元, 下载支出 2 信元

Flexlm_sfk_11_4.part12.rar

3.34 MB, 下载次数: 845 , 下载积分: 资产 -2 信元, 下载支出 2 信元

Flexlm_sfk_11_4.part13.rar

3.34 MB, 下载次数: 672 , 下载积分: 资产 -2 信元, 下载支出 2 信元

Flexlm_sfk_11_4.part14.rar

3.34 MB, 下载次数: 675 , 下载积分: 资产 -2 信元, 下载支出 2 信元

Flexlm_sfk_11_4.part15.rar

547.5 KB, 下载次数: 586 , 下载积分: 资产 -2 信元, 下载支出 2 信元

发表于 2009-6-5 18:14:00 | 显示全部楼层
这个 好了!
发表于 2009-6-5 18:29:58 | 显示全部楼层
kankan........
发表于 2009-6-5 18:41:28 | 显示全部楼层
不知道能不能拿来作LAKER 32V4的LICENSE
如果可以的话就太好啰^^
发表于 2009-6-5 19:44:24 | 显示全部楼层
上传一个lmcryptgui,很容易用啊。

lmcryptgui.rar

271.09 KB, 下载次数: 729 , 下载积分: 资产 -2 信元, 下载支出 2 信元

 楼主| 发表于 2009-6-6 08:46:32 | 显示全部楼层

自己顶一下

自己顶一下
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-5-4 08:26 , Processed in 0.036706 second(s), 8 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表