飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 4171|回复: 3

[原创] 批量文件改名工具 2.0.0算法分析+ASM注册函数

[复制链接]
  • TA的每日心情
    难过
    2024-4-22 14:49
  • 签到天数: 11 天

    [LV.3]偶尔看看II

    发表于 2010-5-7 16:47:47 | 显示全部楼层 |阅读模式
    【破文标题】批量文件改名工具 2.0.0算法分析+ASM注册函数
    【破文作者】飘云/P.Y.G
    【官方主页】https://www.chinapyg.com
    【作者博客】http://blog.piaoyunsoft.com
    破解平台】WinXp SP3
    【破解工具】PEiD0.94、OD
    【作者邮箱】piaoyun04@163.com
    【软件名称】批量文件改名工具 2.0.0
    【软件大小】499 K
    【原版下载】http://www.newhua.com/soft/90436.htm
    【破解过程】

    PEID 探测-->Borland Delphi 6.0 - 7.0

    很好,,无壳~

    OD载入~~  输入信息:

    Email:piaoyunsoft@163.com
    注册码:123456789

    在OD下断来到(如果找不到这个算法位置,说明您目前还不适合看本文):

    004AE490  push    ebp
    004AE491  mov     ebp, esp
    004AE493  add     esp, -10
    004AE496  xor     ecx, ecx
    004AE498  mov     dword ptr [ebp-10], ecx
    004AE49B  mov     dword ptr [ebp-C], ecx
    004AE49E  mov     dword ptr [ebp-8], edx
    004AE4A1  mov     dword ptr [ebp-4], eax
    004AE4A4  xor     eax, eax
    004AE4A6  push    ebp
    004AE4A7  push    004AE5B8
    004AE4AC  push    dword ptr fs:[eax]
    004AE4AF  mov     dword ptr fs:[eax], esp
    004AE4B2  mov     eax, dword ptr [ebp-4]
    004AE4B5  call    004AE344                         ;  关键CALL  F7进
    004AE4BA  test    al, al
    004AE4BC  je      004AE59D                         ;  关键跳
    004AE4C2  mov     byte ptr [4B7CA5], 1
    004AE4C9  mov     edx, 004AE5CC                    ;  ※注册成功※
    004AE4CE  mov     eax, dword ptr [ebp-4]
    .
    .
    .
    .


    {----------------------关键CALLcall    004AE344--------------------}
    004AE344  push    ebp
    004AE345  mov     ebp, esp
    004AE347  add     esp, -10
    004AE34A  xor     edx, edx
    004AE34C  mov     dword ptr [ebp-C], edx
    004AE34F  mov     dword ptr [ebp-10], edx
    004AE352  mov     dword ptr [ebp-4], eax
    004AE355  xor     eax, eax
    004AE357  push    ebp
    004AE358  push    004AE3B0
    004AE35D  push    dword ptr fs:[eax]
    004AE360  mov     dword ptr fs:[eax], esp
    004AE363  lea     edx, dword ptr [ebp-C]
    004AE366  mov     eax, dword ptr [ebp-4]
    004AE369  mov     eax, dword ptr [eax+30C]
    004AE36F  call    0045DD80
    004AE374  mov     eax, dword ptr [ebp-C]
    004AE377  push    eax
    004AE378  lea     edx, dword ptr [ebp-10]
    004AE37B  mov     eax, dword ptr [ebp-4]
    004AE37E  mov     eax, dword ptr [eax+308]
    004AE384  call    0045DD80
    004AE389  mov     eax, dword ptr [ebp-10]          ;  指向邮箱
    004AE38C  pop     edx
    004AE38D  call    004AE1A4                         ;  算法CALL1 -->F7进去
    004AE392  mov     byte ptr [ebp-5], al             ;  关键赋值
    004AE395  xor     eax, eax
    004AE397  pop     edx
    004AE398  pop     ecx
    004AE399  pop     ecx
    004AE39A  mov     dword ptr fs:[eax], edx
    004AE39D  push    004AE3B7
    004AE3A2  lea     eax, dword ptr [ebp-10]
    004AE3A5  mov     edx, 2
    004AE3AA  call    00404834
    004AE3AF  retn
    004AE3B0  jmp     00404190
    004AE3B5  jmp     short 004AE3A2
    004AE3B7  mov     al, byte ptr [ebp-5]
    004AE3BA  mov     esp, ebp
    004AE3BC  pop     ebp
    004AE3BD  retn

    {----------------------算法CALL1:call    004AE1A4---------------------}
    004AE1A4  push    ebp
    004AE1A5  mov     ebp, esp
    004AE1A7  add     esp, -14
    004AE1AA  xor     ecx, ecx
    004AE1AC  mov     dword ptr [ebp-10], ecx
    004AE1AF  mov     dword ptr [ebp-8], edx
    004AE1B2  mov     dword ptr [ebp-4], eax
    004AE1B5  mov     eax, dword ptr [ebp-4]
    004AE1B8  call    00404CC0
    004AE1BD  mov     eax, dword ptr [ebp-8]
    004AE1C0  call    00404CC0
    004AE1C5  xor     eax, eax
    004AE1C7  push    ebp
    004AE1C8  push    004AE243
    004AE1CD  push    dword ptr fs:[eax]
    004AE1D0  mov     dword ptr fs:[eax], esp
    004AE1D3  mov     byte ptr [ebp-B], 0
    004AE1D7  mov     eax, dword ptr [ebp-4]           ;  指向邮箱
    004AE1DA  call    00404AD0                         ;  邮箱长度
    004AE1DF  test    al, al
    004AE1E1  jbe     short 004AE201
    004AE1E3  mov     byte ptr [ebp-11], al
    004AE1E6  mov     byte ptr [ebp-A], 1              ;  1
    004AE1EA  /xor     eax, eax
    004AE1EC  |mov     al, byte ptr [ebp-A]
    004AE1EF  |mov     edx, dword ptr [ebp-4]          ;  指向邮箱地址
    004AE1F2  |mov     al, byte ptr [edx+eax-1]        ;  逐位
    004AE1F6  |add     byte ptr [ebp-B], al            ;  字节累加
    004AE1F9  |inc     byte ptr [ebp-A]
    004AE1FC  |dec     byte ptr [ebp-11]
    004AE1FF  \jnz     short 004AE1EA
    004AE201  lea     ecx, dword ptr [ebp-10]
    004AE204  mov     dl, byte ptr [ebp-B]             ;  取出累加结果(单字节哦~~~)
    004AE207  mov     eax, 004AE25C                    ;  0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ
    004AE20C  call    004A0028                         ;  算法CALL2
    004AE211  mov     eax, dword ptr [ebp-10]          ;  真码
    004AE214  mov     edx, dword ptr [ebp-8]           ;  假码
    004AE217  call    00404C1C
    004AE21C  sete    byte ptr [ebp-9]                 ;  标志位
    004AE220  xor     eax, eax
    004AE222  pop     edx
    004AE223  pop     ecx
    004AE224  pop     ecx
    004AE225  mov     dword ptr fs:[eax], edx
    004AE228  push    004AE24A
    004AE22D  lea     eax, dword ptr [ebp-10]
    004AE230  call    00404810
    004AE235  lea     eax, dword ptr [ebp-8]
    004AE238  mov     edx, 2
    004AE23D  call    00404834
    004AE242  retn
    004AE243  jmp     00404190
    004AE248  jmp     short 004AE22D
    004AE24A  mov     al, byte ptr [ebp-9]             ;  标志位传到al~~ 作为注册标志
    004AE24D  mov     esp, ebp
    004AE24F  pop     ebp
    004AE250  retn


    {----------------------算法CALL2:call    004A0028---------------------}

    004A0028  push    ebp
    004A0029  mov     ebp, esp
    004A002B  add     esp, -18
    004A002E  push    ebx
    004A002F  xor     ebx, ebx
    004A0031  mov     dword ptr [ebp-18], ebx
    004A0034  mov     dword ptr [ebp-C], ecx
    004A0037  mov     byte ptr [ebp-5], dl
    004A003A  mov     dword ptr [ebp-4], eax
    004A003D  mov     eax, dword ptr [ebp-4]
    004A0040  call    00404CC0
    004A0045  xor     eax, eax
    004A0047  push    ebp
    004A0048  push    004A0112
    004A004D  push    dword ptr fs:[eax]
    004A0050  mov     dword ptr fs:[eax], esp
    004A0053  mov     eax, dword ptr [ebp-C]
    004A0056  call    00404810
    004A005B  xor     eax, eax
    004A005D  mov     al, byte ptr [ebp-5]             ;  前面邮箱的累加结果
    004A0060  xor     eax, 12BFD54                     ;  异或 0x12BFD54
    004A0065  mov     edx, dword ptr [4B60F4]          ;  指向一个全局变量
    004A006B  mov     dword ptr [edx], eax             ;  给变量赋初始值
    004A006D  xor     eax, eax
    004A006F  mov     dword ptr [ebp-10], eax
    004A0072  /mov     eax, dword ptr [ebp-4]          ;  指向密码表
    004A0075  |call    00404AD0
    004A007A  |call    004030E8                        ;  ★重要CALL-->获取一个数[与上面的全局变量值有关,进去看]
    004A007F  |inc     eax
    004A0080  |mov     edx, dword ptr [ebp-4]          ;  指向密码表
    004A0083  |mov     al, byte ptr [edx+eax-1]        ;  根据eax的结果从密码表中查表获取字符传送到al
    004A0087  |mov     byte ptr [ebp-11], al
    004A008A  |cmp     byte ptr [ebp-11], 2D           ;  -
    004A008E  |je      short 004A0072
    004A0090  |cmp     byte ptr [ebp-11], 30           ;  0
    004A0094  |je      short 004A0072
    004A0096  |cmp     byte ptr [ebp-11], 4F           ;  O
    004A009A  |je      short 004A0072
    004A009C  |cmp     byte ptr [ebp-11], 20           ;  空格
    004A00A0  |je      short 004A0072
    004A00A2  |cmp     byte ptr [ebp-11], 2E           ;  .
    004A00A6  |je      short 004A0072                  ;  对获取的字符进行过滤~~如果为上面五种字符则跳过,重新选取,直到符合条件为止
    004A00A8  |lea     eax, dword ptr [ebp-18]
    004A00AB  |mov     dl, byte ptr [ebp-11]           ;  下面是保存符合条件的字符
    004A00AE  |call    004049F8
    004A00B3  |mov     edx, dword ptr [ebp-18]
    004A00B6  |mov     eax, dword ptr [ebp-C]
    004A00B9  |call    00404AD8
    004A00BE  |mov     eax, dword ptr [ebp-C]
    004A00C1  |mov     eax, dword ptr [ebp-C]
    004A00C4  |mov     eax, dword ptr [eax]            ;  符合条件的字符的个数~~
    004A00C6  |call    00404AD0
    004A00CB  |cmp     eax, 13                         ;  符合条件的字符串一共是0x13位~
    004A00CE  \jnz     short 004A0072
    004A00D0  mov     eax, dword ptr [ebp-C]
    004A00D3  call    00404D28
    004A00D8  mov     byte ptr [eax+4], 2D             ;  KEY[4]替换成-
    004A00DC  mov     eax, dword ptr [ebp-C]
    004A00DF  call    00404D28
    004A00E4  mov     byte ptr [eax+9], 2D             ;  KEY[9]替换成 -
    004A00E8  mov     eax, dword ptr [ebp-C]
    004A00EB  call    00404D28
    004A00F0  mov     byte ptr [eax+E], 2D             ;  KEY[E]替换成 -
    004A00F4  xor     eax, eax                         ;  上面替换之后的就是注册码了~
    004A00F6  pop     edx
    004A00F7  pop     ecx
    004A00F8  pop     ecx
    004A00F9  mov     dword ptr fs:[eax], edx
    004A00FC  push    004A0119
    004A0101  lea     eax, dword ptr [ebp-18]
    004A0104  call    00404810
    004A0109  lea     eax, dword ptr [ebp-4]
    004A010C  call    00404810
    004A0111  retn
    004A0112  jmp     00404190
    004A0117  jmp     short 004A0101
    004A0119  pop     ebx
    004A011A  mov     esp, ebp
    004A011C  pop     ebp
    004A011D  retn


    {----------------------重要CALLcall    004030E8---------------------}
    004030E8  push    ebx
    004030E9  xor     ebx, ebx
    004030EB  imul    edx, dword ptr [ebx+4B4008], 808>;  和全局变量的值相乘后 保存到edx
    004030F5  inc     edx                              ;  edx+1
    004030F6  mov     dword ptr [ebx+4B4008], edx      ;  继续保存回去
    004030FC  mul     edx                              ;  edx * eax,结果放在edx中
    004030FE  mov     eax, edx                         ;  保存最终结果,也就是要输出的
    00403100  pop     ebx
    00403101  retn

    【算法总结】
    1.按字节方式累加邮箱ASCII
    2.累加结果 XOR 12BFD54h
    3.将XOR的结果作为下一步第一轮的初始值
    4.对3步的结果进行查表处理
    5.将指定位置的字符串替换成分隔符'-'(注意:不是插入)
    6.最终注册码形式:1111-2222-3333-4444
    注册信息保存在:[HKEY_LOCAL_MACHINE\SOFTWARE\wuzhihui\ChangeFn]

    【算法函数】
    .data
    szConstTable        db        '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ',0

    .code
    ;=================================================
    ;注册算法:
    ;1.按字节方式累加邮箱ASCII
    ;2.累加结果 XOR 12BFD54h
    ;3.将XOR的结果作为下一步第一轮的初始值
    ;4.对3步的结果进行查表处理
    ;5.将指定位置的字符串替换成分隔符'-'(注意:不是插入)
    ;6.最终注册码形式:1111-2222-3333-4444
    ;注册信息保存在:[HKEY_LOCAL_MACHINE\SOFTWARE\wuzhihui\ChangeFn]
    ;=================================================
    KeyGen    proc    uses ecx edx lpEmail:DWORD
        LOCAL    @szKey[256]:BYTE
        LOCAL    @bEmaiByte:BYTE
        LOCAL    @dwTemp:DWORD
       
        invoke    RtlZeroMemory,addr @szKey,sizeof @szKey   
       
        xor        ecx,ecx
        xor        edx,edx
        xor        esi,esi
       
        ;=============================
        ;对Email进行计算
        invoke    lstrlen,lpEmail    ;获取Email长度
        mov        edx,eax            ;保存长度
        mov        cl, 1
        mov        esi,lpEmail
       
        @@:
          xor    eax, eax
          mov    al, cl
          mov    al, byte ptr [esi+eax-1]
          add    @bEmaiByte, al
          inc    cl
          dec    edx
          jnz    @B
        ;=============================

        ;=============================
        ;主要获取可视字符过程、查表
        mov        al,@bEmaiByte
        xor        eax,12BFD54h
        mov        @dwTemp, eax
        xor        esi,esi
        @@:
            invoke    lstrlen,addr szConstTable        
            xor        ebx, ebx
            imul    edx, dword ptr [@dwTemp], 8088405h
            inc        edx
            mov        dword ptr [@dwTemp], edx
            mul        edx
            mov        eax,edx
            inc        eax
            mov        al,byte ptr [szConstTable+eax-1]
            cmp        al, 2Dh
            je        @B
            cmp        al, 30h
            je        @B
            cmp        al, 4Fh
            je        @B
            cmp        al, 20h
            je        @B
            cmp        al, 2Eh
            je        @B
            mov        byte ptr[@szKey+esi],al
            inc        esi
            invoke    lstrlen,addr @szKey
            cmp        eax, 13h
            jnz    @B
          ;=============================

        ;插入分隔符
        mov        byte ptr [@szKey+4h],2Dh
        mov        byte ptr [@szKey+9h],2Dh
        mov        byte ptr [@szKey+0Eh],2Dh

        ;输出最终注册码
        lea        eax,@szKey

        ret

    KeyGen endp


    【版权声明】 本文纯属技术交流, 原创于PYG官方论坛, 转载请注明作者并保持文章的完整, 谢谢!
    1.gif

    KeyGen.rar

    2.28 KB, 下载次数: 11, 下载积分: 飘云币 -2 枚

    评分

    参与人数 1威望 +40 飘云币 +40 收起 理由
    月之精灵 + 40 + 40 您的贴子很精彩,希望能再次分享!

    查看全部评分

    PYG19周年生日快乐!

    该用户从未签到

    发表于 2010-5-7 18:54:09 | 显示全部楼层
    还是习惯VC的传参 Del还是有点怪怪的 ~
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2015-8-3 23:07
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    发表于 2010-5-7 19:25:18 | 显示全部楼层
    Nisy跑到我前面去了哈/:018
    PYG19周年生日快乐!
  • TA的每日心情
    慵懒
    2015-10-9 11:25
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2010-5-7 19:32:45 | 显示全部楼层
    学习了飘老大的破文,谢谢
    PYG19周年生日快乐!
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

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