|
楼主 |
发表于 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, 下载次数: 988
, 下载积分:
资产 -2 信元, 下载支出 2 信元
-
-
Flexlm_sfk_11_4.part07.rar
3.34 MB, 下载次数: 725
, 下载积分:
资产 -2 信元, 下载支出 2 信元
-
-
Flexlm_sfk_11_4.part08.rar
3.34 MB, 下载次数: 905
, 下载积分:
资产 -2 信元, 下载支出 2 信元
-
-
Flexlm_sfk_11_4.part09.rar
3.34 MB, 下载次数: 770
, 下载积分:
资产 -2 信元, 下载支出 2 信元
-
-
Flexlm_sfk_11_4.part10.rar
3.34 MB, 下载次数: 826
, 下载积分:
资产 -2 信元, 下载支出 2 信元
|