飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 4596|回复: 6

[原创] ****管理系统单机版的注册算法分析

[复制链接]
  • TA的每日心情
    开心
    2015-8-23 23:49
  • 签到天数: 27 天

    [LV.4]偶尔看看III

    发表于 2011-2-24 20:20:13 | 显示全部楼层 |阅读模式
    本帖最后由 GGLHY 于 2011-2-24 20:28 编辑

            ****管理系统单机版的注册算法分析

                      在医院陪护期间练手而已!如有错误,还望不吝赐教!谢谢!!!

    闲话少叙,直接来到:
    005A991F    E8 D051FCFF     call    0056EAF4                   ; 算法CALL
    005A9924    84C0            test    al, al                     ; 标志位比较
    005A9926    74 27           je      short 005A994F             ; 关键跳,跳则注册失败

    005A9928    6A 40           push    40                         ; 注意这里的 40 !
    005A992A    B9 90995A00     mov     ecx, 005A9990              ; ASCII "系统提示"
      (省略部分代码)
    005A9943    C780 4C020000 0>mov     dword ptr [eax+24C], 1
    005A994D    EB 18           jmp     short 005A9967
    005A994F    6A 10           push    10                         ; 杯具了
    005A9951    B9 90995A00     mov     ecx, 005A9990              ; ASCII "系统提示"
      (省略部分代码)
    005A9962    E8 9D89EEFF     call    00492304


    好,咱们进去看看:
    005A991F    E8 D051FCFF     call    0056EAF4                   ; 算法CALL
        0056EAF4    55              push    ebp
        (省略部分代码)
        0056EB11    E8 4EF7FFFF     call    0056E264
        0056EB16    8B4D EC         mov     ecx, [ebp-14]          ; 机器码到ECX
        0056EB19    8D45 F4         lea     eax, [ebp-C]
        0056EB1C    BA 4CEC5600     mov     edx, 0056EC4C          ; ASCII "H0"
        0056EB21    E8 1260E9FF     call    00404B38
       (省略部分代码)
        0056EB5F    33C9            xor     ecx, ecx
        0056EB61    BA 58EC5600     mov     edx, 0056EC58          ; ASCII "Software\wgzm\ckmxczdj"
        0056EB66    8B45 F8         mov     eax, [ebp-8]
        0056EB69    E8 367BEDFF     call    004466A4
        0056EB6E    84C0            test    al, al
        0056EB70    74 5A           je      short 0056EBCC
        0056EB72    8D4D E8         lea     ecx, [ebp-18]
        0056EB75    BA 78EC5600     mov     edx, 0056EC78          ; ASCII "rc"
        0056EB7A    8B45 F8         mov     eax, [ebp-8]
        0056EB7D    E8 1A7EEDFF     call    0044699C
        0056EB82    8B55 E8         mov     edx, [ebp-18]          ; 假码
        0056EB85    B8 CC5E5F00     mov     eax, 005F5ECC
        0056EB8A    E8 F15CE9FF     call    00404880
        0056EB8F    8B55 F0         mov     edx, [ebp-10]
        0056EB92    8B45 F8         mov     eax, [ebp-8]
        0056EB95    E8 967CEDFF     call    00446830
        0056EB9A    BA 84EC5600     mov     edx, 0056EC84          ; ASCII "sysj"
        0056EB9F    8B45 F0         mov     eax, [ebp-10]
        0056EBA2    8B08            mov     ecx, [eax]
        0056EBA4    FF51 54         call    [ecx+54]
        0056EBA7    40              inc     eax
        0056EBA8    75 0E           jnz     short 0056EBB8
        0056EBAA    E8 05D0E9FF     call    0040BBB4
        0056EBAF    DD1D 8C605F00   fstp    qword ptr [5F608C]
        0056EBB5    9B              wait
        0056EBB6    EB 14           jmp     short 0056EBCC
        0056EBB8    BA 84EC5600     mov     edx, 0056EC84          ; ASCII "sysj"
        0056EBBD    8B45 F8         mov     eax, [ebp-8]
        0056EBC0    E8 AB7EEDFF     call    00446A70
        0056EBC5    DD1D 8C605F00   fstp    qword ptr [5F608C]
        0056EBCB    9B              wait
        0056EBCC    8D4D E4         lea     ecx, [ebp-1C]
        0056EBCF    66:BA 3200      mov     dx, 32                 ; dx=32
        0056EBD3    8B45 F4         mov     eax, [ebp-C]           ;  "H0Y31QH89E"
        0056EBD6    E8 39FCFFFF     call    0056E814               ; 算法核心,F7

                0056E814    55              push    ebp
                0056E815    8BEC            mov     ebp, esp
                0056E817    51              push    ecx
                0056E818    B9 04000000     mov     ecx, 4
                0056E81D    6A 00           push    0
                0056E81F    6A 00           push    0
                0056E821    49              dec     ecx
                0056E822  ^ 75 F9           jnz     short 0056E81D
                0056E824    51              push    ecx
                0056E825    874D FC         xchg    [ebp-4], ecx
                0056E828    53              push    ebx
                0056E829    56              push    esi
                0056E82A    57              push    edi
                0056E82B    8BF9            mov     edi, ecx
                0056E82D    66:8955 FA      mov     [ebp-6], dx            ;DX=32
                0056E831    8945 FC         mov     [ebp-4], eax           ; "H0Y31QH89E",变形的机器码
                0056E834    33C0            xor     eax, eax
                0056E836    55              push    ebp
                0056E837    68 D8EA5600     push    0056EAD8
                0056E83C    64:FF30         push    dword ptr fs:[eax]
                0056E83F    64:8920         mov     fs:[eax], esp
                0056E842    66:8B75 FA      mov     si, [ebp-6]            ;32到SI
                0056E846    8B45 FC         mov     eax, [ebp-4]
                0056E849    E8 9E62E9FF     call    00404AEC
                0056E84E    8BD0            mov     edx, eax               ; H0连接机器码后的长度
                0056E850    8D45 F4         lea     eax, [ebp-C]
                0056E853    E8 2066E9FF     call    00404E78
                0056E858    8B45 FC         mov     eax, [ebp-4]           ; "H0Y31QH89E",变形的机器码
                0056E85B    E8 8C62E9FF     call    00404AEC
                0056E860    84C0            test    al, al
                0056E862    76 67           jbe     short 0056E8CB
                0056E864    8845 E3         mov     [ebp-1D], al           ;"H0Y31QH89E"的长度
                0056E867    B3 01           mov     bl, 1                  ; bl=1
                0056E869    33C0            xor     eax, eax
                0056E86B    8AC3            mov     al, bl
                0056E86D    8B55 FC         mov     edx, [ebp-4]           ; "H0Y31QH89E"
                0056E870    0FB64402 FF     movzx   eax, byte ptr [edx+eax>; 依次取H0Y31QH89E每一位
                0056E875    0FB7D6          movzx   edx, si                ;32
                0056E878    03D2            add     edx, edx               ;相加(32+32)
                0056E87A    03C2            add     eax, edx               ;和 + 当前所取的变形机器码的ASC
                0056E87C    B9 5B000000     mov     ecx, 5B
                0056E881    33D2            xor     edx, edx
                0056E883    F7F1            div     ecx                    ; /5B
                0056E885    8BF2            mov     esi, edx               ; 余数
                0056E887    EB 10           jmp     short 0056E899
                0056E889    66:83FE 30      cmp     si, 30                 ; 余数与30比较
                0056E88D    73 06           jnb     short 0056E895         ; 不小于则跳
                0056E88F    66:83C6 12      add     si, 12                 ; +12再与30比较
                0056E893    EB 04           jmp     short 0056E899
                0056E895    66:83C6 07      add     si, 7                  ; +7
                0056E899    66:83FE 30      cmp     si, 30                 ; 余数与30比较
                0056E89D  ^ 72 EA           jb      short 0056E889         ; 小则跳
                0056E89F    66:83FE 39      cmp     si, 39                 ; 余数与39比较
                0056E8A3    76 06           jbe     short 0056E8AB         ; 不大于则跳
                0056E8A5    66:83FE 41      cmp     si, 41                 ; 余数与41比较
                0056E8A9  ^ 72 DE           jb      short 0056E889         ; 小则跳
                0056E8AB    8D45 F4         lea     eax, [ebp-C]
                0056E8AE    E8 9164E9FF     call    00404D44
                0056E8B3    33D2            xor     edx, edx
                0056E8B5    8AD3            mov     dl, bl
                0056E8B7    8BCE            mov     ecx, esi               ; 余数
                0056E8B9    884C10 FF       mov     [eax+edx-1], cl        ; 该余数作为ASC及对应的字符
                0056E8BD    66:83C6 32      add     si, 32                 ; +32
                0056E8C1    66:83C6 32      add     si, 32                 ; +32。(SI再进行下一轮循环)
                0056E8C5    43              inc     ebx                    ; bl+1
                0056E8C6    FE4D E3         dec     byte ptr [ebp-1D]      ; (H0连接机器码后的长度)计数器-1
                0056E8C9  ^ 75 9E           jnz     short 0056E869
                0056E8CB    8D45 F0         lea     eax, [ebp-10]          ; 循环结束得到字符串S1,本例为“QGC9ZCCE19”
                0056E8CE    8B55 F4         mov     edx, [ebp-C]
                0056E8D1    E8 EE5FE9FF     call    004048C4
                0056E8D6    8D45 F4         lea     eax, [ebp-C]
                0056E8D9    E8 4E5FE9FF     call    0040482C
                0056E8DE    8B45 F0         mov     eax, [ebp-10]          ; S1
                0056E8E1    E8 0662E9FF     call    00404AEC
                0056E8E6    8BD0            mov     edx, eax               ; S1的长度
                0056E8E8    8D45 F4         lea     eax, [ebp-C]
                0056E8EB    E8 8865E9FF     call    00404E78               ;
                0056E8F0    66:8B75 FA      mov     si, [ebp-6]            ;[ebp-6]=32
                0056E8F4    8B45 F0         mov     eax, [ebp-10]
                0056E8F7    E8 F061E9FF     call    00404AEC               ;S1的长度为0吗?
                0056E8FC    84C0            test    al, al
                0056E8FE    76 67           jbe     short 0056E967         ;这里跳,就会略过下面对S1循环运算的过程了
                0056E900    8845 E3         mov     [ebp-1D], al           ;S1的长度
                0056E903    B3 01           mov     bl, 1
                0056E905    33C0            xor     eax, eax               ; 重复上面的循环,不过变成S1而非机器码了
                0056E907    8AC3            mov     al, bl                 ;参见上面的循环
                0056E909    8B55 F0         mov     edx, [ebp-10]
                0056E90C    0FB64402 FF     movzx   eax, byteptr[edx+eax-1]
                0056E911    0FB7D6          movzx   edx, si
                0056E914    03D2            add     edx, edx
                0056E916    03C2            add     eax, edx
                0056E918    B9 5B000000     mov     ecx, 5B
                0056E91D    33D2            xor     edx, edx
                0056E91F    F7F1            div     ecx
                0056E921    8BF2            mov     esi, edx
                0056E923    EB 10           jmp     short 0056E935
                0056E925    66:83FE 30      cmp     si, 30
                0056E929    73 06           jnb     short 0056E931
                0056E92B    66:83C6 12      add     si, 12
                0056E92F    EB 04           jmp     short 0056E935
                0056E931    66:83C6 07      add     si, 7
                0056E935    66:83FE 30      cmp     si, 30
                0056E939  ^ 72 EA           jb      short 0056E925
                0056E93B    66:83FE 39      cmp     si, 39
                0056E93F    76 06           jbe     short 0056E947
                0056E941    66:83FE 41      cmp     si, 41
                0056E945  ^ 72 DE           jb      short 0056E925
                0056E947    8D45 F4         lea     eax, [ebp-C]
                0056E94A    E8 F563E9FF     call    00404D44
                0056E94F    33D2            xor     edx, edx
                0056E951    8AD3            mov     dl, bl
                0056E953    8BCE            mov     ecx, esi
                0056E955    884C10 FF       mov     [eax+edx-1], cl
                0056E959    66:83C6 32      add     si, 32
                0056E95D    66:83C6 32      add     si, 32
                0056E961    43              inc     ebx
                0056E962    FE4D E3         dec     byte ptr [ebp-1D]
                0056E965  ^ 75 9E           jnz     short 0056E905         ;同样的循环
                0056E967    8BC7            mov     eax, edi               ; 得到字符串S2,本例为"ZWMA83B7VA"
                0056E969    8B4D F0         mov     ecx, [ebp-10]          ; S1
                0056E96C    8B55 F4         mov     edx, [ebp-C]           ; S2
                0056E96F    E8 C461E9FF     call    00404B38
                0056E974    8D45 EC         lea     eax, [ebp-14]
                0056E977    E8 B05EE9FF     call    0040482C
                0056E97C    8D45 E8         lea     eax, [ebp-18]
                0056E97F    E8 A85EE9FF     call    0040482C
                0056E984    8D45 E4         lea     eax, [ebp-1C]
                0056E987    E8 A05EE9FF     call    0040482C
                0056E98C    8B07            mov     eax, [edi]             ; S2连接S1,得到字符串S3:"ZWMA83B7VAQGC9ZCCE19"
                0056E98E    E8 5961E9FF     call    00404AEC
                0056E993    83F8 0E         cmp     eax, 0E                ; S3的长度与0E比较
                0056E996    7E 45           jle     short 0056E9DD         ; 不大于则跳
                0056E998    8D45 EC         lea     eax, [ebp-14]
                0056E99B    50              push    eax
                0056E99C    8B07            mov     eax, [edi]             ; 字符串S3:
                0056E99E    B9 06000000     mov     ecx, 6                 ; 这里是参数表示取6位
                0056E9A3    BA 01000000     mov     edx, 1                 ; 这里参数表示从第1位取
                0056E9A8    E8 9F63E9FF     call    00404D4C               ; 按照参数取!可以进去看见取得的结果Key1
                0056E9AD    8D45 E8         lea     eax, [ebp-18]
                0056E9B0    50              push    eax
                0056E9B1    8B07            mov     eax, [edi]             ; 字符串S3:
                0056E9B3    B9 05000000     mov     ecx, 5                 ; 这里是参数表示取5位
                0056E9B8    BA 07000000     mov     edx, 7                 ; 这里参数表示从第7位取
                0056E9BD    E8 8A63E9FF     call    00404D4C               ; 同样的CALL,得到Key2
                0056E9C2    8D45 E4         lea     eax, [ebp-1C]
                0056E9C5    50              push    eax
                0056E9C6    8B07            mov     eax, [edi]             ; 字符串S3:
                0056E9C8    E8 1F61E9FF     call    00404AEC
                0056E9CD    8BC8            mov     ecx, eax               ; S3的长度
                0056E9CF    8B07            mov     eax, [edi]             ; 字符串S3:
                0056E9D1    BA 0C000000     mov     edx, 0C                ; 注意这里的参数0C,从第12位起
                0056E9D6    E8 7163E9FF     call    00404D4C               ; 同样的CALL,得到Key3
                0056E9DB   /EB 7F           jmp     short 0056EA5C
                0056E9DD   |8B07            mov     eax, [edi]
                0056E9DF   |E8 0861E9FF     call    00404AEC
                0056E9E4   |83F8 08         cmp     eax, 8                 ; S3的长度与8比较
                0056E9E7   |7D 30           jge     short 0056EA19         ; 不小于则跳
                0056E9E9   |8D45 EC         lea     eax, [ebp-14]
                0056E9EC   |50              push    eax
                0056E9ED   |8B07            mov     eax, [edi]             ; S3
                0056E9EF   |B9 04000000     mov     ecx, 4                 ; 取4位
                0056E9F4   |BA 01000000     mov     edx, 1                 ; 从第一位起
                0056E9F9   |E8 4E63E9FF     call    00404D4C
                0056E9FE   |8D45 E8         lea     eax, [ebp-18]
                0056EA01   |50              push    eax
                0056EA02   |8B07            mov     eax, [edi]             ; S3
                0056EA04   |E8 E360E9FF     call    00404AEC
                0056EA09   |8BC8            mov     ecx, eax
                0056EA0B   |8B07            mov     eax, [edi]
                0056EA0D   |BA 05000000     mov     edx, 5
                0056EA12   |E8 3563E9FF     call    00404D4C
                0056EA17   |EB 43           jmp     short 0056EA5C
                0056EA19   |8D45 EC         lea     eax, [ebp-14]
                0056EA1C   |50              push    eax
                0056EA1D   |8B07            mov     eax, [edi]             ; S3
                0056EA1F   |B9 05000000     mov     ecx, 5                 ; 取5位
                0056EA24   |BA 01000000     mov     edx, 1                 ; 从第1位起
                0056EA29   |E8 1E63E9FF     call    00404D4C
                0056EA2E   |8D45 E8         lea     eax, [ebp-18]
                0056EA31   |50              push    eax
                0056EA32   |8B07            mov     eax, [edi]
                0056EA34   |B9 04000000     mov     ecx, 4                 ; 取4位
                0056EA39   |BA 06000000     mov     edx, 6                 ; 从第6位起
                0056EA3E   |E8 0963E9FF     call    00404D4C
                0056EA43   |8D45 E4         lea     eax, [ebp-1C]
                0056EA46   |50              push    eax
                0056EA47   |8B07            mov     eax, [edi]
                0056EA49   |E8 9E60E9FF     call    00404AEC
                0056EA4E   |8BC8            mov     ecx, eax
                0056EA50   |8B07            mov     eax, [edi]
                0056EA52   |BA 0A000000     mov     edx, 0A                ;从第10位开始
                0056EA57   |E8 F062E9FF     call    00404D4C
                0056EA5C    837D E4 00      cmp     dword ptr [ebp-1C], 0  ; Key3为空吗?
                0056EA60    74 2C           je      short 0056EA8E         ; 为空则跳!
                0056EA62    FF75 EC         push    dword ptr [ebp-14]     ; Key1
                0056EA65    68 F0EA5600     push    0056EAF0
                0056EA6A    FF75 E8         push    dword ptr [ebp-18]     ; Key2
                0056EA6D    68 F0EA5600     push    0056EAF0
                0056EA72    FF75 E4         push    dword ptr [ebp-1C]     ; Key3
                0056EA75    8D45 DC         lea     eax, [ebp-24]
                0056EA78    BA 05000000     mov     edx, 5                 ; 哈哈,这个参数是干什么用的呢?
                0056EA7D    E8 2A61E9FF     call    00404BAC
                0056EA82    8B45 DC         mov     eax, [ebp-24]          ; 真码
                0056EA85    8BD7            mov     edx, edi               ; S3
                0056EA87    E8 58A8E9FF     call    004092E4
                0056EA8C    EB 22           jmp     short 0056EAB0
                0056EA8E    FF75 EC         push    dword ptr [ebp-14]
                0056EA91    68 F0EA5600     push    0056EAF0
                0056EA96    FF75 E8         push    dword ptr [ebp-18]
                0056EA99    8D45 D8         lea     eax, [ebp-28]
                0056EA9C    BA 03000000     mov     edx, 3
                0056EAA1    E8 0661E9FF     call    00404BAC
                0056EAA6    8B45 D8         mov     eax, [ebp-28]
                0056EAA9    8BD7            mov     edx, edi
                0056EAAB    E8 34A8E9FF     call    004092E4
                0056EAB0    33C0            xor     eax, eax
                0056EAB2    5A              pop     edx
                0056EAB3    59              pop     ecx
                0056EAB4    59              pop     ecx
                0056EAB5    64:8910         mov     fs:[eax], edx
                0056EAB8    68 DFEA5600     push    0056EADF
                0056EABD    8D45 D8         lea     eax, [ebp-28]
                0056EAC0    BA 02000000     mov     edx, 2
                0056EAC5    E8 865DE9FF     call    00404850
                0056EACA    8D45 E4         lea     eax, [ebp-1C]          ; Key3
                0056EACD    BA 05000000     mov     edx, 5
                0056EAD2    E8 795DE9FF     call    00404850
                0056EAD7    C3              retn
        0056EBDB    8B55 E4         mov     edx, [ebp-1C]          ; 真码
        0056EBDE    A1 CC5E5F00     mov     eax, [5F5ECC]          ; 假码
        0056EBE3    E8 5060E9FF     call    00404C38               ; 关键比较
        0056EBE8    0F9445 FF       sete    [ebp-1]                ; 也可以在这里爆破
        0056EBEC    33C0            xor     eax, eax
        0056EBEE    5A              pop     edx
        0056EBEF    59              pop     ecx
        0056EBF0    59              pop     ecx
        0056EBF1    64:8910         mov     fs:[eax], edx
        0056EBF4    68 11EC5600     push    0056EC11
        0056EBF9    8B45 F8         mov     eax, [ebp-8]
        0056EBFC    E8 BB4DE9FF     call    004039BC
        0056EC01    8B45 F0         mov     eax, [ebp-10]
        0056EC04    E8 B34DE9FF     call    004039BC
        0056EC09    C3              retn

    005A9924    84C0            test    al, al                     ; 标志位比较
    005A9926    74 27           je      short 005A994F             ; 关键跳,跳则注册失败



    另:
    00404B07    89D6            mov     esi, edx
    00404B09    8B79 FC         mov     edi, [ecx-4]            ; 机器码长度
    00404B0C    8B56 FC         mov     edx, [esi-4]            ; ASCII "H0"的长度=2
    00404B0F    01FA            add     edx, edi                ; 相加
    00404B11    39CE            cmp     esi, ecx
    00404B13    74 17           je      short 00404B2C
    00404B15    E8 5E030000     call    00404E78
    00404B1A    89F0            mov     eax, esi                ; 机器码
    00404B1C    8B4E FC         mov     ecx, [esi-4]            ; 机器码长度
    00404B1F    8B13            mov     edx, [ebx]              ; ASCII "H0"
    00404B21    01FA            add     edx, edi
    00404B23    E8 F4DEFFFF     call    00402A1C
    可以看出,上面的内容其实就是字符串“H0”连接机器码

    还有:
    004092E4  /$  53            PUSH EBX
    004092E5  |.  56            PUSH ESI
    004092E6  |.  57            PUSH EDI
    004092E7  |.  8BFA          MOV EDI,EDX
    004092E9  |.  8BF0          MOV ESI,EAX
    004092EB  |.  8BC6          MOV EAX,ESI
    004092ED  |.  E8 FAB7FFFF   CALL vip.00404AEC
    004092F2  |.  8BD8          MOV EBX,EAX
    004092F4  |.  8BC7          MOV EAX,EDI
    004092F6  |.  8BD3          MOV EDX,EBX
    004092F8  |.  E8 7BBBFFFF   CALL vip.00404E78
    004092FD  |.  8BD6          MOV EDX,ESI
    004092FF  |.  8B37          MOV ESI,DWORD PTR DS:[EDI]
    00409301  |.  85DB          TEST EBX,EBX
    00409303  |.  74 15         JE SHORT vip.0040931A
    00409305  |>  8A02          /MOV AL,BYTE PTR DS:[EDX]
    00409307  |.  3C 61         |CMP AL,61
    00409309  |.  72 06         |JB SHORT vip.00409311
    0040930B  |.  3C 7A         |CMP AL,7A
    0040930D  |.  77 02         |JA SHORT vip.00409311
    0040930F  |.  2C 20         |SUB AL,20
    00409311  |>  8806          |MOV BYTE PTR DS:[ESI],AL
    00409313  |.  42            |INC EDX
    00409314  |.  46            |INC ESI
    00409315  |.  4B            |DEC EBX
    00409316  |.  85DB          |TEST EBX,EBX
    00409318  |.^ 75 EB         \JNZ SHORT vip.00409305
    0040931A  |>  5F            POP EDI                     //对注册码检测就是有小写字母转大写
    0040931B  |.  5E            POP ESI
    0040931C  |.  5B            POP EBX
    0040931D  \.  C3            RETN
    即小写字母转大写



    /////////////////////////////////////////////////////////////////////////////////////////////////////////
    ok,现在这软件的注册算法基本清楚了!
    0.字符串“HO”连接机器码,得到变形的机器码。本例为H0Y31QH89E;
    1.依次取变形的机器码(本例为H0Y31QH89E)每一位ASC,按照下述方式运算:
      第一位ASC + 64 的和 除以 常数5B,其余数作为ASC,得到对应的字符,(对余数的检测及变化见0056E889 - 0056E8A9区间,有可能会影响到下一位的运算结果。此略)
      第二位ASC + [(第一位运算的余数 + 64) * 2]  除以 常数5B ,其余数作为ASC,得到对应的字符,
      第三位ASC + [ (第二位运算的余数 + 64)  * 2]  除以 常数5B ,其余数作为ASC,得到对应的字符,
         ...
      以此类推,直到变形机器码取完为止,得到字符串(本例为“QGC9ZCCE19”),设为S1;
      如果S1的长度为0,则略过下面的2这一步。而S3就等价于S1了!
    2.与得到S1的方法一样,同样对S1进行取余的运算。(在此略过)得到字符串S2(本例为"ZWMA83B7VA");
    3.S2连接S1,得到S3(本例为“ZWMA83B7VAQGC9ZCCE19”);
    4.根据S3的长度,分别对应如下的注册码形式
      a.S3长度<8,则注册码形式为:****-***;               (第二段为S3的第5位开始剩下的部分)
      b.7< S3长度<15,则注册码形式为:*****-****-*****;   (第三段为S3的第9位开始剩下的部分)
      c.14<S3长度,则注册码形式为:******-*****-****...     (第三段为S3的第12位开始剩下的部分)
    本例S3为20位,则注册码为:ZWMA83-B7VAQ-GC9ZCCE19
      有小写字母则转为大写!
    //////////////////////////////////////////////////////////////////////////////////////////////////


    关于算法总结中得到S1的过程举例如下:
                                         本机变形的机器码(本例为H0Y31QH89E)
    第一位为H,ASC为48(16进制,下同)。
        (48 + 64) /  5B ,
        得到的余数为51H,(经过余数检测运算仍然不变)将其看做ASC码,则其对应的字符为“Q”,得到S1的第1位;
    第二位为0,ASC为30(16进制),则:
        [30 + (51H + 64)* 2 ] / 5B ,
        得到的余数为2E,(注意:经过余数检测运算,2E变为47了,具体参见0056E889 - 0056E8A9区间),将其看作ASC码,则其对应的字符为“G”,得到S1的第2位;
      ...
    最终得到S1为“QGC9ZCCE19”


    好,咱输入注册码:ZWMA83-B7VAQ-GC9ZCCE19,注册成功!且注册按钮已变灰!

    注册信息保存在:
    [HKEY_LOCAL_MACHINE\SOFTWARE\wgzm\ckmxczdj]
    "rc"="ZWMA83-B7VAQ-GC9ZCCE19"
    "sysj"=hex:00,00,00,00,c0,d2,e3,40

    删除变回未注册版!
    ok-.GIF
    cg.GIF
    灰.GIF

    评分

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

    查看全部评分

    PYG19周年生日快乐!

    该用户从未签到

    发表于 2011-2-25 20:27:32 | 显示全部楼层
    不是很懂  呵呵
    PYG19周年生日快乐!
  • TA的每日心情
    慵懒
    2015-10-9 11:25
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2011-2-28 07:41:21 | 显示全部楼层
    学习了,写的很详细
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2023-3-14 15:11
  • 签到天数: 465 天

    [LV.9]以坛为家II

    发表于 2011-3-1 10:48:42 | 显示全部楼层
    看到眼都花了了
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2011-3-2 16:53:28 | 显示全部楼层
    牛B! 佩服!
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2022-8-10 19:15
  • 签到天数: 33 天

    [LV.5]常住居民I

    发表于 2011-3-3 19:12:49 | 显示全部楼层
    支持楼主,特别是算法这段写的非常清晰。谢谢!
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2011-3-6 10:39:04 | 显示全部楼层
    哇神圣的一刻就来了
    PYG19周年生日快乐!
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

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