能力值:
( LV2,RANK:10 )
26 楼
最初由 marstj 发布 to wilo: hi,您给的守护程序我已经分析了,seed1=0x346534B9 seed2=0x92C9954F cs:41fde8 xor edx,ebx 执行后dl的值为seed的值,共有8个 字节。设置bpx cs:41fde8共中断8次。 ........
地址本来在47fd66 push ecx ,如何找到41fde8这儿?
能力值:
( LV2,RANK:10 )
27 楼
请marstj回复一下,谢谢
能力值:
( LV2,RANK:10 )
28 楼
to pangzhi:
反汇编程序,查找Flexwrap串,相关的程序段如下,
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0047FD08(C)
|
:0047FD4B 8B4DF4 mov ecx, dword ptr [ebp-0C]
:0047FD4E 33D2 xor edx, edx
:0047FD50 8A9124010000 mov dl, byte ptr [ecx+00000124]
:0047FD56 83FA04 cmp edx, 00000004
:0047FD59 0F844E010000 je 0047FEAD
:0047FD5F 8B450C mov eax, dword ptr [ebp+0C]
:0047FD62 50 push eax
:0047FD63 8B4DF4 mov ecx, dword ptr [ebp-0C]
:0047FD66 51 push ecx ----------------ds:ecx+2的内容为feature name
:0047FD67 8B15E8F34B00 mov edx, dword ptr [004BF3E8]
:0047FD6D 52 push edx
:0047FD6E E80D180000 call 00481580
:0047FD73 83C40C add esp, 0000000C
:0047FD76 85C0 test eax, eax
:0047FD78 0F852F010000 jne 0047FEAD
* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:0047FD29(C), :0047FD49(C)
|
* Possible StringData Ref from Data Obj ->"FLEXwrap"
|
:0047FD7E 68D4EF4A00 push 004AEFD4
:0047FD83 8B4508 mov eax, dword ptr [ebp+08]
:0047FD86 50 push eax
:0047FD87 E8645EFEFF call 00465BF0
:0047FD8C 83C408 add esp, 00000008
:0047FD8F 89459C mov dword ptr [ebp-64], eax
:0047FD92 837D9C00 cmp dword ptr [ebp-64], 00000000
:0047FD96 7414 je 0047FDAC
注意最靠近:Flexwrap"之前的一个call,注意该call的参数,其中ds:ecx+2为feature name。在softice中设置bpx cs:0047FD66,中断后记下ecx+2的值,设置bpm ds:ecx+2,就可以跟踪到程序对特征名进行处理的代码段,当然就可以找到算法了。
您多试试,一定有所收获。
能力值:
( LV2,RANK:10 )
29 楼
谢谢指点,我再试试。
能力值:
( LV2,RANK:10 )
30 楼
现在我重新测试了一下,结果是不行~
不知道该如何解释
现在应该令人怀疑的是怎么由种子产生合法的LIC文件,
我用CRACKZ网站上面的简单的清除种子的值3D4DA1D6,直接找到种子
跟我第一次用LAOQIAN方法找到的一样,
to marstj:
怎样才能确定种子正确?laoqian的方法与flexwrap方法找到的种子不同怎么办?
能力值:
( LV2,RANK:10 )
31 楼
To lightgun:
能否介绍关于vendor-check function 的一般对策?
再者,我手上没有正确的lic,所以不能确定使用什么格式,12位?20位?
或者更多?
能力值:
( LV9,RANK:330 )
32 楼
12位?20位?16位?都不重要的,只要是正确的就可以!――当然ecc的需要解决
能力值:
( LV2,RANK:10 )
33 楼
最初由 lightgun 发布 ECC 私钥加密,公钥验证,不存在直接比较
实际上我的测试结果是我查找到一个比较的地方,就是2位比较
12位和16位是每两位测试一次,不对就退出!
20位的时候第1、3位一组,2、4一组,其它都是每2位比较了。
究竟有没有ecc呢??
能力值:
( LV2,RANK:10 )
34 楼
你跟踪到的比较方法我也跟踪到了,当时我跟踪的那个软件就没有ECC,ECC应该是很难找到跟踪的地方的.
能力值:
( LV2,RANK:10 )
35 楼
现在,我把flexwrap这个方法整理一下,把顺序变一下,试验一下,看看能不能通用。
我先把我的思路整理一下:
0.copy lic file to c:\flexlm, use the file name lisence.dat
1.use Ida to load the vendor program "-c -l lisence.dat"(into c:\flexlm)
2.find the first two ocurance of 3D4DA1D6, break on all of them.
3.from the position of 3D4DA1D6 , find back about 30 lines until find like "test ecx, ecx; jz
xxxx"break on "jz" change to "test ecx, ecx; jnz xxxx"
or set Ip below "jz".
4. find out the seeds!
能力值:
( LV6,RANK:90 )
36 楼
wilo说的对
但是最后license的制作很重要
1)用flexwrap法跟出的licese,最后的license里必须加上SERVER与DEAMON行,否则不能用,至少我遇到的情况都是这样
2)用主程序_l_sg函数返回跟出的seed,可以要SERVER与DEAMON行,也可以不要
1与2会得到不一样的SIGN
3)我好象用这两种方法可能得到不一样的seed,但是一样用,我现在不敢确认,等我确认完了,继续在这里跟
2006年10月21日:
已经确认:却是SEED可以不一样,作出的license不一样,但是都是可以用
我现在的发现的都是SEED1不一样,但是SEED2一样。
很奇怪。
现在发现,有的是一样的.
2006年11月28日
我明白为什么会有SEED不一样的情况:因为一个软件里有两个vendor,各自发各自的,但又都能用。甚至分别是两个不一样的flexlm版本同时存在于同一个FEATURE里。我的这个就是FLEXnet10与Flexlm9.2同时存在于同一个FEATURE,具有不同的SEED.
能力值:
( LV2,RANK:10 )
37 楼
最初由 marstj 发布 To xzwlyx: CamXXXXXFlexlm的种子如下:seed1=0x3D5066A3 seed1=0x290A944C 在其守护程序teksoft中,算法的地址为 cs:42204a cs:42250b xor edx,ebx ........
To xzwlyx:
能否将你的那个程序再次上传(或者传到我的QQ:50506304),好让我们学习marstj大侠的是如何神奇的找到42250b这个地方,多谢。
To marstj:
如果你有空,能否举个例子说明一下如何找到这个42250b xor edx,ebx这个地址。因为我发现有些程序里根本没有这句指令,有可能是另外的寄存器之间的异或。另外,您指的这个地址是不是在_l_string_key这个函数里?望不吝赐教,谢谢!
能力值:
( LV2,RANK:10 )
38 楼
请注意我在28贴中的回复:
反汇编程序,查找Flexwrap串,相关的程序段如下,
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0047FD08(C)
|
:0047FD4B 8B4DF4 mov ecx, dword ptr [ebp-0C]
:0047FD4E 33D2 xor edx, edx
:0047FD50 8A9124010000 mov dl, byte ptr [ecx+00000124]
:0047FD56 83FA04 cmp edx, 00000004
:0047FD59 0F844E010000 je 0047FEAD
:0047FD5F 8B450C mov eax, dword ptr [ebp+0C]
:0047FD62 50 push eax
:0047FD63 8B4DF4 mov ecx, dword ptr [ebp-0C]
:0047FD66 51 push ecx ----------------ds:ecx+2的内容为feature name
:0047FD67 8B15E8F34B00 mov edx, dword ptr [004BF3E8]
:0047FD6D 52 push edx
:0047FD6E E80D180000 call 00481580
:0047FD73 83C40C add esp, 0000000C
:0047FD76 85C0 test eax, eax
:0047FD78 0F852F010000 jne 0047FEAD
* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:0047FD29(C), :0047FD49(C)
|
* Possible StringData Ref from Data Obj ->"FLEXwrap"
|
:0047FD7E 68D4EF4A00 push 004AEFD4
:0047FD83 8B4508 mov eax, dword ptr [ebp+08]
:0047FD86 50 push eax
:0047FD87 E8645EFEFF call 00465BF0
:0047FD8C 83C408 add esp, 00000008
:0047FD8F 89459C mov dword ptr [ebp-64], eax
:0047FD92 837D9C00 cmp dword ptr [ebp-64], 00000000
:0047FD96 7414 je 0047FDAC
注意最靠近:Flexwrap"之前的一个call,注意该call的参数,其中ds:ecx+2为feature name。在softice中设置bpx cs:0047FD66,中断后记下ecx+2的值,设置bpm ds:ecx+2,就可以跟踪到程序对特征名进行处理的代码段,当然就可以找到算法了。
清注意feature name是license文件中给出的,软件肯定要对它进行处理,用查找到Flexwrap的方法可以确定到feature name存储在内存中的地址。在s-ice中用bpm指令就可以找到feature name被复制到的最终位置,而计算licesne密码的算法必定要对该位置的内容进行处理。找到算法后,您仔细分析,找到seeds很容易。[QUOTE]
能力值:
( LV2,RANK:10 )
39 楼
To marstj:
谢谢!我仔细分析一下。找到该处后,我总结一下和大家分享。
能力值:
( LV2,RANK:10 )
40 楼
To marstj:
我找到你说的那个地址了的,在我的程序里是xor al,bl,bl里面放的是seed,而这个算法就在我说的_l_string_key里面。不过我这个程序非常复杂,用了自定义函数。算出seed是没有用的。Anyway,I really appreciate you,Marstj!You give us a brandnew way to find the correct seed..
能力值:
( LV2,RANK:10 )
41 楼
当然,marstj介绍了了一个好的方法,非常感谢!
不过我另外一个问题请教:
是不是可以在这个地方查到关于vendor-info的处理呢?
我听梅梅说主要处理在config结构,不过我不太清楚在vendor程序里面是否可以找到相应的处理位置?