看来还是需要不断的学习、不断的琢磨,有点进展了,我按照论坛上的帖子将两个seeds找出来了(可能不正确),具体步骤如下:
代码如下:
00499B94 /$ 55 push ebp ====先在这个地方下断
00499B95 |. 8BEC mov ebp, esp
00499B97 |. 83EC 24 sub esp, 24
00499B9A |. C645 EC 00 mov byte ptr [ebp-14], 0
00499B9E |. 33C0 xor eax, eax
00499BA0 |. 66:8945 ED mov word ptr [ebp-13], ax
00499BA4 |. 8845 EF mov byte ptr [ebp-11], al
00499BA7 |. C745 F4 B830736F mov dword ptr [ebp-C], 6F7330B8 ===就是这个数在确定l_sg函数上很有用
00499BAE |. C745 FC 00000000 mov dword ptr [ebp-4], 0
00499BB5 |. C745 F8 00000000 mov dword ptr [ebp-8], 0
00499BBC |. C745 F0 03000000 mov dword ptr [ebp-10], 3
00499BC3 |. 68 00100000 push 1000
00499BC8 |. 8B4D 08 mov ecx, dword ptr [ebp+8]
00499BCB |. 51 push ecx
00499BCC |. E8 0C3F0200 call 004BDADD ====不知道这个call是干什么用的,论坛原文没有!
00499BD1 |. 83C4 08 add esp, 8
00499BD4 |. 85C0 test eax, eax
00499BD6 |. 74 52 je short 00499C2A =====论坛上原文是这样说的:第一次肯定会跳的!第二次再来!
00499BD8 |. 8B55 08 mov edx, dword ptr [ebp+8]
00499BDB |. 8B82 98010000 mov eax, dword ptr [edx+198]
00499BE1 |. 8B88 DC1C0000 mov ecx, dword ptr [eax+1CDC]
00499BE7 |. 83B9 24050000 00 cmp dword ptr [ecx+524], 0
00499BEE |. 74 3A je short 00499C2A
00499BF0 |. 8B55 10 mov edx, dword ptr [ebp+10]
00499BF3 |. 52 push edx
00499BF4 |. 8B45 0C mov eax, dword ptr [ebp+C]
00499BF7 |. 50 push eax
00499BF8 |. 8B4D 08 mov ecx, dword ptr [ebp+8]
00499BFB |. 8B91 98010000 mov edx, dword ptr [ecx+198]
00499C01 |. 8B82 DC1C0000 mov eax, dword ptr [edx+1CDC]
00499C07 |. 05 28050000 add eax, 528
00499C0C |. 50 push eax
00499C0D |. 8B4D 08 mov ecx, dword ptr [ebp+8]
00499C10 |. 8B91 98010000 mov edx, dword ptr [ecx+198]
00499C16 |. 8B82 DC1C0000 mov eax, dword ptr [edx+1CDC]
00499C1C |. FF90 24050000 call dword ptr [eax+524] ====在这个地方下断,F8之后就是我们要的!
00499C22 |. 83C4 0C add esp, 0C
00499C25 |. E9 13010000 jmp 00499D3D
00499C2A |> 6A 04 push 4
00499C2C |. 8D4D DC lea ecx, dword ptr [ebp-24]
00499C2F |. 51 push ecx
========================================================================================
用OD载入后(前提是有一个试用期的license),按F9,第一次断在了00499B94 /$ 55push ebp ,这个没问题。然后F8一直往下走,然后直到00499BD6 |. 74 52 je short 00499C2A ,确实跳了,然后继续F9,仍然断在了00499B94上,继续F8,一直到00499BD6,期待别跳了,但令我失望了,第二次还是给跳了!论坛前辈说不能修改指令让强行跳,我就继续F9,竟然还是断在了00499B94(前面第一个断点)上,继续F8,仍然跳了。最后我索性一直按F9,n次以后断点终于落在了00499C1C(第二个断点)处(这次肯定没跳,不然不会到这里了),然后F8,然后
输入 d [esp+4] 在内存窗口看到,【长型——ASCII 转存】
看到是VENDOR 名字这个没错
输入 d [esp+8] 在内存窗口看到,【长型——ASCII 转存】
012EB84 00000004 ...
0012EB88 060E321A 2data[0]
0012EB8C 2BF9E8B0 拌? data[1]
0012EB90 8D0111AA ??
0012EB94 14DFA9A4 ぉ?
0012EB98 C8A80E58 Xㄈ
0012EB9C FC1DB4FE ?
0012EBA0 0008000A ...
0012EBA4 30310000 ..10
0012EBA8 0000302E .0..
0012EBAC 00000000 ....
---------------------------------------------------------------------------
输入d [esp] 【长型——ASCII 转存】
321964A4 00000000 ....
321964A8 00DFFFFD ??
app .00DFFFFD
321964AC 56623C81 ?bV job+08
321964B0 0060F91F 鵣.
app .0060F91F job+0c
321964B4 00F40000 ..?
app .00F40000 job+10
321964B8 00000000 ....
321964BC 00000000 ....
321964C0 00000000 ....
321964C4 00000000 ....
321964C8 0046D760 `譌. app.0046D760
321964CC 3217AD68 h?2 ASCII "36A8D756099C"
----------------------------------------------------------------------------
重新载入OD,然后重新操作一遍:
输入 d [esp+4] 在内存窗口看到的还是VENDOR 名字
输入 d [esp+8] 在内存窗口看到,【长型——ASCII 转存】
0012EB84 00000004 ...
0012EB88 063C0028 (.< data[0]
0012EB8C 2BCBDA82 傏? data[1]
0012EB90 8D0111AA ??
0012EB94 14DFA9A4 ぉ?
0012EB98 C8A80E58 Xㄈ
0012EB9C FC1DB4FE ?
0012EBA0 0008000A ...
0012EBA4 30310000 ..10
0012EBA8 0000302E .0..
0012EBAC 00000000 ....
-------------------------------------------------------------------------------------
输入d [esp] 【长型——ASCII 转存】
32072F24 00000000 ....
32072F28 00DFFFFD ?? app.00DFFFFD
32072F2C 64500EB3 ?Pd job+08
32072F30 0052CB2D -薘.
app .0052CB2D job+0c
32072F34 00C60000 ..?
ASCII " $Revision: 1.3 $ .\src\a406.c " job+10
32072F38 00000000 ....
32072F3C 00000000 ....
32072F40 00000000 ....
32072F44 00000000 ....
32072F48 0046D760 `譌.
app .0046D760
32072F4C 3216ACF0 瓞2 ASCII "36A8D756099C"
-------------------------------------------------------------------------------------------
将相关信息输入到calcseed.exe进行计算,如图所示结果:
两次计算结果
一样 。
用计算得到的seeds,和收集到的其他相关信息,使用NoFlexlm推荐的lmcryptgui进行制作了license文件,但程序好像不认这个license文件,功能模块还是不能用。
疑问1:上面的方法找到的data1、data2以及job数据是否正确?貌似job数据很怪异(后面的ASCII很怪异),其中app为应用程序的名称。而且原文d[esp]内存中第一个数据为00398260 000000
66 f...,而我找的第一个数据为32072F24 000000
00 ....。
疑问2:我多试了几次,计算出的seeds始终是一样的,说明seeds找对了吗?
-------------------------------------------------------------------------
谢谢NoFlexlm兄的回帖!
上传的附件: