能力值:
( LV2,RANK:10 )
|
-
-
2 楼
破解FlexLM加密的软件没有必要使用SDK和Sig。
用Ida或Wasm反汇编程序,在反汇编代码中找到FlexWrap串出现的地址,在该地址之前的某个ecx中包含了特征名,call xxxxxx中包含了算法。具体跟踪找到算法的方法如下:先构造一license文件,加密串使用20位的码,其中随机给定的串为“1234”,在内存中查找1234,或根据特征名找到一内存地址,即ds:ecx为特征名,bpm ds:ecx设置该地址为读写中断地址。然后追踪对特征名或1234进行读写的程序段,可以找到相关的算法。找到算法后,立即可以找到加密种子。根据debug.log的信息可以判断软件用的是长密码还是短密码的方式,也可以得到feature的信息。
|
能力值:
( LV9,RANK:330 )
|
-
-
3 楼
楼上的方法也太笼统了。
看看我的文章,或许会有帮助。
或者来我的 QQ群讨论:5306519
又 FLEXnet Licensing v10.1.3 的sig可以自己做
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
2楼的能否举例说明。
我去laoqian的群看看。
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
首先构造一license文件(按照老的格式),其中的密码为长密码串,人为给出的四个字符串假设为1234
license文件的样本如下:
SERVER _hostname_ 0050ba652a27 1700
DAEMON daemon(为守护程序名,在实际中应改为被调试的软件的守护程序)
FEATURE XXXXC daemon 2000.1231 31-dec-2000 1 B18233245D3565C60BC6 \
ISSUED=28-sep-2000 ck=54 1 2 3 4 为四个随机数,即密码串的第2,4,6,8位的值。
用wasm反汇编daemon守护程序。(如proe的为ptc_d.exe)。
查找字符串flexwrap,找到该地址后,在该地址之前的某个地址为call xxxxxx,记录下该地址。
启动s-ice
loader 该守护程序,设置程序执行断点 bpx 地址。
然后用lmtools程序来启动该守护程序,中断在该守护程序中,该段程序的模板如下:
:0048ACBD 8B450C mov eax, dword ptr [ebp+0C]
:0048ACC0 50 push eax
:0048ACC1 8B4DF4 mov ecx, dword ptr [ebp-0C]
:0048ACC4 51 push ecx 注:ds:ecx即为特征名。
:0048ACC5 8B15489B4E00 mov edx, dword ptr [004E9B48]
:0048ACCB 52 push edx
:0048ACCC E8B5160000 call 0048C386 该call为最靠近FLEXwrap的call
:0048ACD1 83C40C add esp, 0000000C
:0048ACD4 85C0 test eax, eax
:0048ACD6 0F852D010000 jne 0048AE09
* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:0048AC87(C), :0048ACA7(C)
|
* Possible StringData Ref from Data Obj ->"FLEXwrap"
|
:0048ACDC 6814984D00 push 004D9814
在内存中查找1234,或根据特征名找到一内存地址,即ds:ecx为特征名,bpm ds:ecx设置该地址为读写中断地址。然后追踪对特征名或1234
进行读写的程序段,可以找到相关的算法。找到算法后,立即可以找到加密种子。
根据debug.log的信息可以判断软件用的是长密码还是短密码的方式,也可以得到feature的信息。
由上面的方法找到的算法如下:
:00422781 EB0F jmp 00422792
:00422783 8B9574FEFFFF mov edx, dword ptr [ebp+FFFFFE74]
:00422789 83C201 add edx, 00000001
:0042278C 899574FEFFFF mov dword ptr [ebp+FFFFFE74], edx
:00422792 83BD74FEFFFF08 cmp dword ptr [ebp+FFFFFE74], 00000008---------关键行
:00422799 7D2B jge 004227C6 ---------关键行
:0042279B 8B45F4 mov eax, dword ptr [ebp-0C] ---------关键行
:0042279E 038574FEFFFF add eax, dword ptr [ebp+FFFFFE74]
:004227A4 33C9 xor ecx, ecx
:004227A6 8A08 mov cl, byte ptr [eax]
:004227A8 8B9574FEFFFF mov edx, dword ptr [ebp+FFFFFE74]
:004227AE 33C0 xor eax, eax
:004227B0 8A821CF84D00 mov al, byte ptr [edx+004DF81C]
:004227B6 33C8 xor ecx, eax
:004227B8 8B9574FEFFFF mov edx, dword ptr [ebp+FFFFFE74]
:004227BE 888A1CF84D00 mov byte ptr [edx+004DF81C], cl
:004227C4 EBBD jmp 00422783
:004227C6 83BD78FEFFFF00 cmp dword ptr [ebp+FFFFFE78], 00000000
:004227CD 0F85EB030000 jne 00422BBE
:004227D3 83BD8CFEFFFF00 cmp dword ptr [ebp+FFFFFE8C], 00000000
:004227DA 0F85E3020000 jne 00422AC3
:004227E0 837DFC00 cmp dword ptr [ebp-04], 00000000
:004227E4 0F85D9020000 jne 00422AC3
|
能力值:
( LV9,RANK:330 )
|
-
-
6 楼
第一次接触这样的方法,学习一下。
|
能力值:
( LV8,RANK:130 )
|
-
-
7 楼
如果我要爆破呢,(堕落一把),关键函数是哪个?
flexlm 9.x 是lc_checkout,
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
爆破很简单,用我上面介绍的方法找到算法,请注意以下的代码:
:004227BE 888A1CF84D00 mov byte ptr [edx+004DF81C], cl
该代码意味着ds:004DF81C中存储的就是license文件经算法计算后
得出的真正密码。该程序段返回后,必定要对真正的密码和license
文件中给出的码进行比较,只要改动比较转移的指令,就可爆破。
几个字节就可以解决问题。
|
能力值:
( LV2,RANK:10 )
|
-
-
9 楼
将jmp 00422783改为jnz?
|
能力值:
( LV2,RANK:10 )
|
-
-
10 楼
flexlm 8.x,flexlm 9.x,flexlm 10.x都可爆破秒杀,而且只用改1bit(not 1 byte)。
那个洞在源码里2003年就有了,一直没改。
我一般用strings找含有flexlm字样的dll或exe,再用专杀工具flexlmkiller处理一下就搞定了。连调试器都不用。
|
能力值:
( LV6,RANK:90 )
|
-
-
11 楼
请问10楼的朋友,你能不能讲的详细一点?
非常感谢。
还有,8楼的朋友,非常感谢,如果能出tutorial就更好了
“爆破很简单,用我上面介绍的方法找到算法,请注意以下的代码:
:004227BE 888A1CF84D00 mov byte ptr [edx+004DF81C], cl
该代码意味着ds:004DF81C中存储的就是license文件经算法计算后
得出的真正密码。该程序段返回后,必定要对真正的密码和license
文件中给出的码进行比较,只要改动比较转移的指令,就可爆破。
几个字节就可以解决问题。
”
比较转移的指令,能给给实例吗?
|
能力值:
( LV2,RANK:10 )
|
-
-
12 楼
将上面由算法自动计算出的密码串抄下。将该密码串填入license文件中,您就构造了一个正确的license文件,这样您连licesne守护程序都不用修改。最关键的是要找到算法,通过追踪程序对特征名的读写的方式一定可以找到算法。
|
能力值:
( LV2,RANK:10 )
|
-
-
13 楼
10楼的你的flexlmkiller哪有下啊?
|
能力值:
( LV2,RANK:10 )
|
-
-
14 楼
Originally posted by Pucua 10楼的你的flexlmkiller哪有下啊?
可能是他自己编的软件,有地方下载估计是不可能的事!
|
能力值:
( LV2,RANK:10 )
|
-
-
15 楼
我查找字符串flexwrap的时候只在license目录下找到一次,而受保护的程序和dll中并没查到这个字符串,是不是这种方法就不行了哦 最初由 marstj 发布 首先构造一license文件(按照老的格式),其中的密码为长密码串,人为给出的四个字符串假设为1234 license文件的样本如下: SERVER _hostname_ 0050ba652a27 1700 DAEMON daemon(为守护程序名,在实际中应改为被调试的软件的守护程序) FEATURE XXXXC daemon 2000.1231 31-dec-2000 1 B18233245D3565C60BC6 \ ........
|
能力值:
( LV2,RANK:10 )
|
-
-
16 楼
守护程序中一定有。
|
能力值:
( LV2,RANK:10 )
|
-
-
17 楼
Mark
|