飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 3393|回复: 1

【WAKU申请加入破文2】EscapeClose Pro 2.0注册算法分析

[复制链接]

该用户从未签到

发表于 2006-8-25 16:22:12 | 显示全部楼层 |阅读模式
【破文标题】【WAKU申请加入破文2】EscapeClose Pro 2.0注册算法分析
【破文作者】WAKU
【作者邮箱】[email protected]
【作者主页】
破解工具】PEID OD
【破解平台】XP SP2
【软件名称】EscapeClose Pro 2.0
【软件大小】
【原版下载http://orsoon.com/Software/Catalog175/3836.html
【保护方式】无
【软件简介】一个可以快速关闭窗口的软件,还有隐藏等其他功能,比较有创意
------------------------------------------------------------------------
    在未来软件园看到这个软件,软件挺有意思,不过要求注册,14.95美元啊~~~于是俺起了邪念,嘿嘿.
    用PEID查,无壳(不知道是不是在未来下的已经脱掉了,不管它),VC7编写.OD载入,查找字符串"错误的注册码",双击,然后再往上翻翻,来到大致这个地方:

00402428   .  51            push    ecx                              ; /pBufSize
00402429   .  68 60894000   push    00408960                         ; |Buffer = EscapeCl.00408960
0040242E   .  8D5424 18     lea     edx, [esp+18]                    ; |
00402432   .  52            push    edx                              ; |pValueType
00402433   .  6A 00         push    0                                ; |Reserved = NULL
00402435   .  68 D0724000   push    004072D0                         ; |Name
0040243A   .  50            push    eax                              ; |hKey
0040243B   .  FFD6          call    esi                              ; \RegQueryValueExA
0040243D   .  8B5424 78     mov     edx, [esp+78]
00402441   .  8D4424 0C     lea     eax, [esp+C]
00402445   .  50            push    eax                              ; /pBufSize
00402446   .  68 84894000   push    00408984                         ; |1234
0040244B   .  8D4C24 18     lea     ecx, [esp+18]                    ; |
0040244F   .  51            push    ecx                              ; |pValueType
00402450   .  6A 00         push    0                                ; |Reserved = NULL
00402452   .  68 C8724000   push    004072C8                         ; |Code
00402457   .  52            push    edx                              ; |hKey
00402458   .  897C24 24     mov     [esp+24], edi                    ; |
0040245C   .  FFD6          call    esi                              ; \RegQueryValueExA
0040245E   .  8B4424 78     mov     eax, [esp+78]
00402462   .  50            push    eax
00402463   .  FFD3          call    ebx
00402465   >  68 60894000   push    00408960                         ;  用户名压栈
0040246A   .  C605 18894000>mov     byte ptr [408918], 0
00402471   .  C605 F4884000>mov     byte ptr [4088F4], 0
00402478   .  C605 D0884000>mov     byte ptr [4088D0], 0
0040247F   .  C605 AC884000>mov     byte ptr [4088AC], 0
00402486   .  C605 88884000>mov     byte ptr [408888], 0
0040248D   .  E8 5EF3FFFF   call    004017F0

        程序不管三七二十一先把你输入的用户名和注册码写入注册表,然后再读出来验证(它也不嫌麻烦).最后一个CALL跟进看看,看到了这些字符串和函数:
        Microsoft Base Cryptographic Provider v1.0
        CALL ADVAPI32.CryptCreateHash
        ......
        不用说,调用了加密函数库.不过可不是简单的把用户名直接加密,要注意以下代码:
        
0040191C  |.  8BE8          mov     ebp, eax
0040191E  |.  83C4 04       add     esp, 4
00401921  |.  3BEB          cmp     ebp, ebx
00401923  |.  0F84 1B030000 je      00401C44
00401929  |.  B8 60894000   mov     eax, 00408960
0040192E  |.  8D50 01       lea     edx, [eax+1]
00401931  |>  8A08          /mov     cl, [eax]
00401933  |.  40            |inc     eax
00401934  |.  3ACB          |cmp     cl, bl
00401936  |.^ 75 F9         \jnz     short 00401931
00401938  |.  2BC2          sub     eax, edx
0040193A  |.  8BD0          mov     edx, eax
0040193C  |.  8BC3          mov     eax, ebx
0040193E  |.  74 10         je      short 00401950
00401940  |>  8AC8          /mov     cl, al
00401942  |.  80C1 0F       |add     cl, 0F
00401945  |.  0088 60894000 |add     [eax+408960], cl                ;  用户名+cl
0040194B  |.  40            |inc     eax
0040194C  |.  3BC2          |cmp     eax, edx
0040194E  |.^ 72 F0         \jb      short 00401940
00401950  |>  83FA 0A       cmp     edx, 0A
00401953  |.  7D 20         jge     short 00401975                   ;  用户名长度大于等于10位则跳
00401955  |.  B9 0A000000   mov     ecx, 0A
0040195A  |.  2BCA          sub     ecx, edx                         ;  10-用户名长度
0040195C  |.  8DBA 60894000 lea     edi, [edx+408960]
00401962  |.  8BD1          mov     edx, ecx
00401964  |.  C1E9 02       shr     ecx, 2
00401967  |.  B8 61616161   mov     eax, 61616161
0040196C  |.  F3:AB         rep     stos dword ptr es:[edi]          ;  在用户名后面补61616161(双字型)
0040196E  |.  8BCA          mov     ecx, edx
00401970  |.  83E1 03       and     ecx, 3
00401973  |.  F3:AA         rep     stos byte ptr es:[edi]           ;  在用户名后面补61(字节型)
00401975  |>  8B0D 60894000 mov     ecx, [408960]
0040197B  |.  881D 6A894000 mov     [40896A], bl
00401981  |.  8BC5          mov     eax, ebp
00401983  |.  8908          mov     [eax], ecx
00401985  |.  8B15 64894000 mov     edx, [408964]
0040198B  |.  8950 04       mov     [eax+4], edx
0040198E  |.  66:8B0D 68894>mov     cx, [408968]
00401995  |.  66:8948 08    mov     [eax+8], cx
00401999  |.  8A15 6A894000 mov     dl, [40896A]

        在"变换用户名"处,第i位用户名会加上i+0xF.而之后会把用户名用61(就是小写a)补足到10位.然后才成为了要加密的数据.经过加密后转换成字符串就是注册码了.
        之后有很大一段代码用于比较注册码是不是在黑名单里,就不用理会了.
        这样比如用户名为waku,经过转换后为"唓|嘺aaaaa",再经过加密后就得到注册码A2521AFCC23CDA23F465了.
        但要注意的是加密算法好像并不标准,输入和输出的都是80位.但这并不妨碍我们理解程序.注册码会出现在内存中,所以内存注册机很好做.真要自己做注册机也可以,根据反汇编后调用加密函数的参数,我们可以知道CryptCreateHash的ALG_ID为0x8003,CryptDeriveKey的ALG_ID为0x6801,总之所有参数应该与反汇编出来的一致(好像是废话),我自己就做了一个注册机,这里就不提供了

          完.
------------------------------------------------------------------------

------------------------------------------------------------------------
【版权声明】本文原创于PYG论坛,转载请注明作者并保持文章的完整, 谢谢!
PYG19周年生日快乐!
  • TA的每日心情
    开心
    2024-1-14 12:06
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2024-9-4 15:20:49 | 显示全部楼层
    破解版下载地址呢
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

    快速回复 返回顶部 返回列表