UGFLEX——传奇在继续(2)

时间:2005-12-20 来源: 作者: 点击:
ΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖ 5A05375F 5A05375F loc_5A05375F: ; CODE XREF: _l_ckout_string_key+E43j 5A05375F ; _l_ckout_string_key+E4Cj 5A05375F push offset byte_5A0C5820 5A053764 call _our_encrypt ;the se
  ΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖ
5A05375F
5A05375F loc_5A05375F:          ; CODE XREF: _l_ckout_string_key+E43j
5A05375F                                        ; _l_ckout_string_key+E4Cj
5A05375F                push    offset byte_5A0C5820
5A053764                call    _our_encrypt        ;the second encrypt
.
.
.
5A05384B                mov    ecx, [ebp+var_188]
5A053851                add    ecx, 1
5A053854                mov    [ebp+var_188], ecx
5A05385A
5A05385A loc_5A05385A:          ; CODE XREF: _l_ckout_string_key+F47j
5A05385A                mov    edx, [ebp+var_188]
5A053860                cmp    edx, [ebp+var_18C]
5A053866                jge    loc_5A0539E0
5A05386C                mov    eax, [ebp+var_188]
5A053872                mov    cl, [ebp+eax*2+var_168]
5A053879                mov    [ebp+var_1CC], cl
5A05387F                call    ds:__p___mb_cur_max
5A053885                cmp    dword ptr [eax], 1
.
.
.
5A0539CB                xor    eax, eax
5A0539CD                mov    al, byte_5A0C5820[edx]              ; 最终 - 比较license
5A0539D3                cmp    ecx, eax
5A0539D5                jz      short loc_5A0539DB              ;比较下一个byte
5A0539D7                xor    eax, eax                  ;错误的key
5A0539D9                jmp    short loc_5A053A01             
5A0539DB ; ΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖ
5A0539DB
5A0539DB loc_5A0539DB:        ; CODE XREF: _l_ckout_string_key+10D3j
5A0539DB                jmp    loc_5A05384B        ;loop back

上面的循环与版本7中的有些类似(现在是7.2)。5A0C5820是产生真正的key的地方!这里有必要说明一下key的产生:如果没有license key,我们的license(格式正确)是混乱的,两者好像是通过addi function函数联系到一起的。所以现在程序的任务就是计算vendorseed,并在4个vendorkey的帮助下同混乱的license混合(可能是做某种运算^_^)。上面说得工作将在5A0C5820处完成。在5A0C5820处bpm,我们得到:

.
.
5A053334                mov    byte_5A0C5820[ecx], al    ;here we go
5A05333A                jmp    short loc_5A0532F9
5A05333C loc_5A05333C:          ; CODE XREF: _l_ckout_string_key+A0Dj
5A05333C                cmp    [ebp+var_188], 0

从5A05333C处开始追踪,我们发现了计算seed的代码:

5A0533EA                xor    eax, ebx        ;计算正确的seed
5A0533EC                push    eax            ;入栈
5A0533ED                call    sub_5A053AD3
5A0533F2                add    esp, 4
5A0533F5                mov    [ebp+seed_one], eax
5A0533FB                mov    edx, [ebp+seed_one]
5A053401                and    edx, 0FFh
.
.
5A0534C9                add    eax, 1
5A0534CC                mov    [ebp+var_10], eax
5A0534CF                mov    [ebp+seed_one], 3D4DA1D6h  ;隐藏seed
.
.
5A053548                push    eax    ;第二个seed入栈
5A053549                call    sub_5A053AD3
5A05354E                add    esp, 4
5A053551                mov    [ebp+seed_two], eax
5A053557                mov    edx, [ebp+seed_two]
.
.
5A053628                mov    [ebp+var_10], eax
5A05362B                mov    [ebp+seed_two], 3D4DA1D6h  ;隐藏5A053635                jmp    loc_5A053735

将seed隐藏能很好的防止内存dump工具将seed解出来。解seed的过程只能在特定位置并且是运行时才可以!

总结:
LC_CHECKOUT ---
        |
        |
        _l_good_lic_key— /*加密的keys*/
                  |
                  |
                  _l_ckout_crypt---/*解密的keys*/
                            |
                            |
                            _real_crypt---
                                  |
                                |
                        _l_ckout_string_key---
                        |
                        |
                5A0533EA  /*计算第一个seed*/
                        |
                        |
                5A053547  /*计算第二个seed*/
                        |
                        |
                5A0539DB <-
                        |
                        |
                5A0539CD---  /*license比较*/
现在我们可以修改lm_code.h并且编译lmcrypt。使用3D4DA1D6h这样的字节模式,我们在AddInlm.dll中找类似的位置。其实我们只需要LC_CHECKOUT作为feature名。使用其他的模式能得到相应的位置(对于没有flexlm SDK的朋友来说,比较有用):
jutil.dll          AddInlm.dll        Selicwiz.exe
5A0533EC        046CAEDC         00428C6C
.
5A0539CD        046CB4BD         0042924D

The origin of the above code is the object lm_ckout.obj winthin the lmgr.lib library.(大体意思是上面的代码从那里来的)

                                             |
                                             |
                                             5A0533EA  /*计算第一个seed*/
                                             |
                                             5A053547  /*计算第二个seed*/
                                             |
                                             5A0539DB <-                                                   
                                                 |      |
                                                  5A0539CD---  /*license比较*/
                                             |
                                            --
翻译得不好,大虾莫笑:P
------分隔线----------------------------
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
最新评论 查看所有评论
发表评论 查看所有评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 密码: 验证码:
推荐内容