飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 5964|回复: 8

[原创] CompareDWG for AutoCAD 2006-2011算法分析及算法注册机

[复制链接]
  • TA的每日心情
    无聊
    2024-1-15 22:57
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    发表于 2010-9-6 21:45:02 | 显示全部楼层 |阅读模式
    【破文标题】CompareDWG for AutoCAD 2006-2011算法分析及算法注册机
    【破文作者】zaas[PYG]
    破解工具】OllyICE,PEiD v0.94
    【破解平台】WinXP
    【软件类别】:汉化补丁/CAD 图形
    【软件授权】:共享版
    【软件介绍】:CompareDWG 是用来比较两个DWG图形之间差异的工具,用它可以非常快速的找出两个图形文件的不同之处,并用不同的颜色标注出来,还可以生成详细的报表,让你对图形的变动一目了然。此软件对于图纸被他人修改过后却苦于无法找出被修改的地方非常有用。
    【破解声明】我是一只小菜鸟,偶得一点心得,愿与大家分享
    --------------------------------------------------------------
    【破解内容】
    --------------------------------------------------------------
    这个是autocad下的二次开发软件。打开Autocad,OD附加。发现如果输入的注册码不对的话,软件的保存注册码按钮是灰色的。
    Snap1.gif
    因此下enablewindow断点。断下,返回在

    1. 0D094740  /$  55            push    ebp
    2. 0D094741  |.  8BEC          mov     ebp, esp
    3. 0D094743  |.  6A FF         push    -1
    4. 0D094745  |.  68 04770A0D   push    0D0A7704
    5. 0D09474A  |.  64:A1 0000000>mov     eax, dword ptr fs:[0]
    6. 0D094750  |.  50            push    eax
    7. 0D094751  |.  83EC 48       sub     esp, 48
    8. 0D094754  |.  A1 603B0B0D   mov     eax, dword ptr [D0B3B60]
    9. 0D094759  |.  33C5          xor     eax, ebp
    10. 0D09475B  |.  50            push    eax
    11. 0D09475C  |.  8D45 F4       lea     eax, dword ptr [ebp-C]
    12. 0D09475F  |.  64:A3 0000000>mov     dword ptr fs:[0], eax
    13. 0D094765  |.  894D D4       mov     dword ptr [ebp-2C], ecx
    14. 0D094768  |.  6A 01         push    1
    15. 0D09476A  |.  8B4D D4       mov     ecx, dword ptr [ebp-2C]
    16. 0D09476D  |.  E8 DC1A0100   call    <jmp.&mfc90u.#6760>
    17. 0D094772  |.  51            push    ecx
    18. 0D094773  |.  8BCC          mov     ecx, esp
    19. 0D094775  |.  8965 E8       mov     dword ptr [ebp-18], esp
    20. 0D094778  |.  68 9BB30A0D   push    0D0AB39B
    21. 0D09477D  |.  FF15 FC930A0D call    dword ptr [<&mfc90u.#290>]       ;  mfc90u.78BF338D
    22. 0D094783  |.  8945 D0       mov     dword ptr [ebp-30], eax
    23. 0D094786  |.  8B45 D0       mov     eax, dword ptr [ebp-30]
    24. 0D094789  |.  8945 CC       mov     dword ptr [ebp-34], eax
    25. 0D09478C  |.  C745 FC 00000>mov     dword ptr [ebp-4], 0
    26. 0D094793  |.  8B4D D4       mov     ecx, dword ptr [ebp-2C]
    27. 0D094796  |.  83C1 74       add     ecx, 74
    28. 0D094799  |.  51            push    ecx
    29. 0D09479A  |.  8BD4          mov     edx, esp
    30. 0D09479C  |.  8965 E4       mov     dword ptr [ebp-1C], esp
    31. 0D09479F  |.  51            push    ecx
    32. 0D0947A0  |.  8BCA          mov     ecx, edx
    33. 0D0947A2  |.  FF15 20960A0D call    dword ptr [<&mfc90u.#280>]       ;  取出假码
    34. 0D0947A8  |.  8945 C8       mov     dword ptr [ebp-38], eax
    35. 0D0947AB  |.  8B45 C8       mov     eax, dword ptr [ebp-38]
    36. 0D0947AE  |.  8945 C4       mov     dword ptr [ebp-3C], eax
    37. 0D0947B1  |.  C645 FC 01    mov     byte ptr [ebp-4], 1
    38. 0D0947B5  |.  8B4D D4       mov     ecx, dword ptr [ebp-2C]
    39. 0D0947B8  |.  83C1 78       add     ecx, 78
    40. 0D0947BB  |.  51            push    ecx
    41. 0D0947BC  |.  8BD4          mov     edx, esp
    42. 0D0947BE  |.  8965 E0       mov     dword ptr [ebp-20], esp
    43. 0D0947C1  |.  51            push    ecx
    44. 0D0947C2  |.  8BCA          mov     ecx, edx
    45. 0D0947C4  |.  FF15 20960A0D call    dword ptr [<&mfc90u.#280>]       ;  取出注册名
    46. 0D0947CA  |.  8945 C0       mov     dword ptr [ebp-40], eax
    47. 0D0947CD  |.  8B45 C0       mov     eax, dword ptr [ebp-40]
    48. 0D0947D0  |.  8945 BC       mov     dword ptr [ebp-44], eax
    49. 0D0947D3  |.  C645 FC 02    mov     byte ptr [ebp-4], 2
    50. 0D0947D7  |.  8B4D D4       mov     ecx, dword ptr [ebp-2C]
    51. 0D0947DA  |.  83C1 7C       add     ecx, 7C
    52. 0D0947DD  |.  51            push    ecx
    53. 0D0947DE  |.  8BD4          mov     edx, esp
    54. 0D0947E0  |.  8965 DC       mov     dword ptr [ebp-24], esp
    55. 0D0947E3  |.  51            push    ecx
    56. 0D0947E4  |.  8BCA          mov     ecx, edx
    57. 0D0947E6  |.  FF15 20960A0D call    dword ptr [<&mfc90u.#280>]       ;  注册类型
    58. 0D0947EC  |.  8945 B8       mov     dword ptr [ebp-48], eax
    59. 0D0947EF  |.  8B45 B8       mov     eax, dword ptr [ebp-48]
    60. 0D0947F2  |.  8945 B4       mov     dword ptr [ebp-4C], eax
    61. 0D0947F5  |.  C645 FC 03    mov     byte ptr [ebp-4], 3
    62. 0D0947F9  |.  51            push    ecx
    63. 0D0947FA  |.  8BCC          mov     ecx, esp
    64. 0D0947FC  |.  8965 D8       mov     dword ptr [ebp-28], esp
    65. 0D0947FF  |.  68 90B30A0D   push    0D0AB390                         ;  ASCII "CompareDWG"
    66. 0D094804  |.  FF15 FC930A0D call    dword ptr [<&mfc90u.#290>]       ;  软件名称
    67. 0D09480A  |.  8945 B0       mov     dword ptr [ebp-50], eax
    68. 0D09480D  |.  C745 FC FFFFF>mov     dword ptr [ebp-4], -1
    69. 0D094814  |.  E8 97200000   call    0D0968B0                         ;  关键call
    70. 0D094819  |.  83C4 14       add     esp, 14
    71. 0D09481C  |.  8845 AF       mov     byte ptr [ebp-51], al            ;  假码首字符
    72. 0D09481F  |.  8A4D AF       mov     cl, byte ptr [ebp-51]
    73. 0D094822  |.  884D F3       mov     byte ptr [ebp-D], cl
    74. 0D094825  |.  0FBE55 F3     movsx   edx, byte ptr [ebp-D]
    75. 0D094829  |.  33C0          xor     eax, eax
    76. 0D09482B  |.  83FA 43       cmp     edx, 43                          ;  不可以<=C,为老版本
    77. 0D09482E  |.  0F9DC0        setge   al
    78. 0D094831  |.  8945 EC       mov     dword ptr [ebp-14], eax
    79. 0D094834  |.  837D EC 00    cmp     dword ptr [ebp-14], 0
    80. 0D094838  |.  75 1D         jnz     short 0D094857
    81. 0D09483A  |.  0FBE4D F3     movsx   ecx, byte ptr [ebp-D]
    82. 0D09483E  |.  83F9 41       cmp     ecx, 41
    83. 0D094841  |.  7C 14         jl      short 0D094857                   ;  <A也可以的,但算法里并没有这个运算
    84. 0D094843  |.  8B55 D4       mov     edx, dword ptr [ebp-2C]
    85. 0D094846  |.  8B42 74       mov     eax, dword ptr [edx+74]
    86. 0D094849  |.  50            push    eax
    87. 0D09484A  |.  68 E8B20A0D   push    0D0AB2E8                         ;  UNICODE "Old registration code %s.",LF,LF,"Please update your license at http://www.furix.com/renew"
    88. 0D09484F  |.  E8 CCFD0000   call    0D0A4620
    89. 0D094854  |.  83C4 08       add     esp, 8
    90. 0D094857  |>  8B4D EC       mov     ecx, dword ptr [ebp-14]
    91. 0D09485A  |.  51            push    ecx
    92. 0D09485B  |.  6A 01         push    1
    93. 0D09485D  |.  8B4D D4       mov     ecx, dword ptr [ebp-2C]
    94. 0D094860  |.  E8 0D1A0100   call    <jmp.&mfc90u.#2904>
    95. 0D094865  |.  8BC8          mov     ecx, eax
    96. 0D094867  |.  E8 001A0100   call    <jmp.&mfc90u.#2360>
    97. 0D09486C  |.  8B4D F4       mov     ecx, dword ptr [ebp-C]
    98. 0D09486F  |.  64:890D 00000>mov     dword ptr fs:[0], ecx
    99. 0D094876  |.  59            pop     ecx
    100. 0D094877  |.  8BE5          mov     esp, ebp
    101. 0D094879  |.  5D            pop     ebp
    102. 0D09487A  \.  C3            retn
    复制代码
    一遍跟下来是返回不了这个call的,因为注册码不对灰色按钮是不会变的。
    当然也可以用灰色按钮克星之类的。。。
    初步判断关键call在0D094814  |.  E8 97200000   call    0D0968B0
    注意一下,即使注册码正确下边还有一个注册码首字母的比较。如果是‘A’,‘B’,‘C’的话会提示是旧版本的注册码。
    跟进关键call:

    1. 0D0968B0  /$  55            push    ebp
    2. 0D0968B1  |.  8BEC          mov     ebp, esp
    3. 0D0968B3  |.  6A FF         push    -1
    4. 0D0968B5  |.  68 3E790A0D   push    0D0A793E
    5. 0D0968BA  |.  64:A1 0000000>mov     eax, dword ptr fs:[0]
    6. 0D0968C0  |.  50            push    eax
    7. 0D0968C1  |.  81EC 88000000 sub     esp, 88
    8. 0D0968C7  |.  A1 603B0B0D   mov     eax, dword ptr [D0B3B60]
    9. 0D0968CC  |.  33C5          xor     eax, ebp
    10. 0D0968CE  |.  50            push    eax
    11. 0D0968CF  |.  8D45 F4       lea     eax, dword ptr [ebp-C]
    12. 0D0968D2  |.  64:A3 0000000>mov     dword ptr fs:[0], eax
    13. 0D0968D8  |.  C745 FC 04000>mov     dword ptr [ebp-4], 4
    14. 0D0968DF  |.  C645 F3 5A    mov     byte ptr [ebp-D], 5A             ;  5a=Z
    15. 0D0968E3  |.  EB 08         jmp     short 0D0968ED
    16. 0D0968E5  |>  8A45 F3       /mov     al, byte ptr [ebp-D]
    17. 0D0968E8  |.  2C 01         |sub     al, 1
    18. 0D0968EA  |.  8845 F3       |mov     byte ptr [ebp-D], al
    19. 0D0968ED  |>  0FBE4D F3      movsx   ecx, byte ptr [ebp-D]
    20. 0D0968F1  |.  83F9 42       |cmp     ecx, 42                         ;  42=B
    21. 0D0968F4  |.  0F8C 3F010000 |jl      0D096A39
    22. 0D0968FA  |.  8D4D EC       |lea     ecx, dword ptr [ebp-14]
    23. 0D0968FD  |.  FF15 FC950A0D |call    dword ptr [<&mfc90u.#296>]      ;  mfc90u.78A87587
    24. 0D096903  |.  C645 FC 05    |mov     byte ptr [ebp-4], 5
    25. 0D096907  |.  8B55 18       |mov     edx, dword ptr [ebp+18]
    26. 0D09690A  |.  52            |push    edx
    27. 0D09690B  |.  0FBE45 F3     |movsx   eax, byte ptr [ebp-D]           ;  从Z开始递减
    28. 0D09690F  |.  83E8 40       |sub     eax, 40                         ;  5A-40=1A=26
    29. 0D096912  |.  50            |push    eax
    30. 0D096913  |.  8B4D 08       |mov     ecx, dword ptr [ebp+8]          ;  软件名
    31. 0D096916  |.  51            |push    ecx
    32. 0D096917  |.  68 40C30A0D   |push    0D0AC340                        ;  UNICODE "%s%d%s"
    33. 0D09691C  |.  8D55 EC       |lea     edx, dword ptr [ebp-14]
    34. 0D09691F  |.  52            |push    edx
    35. 0D096920  |.  FF15 8C930A0D |call    dword ptr [<&mfc90u.#2537>]     ;  UNICODE "CompareDWG+字母序号26"
    36. 0D096926  |.  83C4 14       |add     esp, 14
    37. 0D096929  |.  51            |push    ecx
    38. 0D09692A  |.  8BCC          |mov     ecx, esp
    39. 0D09692C  |.  8965 E8       |mov     dword ptr [ebp-18], esp
    40. 0D09692F  |.  6A 01         |push    1
    41. 0D096931  |.  0FB645 F3     |movzx   eax, byte ptr [ebp-D]           ;  从Z开始递减
    42. 0D096935  |.  50            |push    eax
    43. 0D096936  |.  FF15 64940A0D |call    dword ptr [<&mfc90u.#281>]      ;  mfc90u.78BF3409
    44. 0D09693C  |.  8945 B8       |mov     dword ptr [ebp-48], eax
    45. 0D09693F  |.  8B4D B8       |mov     ecx, dword ptr [ebp-48]
    46. 0D096942  |.  894D B4       |mov     dword ptr [ebp-4C], ecx
    47. 0D096945  |.  C645 FC 06    |mov     byte ptr [ebp-4], 6
    48. 0D096949  |.  51            |push    ecx
    49. 0D09694A  |.  8BCC          |mov     ecx, esp
    50. 0D09694C  |.  8965 E4       |mov     dword ptr [ebp-1C], esp
    51. 0D09694F  |.  8D55 14       |lea     edx, dword ptr [ebp+14]         ;  假码ucode
    52. 0D096952  |.  52            |push    edx
    53. 0D096953  |.  FF15 20960A0D |call    dword ptr [<&mfc90u.#280>]      ;  mfc90u.78A348EB
    54. 0D096959  |.  8945 B0       |mov     dword ptr [ebp-50], eax
    55. 0D09695C  |.  8B45 B0       |mov     eax, dword ptr [ebp-50]
    56. 0D09695F  |.  8945 AC       |mov     dword ptr [ebp-54], eax
    57. 0D096962  |.  C645 FC 07    |mov     byte ptr [ebp-4], 7
    58. 0D096966  |.  51            |push    ecx
    59. 0D096967  |.  8BCC          |mov     ecx, esp
    60. 0D096969  |.  8965 E0       |mov     dword ptr [ebp-20], esp
    61. 0D09696C  |.  8D55 10       |lea     edx, dword ptr [ebp+10]         ;  注册名ucode
    62. 0D09696F  |.  52            |push    edx
    63. 0D096970  |.  FF15 20960A0D |call    dword ptr [<&mfc90u.#280>]      ;  mfc90u.78A348EB
    64. 0D096976  |.  8945 A8       |mov     dword ptr [ebp-58], eax
    65. 0D096979  |.  8B45 A8       |mov     eax, dword ptr [ebp-58]
    66. 0D09697C  |.  8945 A4       |mov     dword ptr [ebp-5C], eax
    67. 0D09697F  |.  C645 FC 08    |mov     byte ptr [ebp-4], 8
    68. 0D096983  |.  51            |push    ecx
    69. 0D096984  |.  8BCC          |mov     ecx, esp
    70. 0D096986  |.  8965 DC       |mov     dword ptr [ebp-24], esp
    71. 0D096989  |.  8D55 0C       |lea     edx, dword ptr [ebp+C]
    72. 0D09698C  |.  52            |push    edx
    73. 0D09698D  |.  FF15 20960A0D |call    dword ptr [<&mfc90u.#280>]      ;  注册类型
    74. 0D096993  |.  8945 A0       |mov     dword ptr [ebp-60], eax
    75. 0D096996  |.  8B45 A0       |mov     eax, dword ptr [ebp-60]
    76. 0D096999  |.  8945 9C       |mov     dword ptr [ebp-64], eax
    77. 0D09699C  |.  C645 FC 09    |mov     byte ptr [ebp-4], 9
    78. 0D0969A0  |.  51            |push    ecx
    79. 0D0969A1  |.  8BCC          |mov     ecx, esp
    80. 0D0969A3  |.  8965 D8       |mov     dword ptr [ebp-28], esp
    81. 0D0969A6  |.  8D55 EC       |lea     edx, dword ptr [ebp-14]
    82. 0D0969A9  |.  52            |push    edx
    83. 0D0969AA  |.  FF15 20960A0D |call    dword ptr [<&mfc90u.#280>]      ;  UNICODE "CompareDWG+字母序号26"
    84. 0D0969B0  |.  8945 98       |mov     dword ptr [ebp-68], eax
    85. 0D0969B3  |.  C645 FC 05    |mov     byte ptr [ebp-4], 5
    86. 0D0969B7  |.  E8 E4010000   |call    0D096BA0                        ;  算法call
    87. 0D0969BC  |.  83C4 14       |add     esp, 14
    88. 0D0969BF  |.  8945 94       |mov     dword ptr [ebp-6C], eax         ;  标志位
    89. 0D0969C2  |.  837D 94 00    |cmp     dword ptr [ebp-6C], 0
    90. 0D0969C6  |.  74 5F         |je      short 0D096A27                  ;  有一组成功则保存按钮可用,跳出循环
    91. 0D0969C8  |.  8A45 F3       |mov     al, byte ptr [ebp-D]            ;  否则,进行下一组的比较
    92. 0D0969CB  |.  8845 D7       |mov     byte ptr [ebp-29], al
    复制代码
    这里是一个大循环。如果输入的注册码不正确的话会在这个call里打转。循环是从字母‘Z’一直循环到字母‘A’,共26次。
    每次根据字母在字母表中的序号,生成不同的字符串,由此得到不同的真码,和输入的假码比较。也就是说你每个注册名对应26组正确的注册码。
    但首字母为‘A’,‘B’,‘C’的即使正确也会认为是旧版注册码。
    可知算法call,跟进:

    1. 0D096BA0  /$  55            push    ebp
    2. 0D096BA1  |.  8BEC          mov     ebp, esp
    3. 0D096BA3  |.  6A FF         push    -1
    4. 0D096BA5  |.  68 B1790A0D   push    0D0A79B1
    5. 0D096BAA  |.  64:A1 0000000>mov     eax, dword ptr fs:[0]
    6. 0D096BB0  |.  50            push    eax
    7. 0D096BB1  |.  83EC 40       sub     esp, 40
    8. 0D096BB4  |.  A1 603B0B0D   mov     eax, dword ptr [D0B3B60]
    9. 0D096BB9  |.  33C5          xor     eax, ebp
    10. 0D096BBB  |.  50            push    eax
    11. 0D096BBC  |.  8D45 F4       lea     eax, dword ptr [ebp-C]
    12. 0D096BBF  |.  64:A3 0000000>mov     dword ptr fs:[0], eax
    13. 0D096BC5  |.  C745 FC 04000>mov     dword ptr [ebp-4], 4
    14. 0D096BCC  |.  51            push    ecx
    15. 0D096BCD  |.  8BCC          mov     ecx, esp
    16. 0D096BCF  |.  8965 EC       mov     dword ptr [ebp-14], esp
    17. 0D096BD2  |.  8D45 18       lea     eax, dword ptr [ebp+18]
    18. 0D096BD5  |.  50            push    eax
    19. 0D096BD6  |.  FF15 20960A0D call    dword ptr [<&mfc90u.#280>]       ;  从Z开始递减的变量
    20. 0D096BDC  |.  8945 D0       mov     dword ptr [ebp-30], eax
    21. 0D096BDF  |.  8B4D D0       mov     ecx, dword ptr [ebp-30]
    22. 0D096BE2  |.  894D CC       mov     dword ptr [ebp-34], ecx
    23. 0D096BE5  |.  C645 FC 05    mov     byte ptr [ebp-4], 5
    24. 0D096BE9  |.  51            push    ecx
    25. 0D096BEA  |.  8BCC          mov     ecx, esp
    26. 0D096BEC  |.  8965 E8       mov     dword ptr [ebp-18], esp
    27. 0D096BEF  |.  8D55 10       lea     edx, dword ptr [ebp+10]          ;  注册名
    28. 0D096BF2  |.  52            push    edx
    29. 0D096BF3  |.  FF15 20960A0D call    dword ptr [<&mfc90u.#280>]       ;  mfc90u.78A348EB
    30. 0D096BF9  |.  8945 C8       mov     dword ptr [ebp-38], eax
    31. 0D096BFC  |.  8B45 C8       mov     eax, dword ptr [ebp-38]
    32. 0D096BFF  |.  8945 C4       mov     dword ptr [ebp-3C], eax
    33. 0D096C02  |.  C645 FC 06    mov     byte ptr [ebp-4], 6
    34. 0D096C06  |.  51            push    ecx
    35. 0D096C07  |.  8BCC          mov     ecx, esp
    36. 0D096C09  |.  8965 E4       mov     dword ptr [ebp-1C], esp
    37. 0D096C0C  |.  8D55 0C       lea     edx, dword ptr [ebp+C]
    38. 0D096C0F  |.  52            push    edx                              ;  注册类型
    39. 0D096C10  |.  FF15 20960A0D call    dword ptr [<&mfc90u.#280>]       ;  mfc90u.78A348EB
    40. 0D096C16  |.  8945 C0       mov     dword ptr [ebp-40], eax
    41. 0D096C19  |.  8B45 C0       mov     eax, dword ptr [ebp-40]
    42. 0D096C1C  |.  8945 BC       mov     dword ptr [ebp-44], eax
    43. 0D096C1F  |.  C645 FC 07    mov     byte ptr [ebp-4], 7
    44. 0D096C23  |.  51            push    ecx
    45. 0D096C24  |.  8BCC          mov     ecx, esp
    46. 0D096C26  |.  8965 E0       mov     dword ptr [ebp-20], esp
    47. 0D096C29  |.  8D55 08       lea     edx, dword ptr [ebp+8]
    48. 0D096C2C  |.  52            push    edx
    49. 0D096C2D  |.  FF15 20960A0D call    dword ptr [<&mfc90u.#280>]       ;  UNICODE "CompareDWG字母序号"
    50. 0D096C33  |.  8945 B8       mov     dword ptr [ebp-48], eax          ;  以上为传参过程
    51. 0D096C36  |.  8D45 DC       lea     eax, dword ptr [ebp-24]
    52. 0D096C39  |.  50            push    eax
    53. 0D096C3A  |.  C645 FC 04    mov     byte ptr [ebp-4], 4
    54. 0D096C3E  |.  E8 FDF9FFFF   call    0D096640                         ;  算法call
    55. 0D096C43  |.  83C4 14       add     esp, 14
    56. 0D096C46  |.  8945 B4       mov     dword ptr [ebp-4C], eax
    57. 0D096C49  |.  8B4D B4       mov     ecx, dword ptr [ebp-4C]
    58. 0D096C4C  |.  894D D4       mov     dword ptr [ebp-2C], ecx
    59. 0D096C4F  |.  C645 FC 08    mov     byte ptr [ebp-4], 8
    60. 0D096C53  |.  8B4D D4       mov     ecx, dword ptr [ebp-2C]
    61. 0D096C56  |.  FF15 18960A0D call    dword ptr [<&mfc90u.#909>]       ;  真吗出现
    62. 0D096C5C  |.  50            push    eax
    63. 0D096C5D  |.  8D4D 14       lea     ecx, dword ptr [ebp+14]
    64. 0D096C60  |.  FF15 78930A0D call    dword ptr [<&mfc90u.#1599>]      ;  真假码比较call
    65. 0D096C66  |.  F7D8          neg     eax
    66. 0D096C68  |.  1BC0          sbb     eax, eax
    67. 0D096C6A  |.  83C0 01       add     eax, 1                           ;  这里就是标志位的由来
    68. 0D096C6D  |.  0FB6D0        movzx   edx, al
    69. 0D096C70  |.  8955 F0       mov     dword ptr [ebp-10], edx
    复制代码
    这部分只是传参,真正的算法在0D096C3E  |.  E8 FDF9FFFF   call    0D096640,跟进:

    1. 0D09669C  |>  8D4D 10       lea     ecx, dword ptr [ebp+10]          ;  注册类型
    2. 0D09669F  |.  51            push    ecx
    3. 0D0966A0  |.  8D55 0C       lea     edx, dword ptr [ebp+C]           ;  uNICODE "CompareDWG25"
    4. 0D0966A3  |.  52            push    edx
    5. 0D0966A4  |.  8D45 D0       lea     eax, dword ptr [ebp-30]
    6. 0D0966A7  |.  50            push    eax
    7. 0D0966A8  |.  E8 33060000   call    0D096CE0                         ;  字符串组合UNICODE "CompareDWG25Company license (unlimited)"
    8. 0D0966AD  |.  83C4 0C       add     esp, 0C
    9. 0D0966B0  |.  8945 C4       mov     dword ptr [ebp-3C], eax
    10. 0D0966B3  |.  8B4D C4       mov     ecx, dword ptr [ebp-3C]
    11. 0D0966B6  |.  894D C0       mov     dword ptr [ebp-40], ecx
    12. 0D0966B9  |.  C645 FC 04    mov     byte ptr [ebp-4], 4
    13. 0D0966BD  |.  8D55 14       lea     edx, dword ptr [ebp+14]
    14. 0D0966C0  |.  52            push    edx                              ;  注册名
    15. 0D0966C1  |.  8B45 C0       mov     eax, dword ptr [ebp-40]
    16. 0D0966C4  |.  50            push    eax                              ;  组合字符串
    17. 0D0966C5  |.  8D4D EC       lea     ecx, dword ptr [ebp-14]
    18. 0D0966C8  |.  51            push    ecx
    19. 0D0966C9  |.  E8 12060000   call    0D096CE0                         ;  再次组合注册名
    20. 0D0966CE  |.  83C4 0C       add     esp, 0C
    21. 0D0966D1  |.  C645 FC 06    mov     byte ptr [ebp-4], 6
    22. 0D0966D5  |.  8D4D D0       lea     ecx, dword ptr [ebp-30]
    23. 0D0966D8  |.  FF15 2C960A0D call    dword ptr [<&mfc90u.#600>]       ;  mfc90u.78A8D3D2
    24. 0D0966DE  |.  8D4D EC       lea     ecx, dword ptr [ebp-14]
    25. 0D0966E1  |.  FF15 5C940A0D call    dword ptr [<&mfc90u.#4494>]      ;  转大写
    26. 0D0966E7  |.  68 D8970A0D   push    0D0A97D8
    27. 0D0966EC  |.  8D4D E8       lea     ecx, dword ptr [ebp-18]
    28. 0D0966EF  |.  FF15 24960A0D call    dword ptr [<&mfc90u.#286>]       ;  mfc90u.78A35B3B
    29. 0D0966F5  |.  C645 FC 07    mov     byte ptr [ebp-4], 7
    30. 0D0966F9  |.  C745 F0 00000>mov     dword ptr [ebp-10], 0
    31. 0D096700  |.  EB 09         jmp     short 0D09670B
    32. 0D096702  |>  8B55 F0       /mov     edx, dword ptr [ebp-10]
    33. 0D096705  |.  83C2 01       |add     edx, 1
    34. 0D096708  |.  8955 F0       |mov     dword ptr [ebp-10], edx
    35. 0D09670B  |>  8D4D EC        lea     ecx, dword ptr [ebp-14]
    36. 0D09670E  |.  FF15 14960A0D |call    dword ptr [<&mfc90u.#3185>]     ;  取长度
    37. 0D096714  |.  3945 F0       |cmp     dword ptr [ebp-10], eax
    38. 0D096717  |.  7D 33         |jge     short 0D09674C                  ;  非0
    39. 0D096719  |.  8B45 F0       |mov     eax, dword ptr [ebp-10]
    40. 0D09671C  |.  50            |push    eax
    41. 0D09671D  |.  8D4D EC       |lea     ecx, dword ptr [ebp-14]
    42. 0D096720  |.  FF15 94930A0D |call    dword ptr [<&mfc90u.#899>]      ;  取字符
    43. 0D096726  |.  66:8945 DC    |mov     word ptr [ebp-24], ax
    44. 0D09672A  |.  0FB74D DC     |movzx   ecx, word ptr [ebp-24]
    45. 0D09672E  |.  51            |push    ecx                             ; /w
    46. 0D09672F  |.  FF15 80910A0D |call    dword ptr [<&MSVCR90.iswalnum>] ; \iswalnum
    47. 0D096735  |.  83C4 04       |add     esp, 4                          ;  字符检查
    48. 0D096738  |.  85C0          |test    eax, eax
    49. 0D09673A  |.  74 0E         |je      short 0D09674A
    50. 0D09673C  |.  0FB755 DC     |movzx   edx, word ptr [ebp-24]
    51. 0D096740  |.  52            |push    edx
    52. 0D096741  |.  8D4D E8       |lea     ecx, dword ptr [ebp-18]
    53. 0D096744  |.  FF15 90930A0D |call    dword ptr [<&mfc90u.#933>]      ;  mfc90u.78A71137
    54. 0D09674A  |>^ EB B6         \jmp     short 0D096702                  ;  去非字母数字字符
    55. 0D09674C  |>  C745 E0 00000>mov     dword ptr [ebp-20], 0
    56. 0D096753  |.  C745 E4 00000>mov     dword ptr [ebp-1C], 0
    57. 0D09675A  |.  C745 F0 00000>mov     dword ptr [ebp-10], 0
    58. 0D096761  |.  EB 09         jmp     short 0D09676C
    59. 0D096763  |>  8B45 F0       /mov     eax, dword ptr [ebp-10]
    60. 0D096766  |.  83C0 01       |add     eax, 1
    61. 0D096769  |.  8945 F0       |mov     dword ptr [ebp-10], eax
    62. 0D09676C  |>  8D4D E8        lea     ecx, dword ptr [ebp-18]
    63. 0D09676F  |.  FF15 14960A0D |call    dword ptr [<&mfc90u.#3185>]     ;  长度
    64. 0D096775  |.  3945 F0       |cmp     dword ptr [ebp-10], eax
    65. 0D096778  |.  7D 74         |jge     short 0D0967EE                  ;  非0
    66. 0D09677A  |.  8B4D F0       |mov     ecx, dword ptr [ebp-10]         ;  初始值为0
    67. 0D09677D  |.  51            |push    ecx
    68. 0D09677E  |.  8D4D E8       |lea     ecx, dword ptr [ebp-18]
    69. 0D096781  |.  FF15 94930A0D |call    dword ptr [<&mfc90u.#899>]      ;  取字符
    70. 0D096787  |.  66:8945 D8    |mov     word ptr [ebp-28], ax
    71. 0D09678B  |.  C745 D4 00000>|mov     dword ptr [ebp-2C], 0
    72. 0D096792  |.  EB 09         |jmp     short 0D09679D
    73. 0D096794  |>  8B55 D4       |/mov     edx, dword ptr [ebp-2C]        ;  计数器
    74. 0D096797  |.  83C2 01       ||add     edx, 1
    75. 0D09679A  |.  8955 D4       ||mov     dword ptr [ebp-2C], edx
    76. 0D09679D  |>  837D D4 08    | cmp     dword ptr [ebp-2C], 8
    77. 0D0967A1  |.  7D 46         ||jge     short 0D0967E9                 ;  做8次运算
    78. 0D0967A3  |.  0FB745 D8     ||movzx   eax, word ptr [ebp-28]         ;  字符ascii
    79. 0D0967A7  |.  8BC8          ||mov     ecx, eax
    80. 0D0967A9  |.  81E1 1F000080 ||and     ecx, 8000001F                  ;  and 运算
    81. 0D0967AF  |.  79 05         ||jns     short 0D0967B6
    82. 0D0967B1  |.  49            ||dec     ecx
    83. 0D0967B2  |.  83C9 E0       ||or      ecx, FFFFFFE0
    84. 0D0967B5  |.  41            ||inc     ecx
    85. 0D0967B6  |>  8B55 E4       ||mov     edx, dword ptr [ebp-1C]        ;  初始值为0
    86. 0D0967B9  |.  D3C2          ||rol     edx, cl                        ;  循环左移cl位
    87. 0D0967BB  |.  8955 E4       ||mov     dword ptr [ebp-1C], edx
    88. 0D0967BE  |.  8B45 E4       ||mov     eax, dword ptr [ebp-1C]        ;  初始值为0
    89. 0D0967C1  |.  83E0 FE       ||and     eax, FFFFFFFE
    90. 0D0967C4  |.  8945 E4       ||mov     dword ptr [ebp-1C], eax
    91. 0D0967C7  |.  0FB74D D8     ||movzx   ecx, word ptr [ebp-28]         ;  字符ascii
    92. 0D0967CB  |.  83E1 01       ||and     ecx, 1
    93. 0D0967CE  |.  0B4D E4       ||or      ecx, dword ptr [ebp-1C]
    94. 0D0967D1  |.  894D E4       ||mov     dword ptr [ebp-1C], ecx
    95. 0D0967D4  |.  8B55 E0       ||mov     edx, dword ptr [ebp-20]        ;  初始值为0
    96. 0D0967D7  |.  3355 E4       ||xor     edx, dword ptr [ebp-1C]        ;  XOR是关键
    97. 0D0967DA  |.  8955 E0       ||mov     dword ptr [ebp-20], edx
    98. 0D0967DD  |.  0FB745 D8     ||movzx   eax, word ptr [ebp-28]
    99. 0D0967E1  |.  D1C8          ||ror     eax, 1
    100. 0D0967E3  |.  66:8945 D8    ||mov     word ptr [ebp-28], ax
    101. 0D0967E7  |.^ EB AB         |\jmp     short 0D096794
    102. 0D0967E9  |>^ E9 75FFFFFF   \jmp     0D096763
    103. 0D0967EE  |>  8B4D E0       mov     ecx, dword ptr [ebp-20]          ;  以上为关键算法
    104. 0D0967F1  |.  51            push    ecx
    105. 0D0967F2  |.  68 FCC20A0D   push    0D0AC2FC                         ;  UNICODE "%08LX"
    106. 0D0967F7  |.  8D55 E8       lea     edx, dword ptr [ebp-18]
    107. 0D0967FA  |.  52            push    edx
    108. 0D0967FB  |.  FF15 8C930A0D call    dword ptr [<&mfc90u.#2537>]      ;  结果转字符串
    109. 0D096801  |.  83C4 0C       add     esp, 0C
    110. 0D096804  |.  8D45 18       lea     eax, dword ptr [ebp+18]
    111. 0D096807  |.  50            push    eax
    112. 0D096808  |.  8D4D CC       lea     ecx, dword ptr [ebp-34]
    113. 0D09680B  |.  FF15 20960A0D call    dword ptr [<&mfc90u.#280>]       ;  mfc90u.78A348EB
    114. 0D096811  |.  8945 BC       mov     dword ptr [ebp-44], eax
    115. 0D096814  |.  8B4D BC       mov     ecx, dword ptr [ebp-44]
    116. 0D096817  |.  894D B8       mov     dword ptr [ebp-48], ecx
    117. 0D09681A  |.  C645 FC 08    mov     byte ptr [ebp-4], 8
    118. 0D09681E  |.  8D55 E8       lea     edx, dword ptr [ebp-18]
    119. 0D096821  |.  52            push    edx
    120. 0D096822  |.  8B45 B8       mov     eax, dword ptr [ebp-48]
    121. 0D096825  |.  50            push    eax
    122. 0D096826  |.  8B4D 08       mov     ecx, dword ptr [ebp+8]
    123. 0D096829  |.  51            push    ecx
    124. 0D09682A  |.  E8 B1040000   call    0D096CE0                         ;  连接初始化的字符串
    复制代码
    软件用软件名,字母序号,注册类型,注册名组成一个新字符串,剔除非数字和字母的符号,用ascii码做了一个很复杂的运算。
    循环左右移和XOR得出一个结果,转字符串(8位)并和组成新字符串时候所用到的字符组合在一起,即为注册码。
    举例:假设使用字母D,D在字母表中序号为4,注册名为zaas。则组合的新字符串为:
    CompareDWG4Company license (unlimited)
    变换后得到的十六进制数值为:B716D222
    则注册码前面加上使用的字母D,为:DB716D222
    一组可用的注册码:

    1. 注册名:zaas
    2. 注册码:PA98B0F06
    3. 注册类型:Company license (unlimited)
    复制代码
    具体字符串转换的循环左右移算法让人头晕。估计是自己没找到其数学模型。(数学不好,没办法)
    写注册机正好试试内嵌汇编。对delphi的这个功能神往已久了。从VB转delphi很大程度上是因为这个。
    实践证明:非常爽!
    算法注册机代码如下:

    1. procedure TForm1.BitBtn1Click(Sender: TObject);
    2.     var
    3.       Name,Code,FstWord:string;
    4.       RndNum,i,j:Integer;
    5.       ONECHAR:word;
    6.       REF,RESULT:integer;
    7.     const
    8.       Index:string='DDDDEFGHIJKLMNOPQRSTUVWXYZ';
    9.       Company:string='CompareDWG';
    10.       License:string='Companylicenseunlimited';
    11. begin
    12.       Randomize;
    13.       RndNum:=Random(26);
    14.       FstWord:=index[RndNum] ;
    15.       name:=UpperCase(Company+inttostr(RndNum)+license+Trim(edit1.Text));
    16.       REF:=0;    //   [ebp-1]
    17.       RESULT:=0;
    18.       for i:=1 to length(name) do
    19.           begin
    20.               ONECHAR:=Ord(name[i]);
    21.               for j:=1 to 8  do
    22.                   begin
    23.                       asm
    24.                           movzx   eax, ONECHAR
    25.                           mov     ecx, eax
    26.                           and     ecx, $8000001F
    27.                           jns     @JUMP
    28.                           dec     ecx
    29.                           or      ecx, $FFFFFFE0
    30.                           inc     ecx
    31.                           @JUMP:
    32.                           mov     edx, REF
    33.                           rol     edx, cl
    34.                           mov     eax, edx
    35.                           and     eax, $FFFFFFFE
    36.                           movzx   ecx, ONECHAR
    37.                           and     ecx, 1
    38.                           or      ecx, eax
    39.                           mov     REF, ecx
    40.                           mov     edx, RESULT
    41.                           xor     edx, ecx
    42.                           mov     RESULT, edx
    43.                           movzx   eax, ONECHAR
    44.                           ror     eax, 1
    45.                           mov     ONECHAR, ax
    46.                       end;
    47.                   end;
    48.           end;
    49.       code:=FstWord+IntToHex(RESULT,8)   ;
    50.       edit2.Text:=code;
    51. end;
    复制代码
    【版权声明】破文是学习的手记,兴趣是成功的源泉;本破文纯属技术交流, 转载请注明作者并保持文章的完整, 谢谢!
    Snap4.gif

    评分

    参与人数 1威望 +40 飘云币 +40 收起 理由
    月之精灵 + 40 + 40 PYG有你更精彩!

    查看全部评分

    PYG19周年生日快乐!
  • TA的每日心情

    2016-6-2 20:34
  • 签到天数: 10 天

    [LV.3]偶尔看看II

    发表于 2010-9-6 22:40:34 | 显示全部楼层
    好文,顺便学习下源码
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2015-8-23 23:49
  • 签到天数: 27 天

    [LV.4]偶尔看看III

    发表于 2010-9-7 09:35:52 | 显示全部楼层
    学习了!
    顶下大Z!
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2015-8-3 23:07
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    发表于 2010-9-7 11:21:57 | 显示全部楼层
    进来学习下,
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2019-11-28 07:16
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    发表于 2010-9-7 12:10:52 | 显示全部楼层
    很精彩,学习
    PYG19周年生日快乐!
  • TA的每日心情
    慵懒
    2015-10-9 11:25
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2010-9-8 07:25:44 | 显示全部楼层
    学习了,很精彩。
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2017-9-23 14:29
  • 签到天数: 11 天

    [LV.3]偶尔看看II

    发表于 2010-9-13 07:06:22 | 显示全部楼层
    这个图形比较还是挺有用的,省的对照
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2019-3-15 21:05
  • 签到天数: 5 天

    [LV.2]偶尔看看I

    发表于 2010-9-13 23:38:10 | 显示全部楼层
    弱弱问下楼主,安装包何处可下?
    PYG19周年生日快乐!
  • TA的每日心情
    无聊
    2024-1-15 22:57
  • 签到天数: 3 天

    [LV.2]偶尔看看I

     楼主| 发表于 2010-9-14 21:18:33 | 显示全部楼层
    弱弱问下楼主,安装包何处可下?
    VC8 发表于 2010-9-13 23:38



        http://www.furix.com/download
    PYG19周年生日快乐!
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

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