【破文标题】HTML to Image 2.0.2008.915算法分析
【破文作者】tianxj
【作者邮箱】tianxj_2007@126.com
【作者主页】WwW.ChiNaPYG.CoM
【破解工具】PEiD,OD,DeDe
【破解平台】Windows XP
【软件名称】HTML to Image 2.0.2008.915(实际显示2006.826)
【软件大小】1762KB
【软件类别】国外软件/图像处理  
【软件授权】共享版 
【软件语言】英文 
【更新时间】2008-9-22
【原版下载】自己找一下
【保护方式】注册码
【软件简介】Html To Image可以容易、快捷地将任意的html页转换成图片或缩略图。最新的特征:可直接将给定网址的网页保存成bmp、jpeg、tiff、gif、png格式的图片;由大图像生成缩略图;支持批量转换;嵌入IE浏览器的前后关联菜单中。 
【破解声明】我是一只小菜鸟,偶得一点心得,愿与大家分享:)
--------------------------------------------------------------
【破解内容】
--------------------------------------------------------------
**************************************************************
一、运行程序,进行注册,输入错误的注册信息进行检测,有提示信息
"Invalid registration code!"
**************************************************************
二、用PEiD对HtmlToImage.exe查壳,为 Borland Delphi 6.0 - 7.0
**************************************************************
三、用DeDe查找按钮事件,运行OD,打开HtmlToImage.exe
==============================================================

代码:
0054A170  /.  55            PUSH    EBP
0054A171  |.  8BEC          MOV     EBP, ESP
0054A173  |.  33C9          XOR     ECX, ECX
0054A175  |.  51            PUSH    ECX
0054A176  |.  51            PUSH    ECX
0054A177  |.  51            PUSH    ECX
0054A178  |.  51            PUSH    ECX
0054A179  |.  53            PUSH    EBX
0054A17A  |.  8BD8          MOV     EBX, EAX
0054A17C  |.  33C0          XOR     EAX, EAX
0054A17E  |.  55            PUSH    EBP
0054A17F  |.  68 9AA25400   PUSH    HtmlToIm.0054A29A
0054A184  |.  64:FF30       PUSH    DWORD PTR FS:[EAX]
0054A187  |.  64:8920       MOV     DWORD PTR FS:[EAX], ESP
0054A18A  |.  8D55 F8       LEA     EDX, DWORD PTR [EBP-8]
0054A18D  |.  8B83 78030000 MOV     EAX, DWORD PTR [EBX+378]
0054A193  |.  E8 18E8F1FF   CALL    HtmlToIm.004689B0
0054A198  |.  8B45 F8       MOV     EAX, DWORD PTR [EBP-8]
0054A19B  |.  8D55 FC       LEA     EDX, DWORD PTR [EBP-4]
0054A19E  |.  E8 85F3EBFF   CALL    HtmlToIm.00409528
0054A1A3  |.  8B55 FC       MOV     EDX, DWORD PTR [EBP-4]
0054A1A6  |.  8D83 80040000 LEA     EAX, DWORD PTR [EBX+480]
0054A1AC  |.  E8 6FA7EBFF   CALL    HtmlToIm.00404920
0054A1B1  |.  8D55 F0       LEA     EDX, DWORD PTR [EBP-10]
0054A1B4  |.  8B83 80030000 MOV     EAX, DWORD PTR [EBX+380]
0054A1BA  |.  E8 F1E7F1FF   CALL    HtmlToIm.004689B0
0054A1BF  |.  8B45 F0       MOV     EAX, DWORD PTR [EBP-10]
0054A1C2  |.  8D55 F4       LEA     EDX, DWORD PTR [EBP-C]
0054A1C5  |.  E8 5EF3EBFF   CALL    HtmlToIm.00409528
0054A1CA  |.  8B55 F4       MOV     EDX, DWORD PTR [EBP-C]
0054A1CD  |.  8D83 84040000 LEA     EAX, DWORD PTR [EBX+484]
0054A1D3  |.  E8 48A7EBFF   CALL    HtmlToIm.00404920
0054A1D8  |.  83BB 80040000>CMP     DWORD PTR [EBX+480], 0
0054A1DF  |.  75 20         JNZ     SHORT HtmlToIm.0054A201          ;  //用户名不为空则跳
0054A1E1  |.  BA ACA25400   MOV     EDX, HtmlToIm.0054A2AC           ;  UNICODE "Please input your name!"
0054A1E6  |.  8B83 B4030000 MOV     EAX, DWORD PTR [EBX+3B4]
0054A1EC  |.  E8 D774FAFF   CALL    HtmlToIm.004F16C8
0054A1F1  |.  8B83 78030000 MOV     EAX, DWORD PTR [EBX+378]
0054A1F7  |.  8B10          MOV     EDX, DWORD PTR [EAX]
0054A1F9  |.  FF92 C4000000 CALL    DWORD PTR [EDX+C4]
0054A1FF  |.  EB 6B         JMP     SHORT HtmlToIm.0054A26C
0054A201  |>  83BB 84040000>CMP     DWORD PTR [EBX+484], 0
0054A208  |.  75 20         JNZ     SHORT HtmlToIm.0054A22A          ;  //注册码不为空则跳
0054A20A  |.  BA E0A25400   MOV     EDX, HtmlToIm.0054A2E0           ;  UNICODE "Please input your registration code!"
0054A20F  |.  8B83 B4030000 MOV     EAX, DWORD PTR [EBX+3B4]
0054A215  |.  E8 AE74FAFF   CALL    HtmlToIm.004F16C8
0054A21A  |.  8B83 80030000 MOV     EAX, DWORD PTR [EBX+380]
0054A220  |.  8B10          MOV     EDX, DWORD PTR [EAX]
0054A222  |.  FF92 C4000000 CALL    DWORD PTR [EDX+C4]
0054A228  |.  EB 42         JMP     SHORT HtmlToIm.0054A26C
0054A22A  |>  8BC3          MOV     EAX, EBX
0054A22C  |.  E8 B7010000   CALL    HtmlToIm.0054A3E8                ;  //关键CALL
0054A231  |.  85C0          TEST    EAX, EAX
0054A233  |.  74 19         JE      SHORT HtmlToIm.0054A24E          ;  //关键跳转
0054A235  |.  BA 30A35400   MOV     EDX, HtmlToIm.0054A330           ;  UNICODE "Thank you for registration! All limitations are removed now."
0054A23A  |.  8B83 B4030000 MOV     EAX, DWORD PTR [EBX+3B4]
0054A240  |.  E8 8374FAFF   CALL    HtmlToIm.004F16C8
0054A245  |.  8BC3          MOV     EAX, EBX
0054A247  |.  E8 FC040000   CALL    HtmlToIm.0054A748
0054A24C  |.  EB 1E         JMP     SHORT HtmlToIm.0054A26C
0054A24E  |>  BA B0A35400   MOV     EDX, HtmlToIm.0054A3B0           ;  UNICODE "Invalid registration code!"
0054A253  |.  8B83 B4030000 MOV     EAX, DWORD PTR [EBX+3B4]
0054A259  |.  E8 6A74FAFF   CALL    HtmlToIm.004F16C8
0054A25E  |.  8B83 80030000 MOV     EAX, DWORD PTR [EBX+380]
0054A264  |.  8B10          MOV     EDX, DWORD PTR [EAX]
0054A266  |.  FF92 C4000000 CALL    DWORD PTR [EDX+C4]
0054A26C  |>  33C0          XOR     EAX, EAX
0054A26E  |.  5A            POP     EDX
0054A26F  |.  59            POP     ECX
0054A270  |.  59            POP     ECX
0054A271  |.  64:8910       MOV     DWORD PTR FS:[EAX], EDX
0054A274  |.  68 A1A25400   PUSH    HtmlToIm.0054A2A1
0054A279  |>  8D45 F0       LEA     EAX, DWORD PTR [EBP-10]
0054A27C  |.  E8 4BA6EBFF   CALL    HtmlToIm.004048CC
0054A281  |.  8D45 F4       LEA     EAX, DWORD PTR [EBP-C]
0054A284  |.  E8 43A6EBFF   CALL    HtmlToIm.004048CC
0054A289  |.  8D45 F8       LEA     EAX, DWORD PTR [EBP-8]
0054A28C  |.  E8 3BA6EBFF   CALL    HtmlToIm.004048CC
0054A291  |.  8D45 FC       LEA     EAX, DWORD PTR [EBP-4]
0054A294  |.  E8 33A6EBFF   CALL    HtmlToIm.004048CC
0054A299  \.  C3            RETN
0054A29A   .^ E9 719FEBFF   JMP     HtmlToIm.00404210
0054A29F   .^ EB D8         JMP     SHORT HtmlToIm.0054A279
0054A2A1   .  5B            POP     EBX
0054A2A2   .  8BE5          MOV     ESP, EBP
0054A2A4   .  5D            POP     EBP
0054A2A5   .  C3            RETN
==============================================================
0054A3E8  /$  55            PUSH    EBP
0054A3E9  |.  8BEC          MOV     EBP, ESP
0054A3EB  |.  B9 06000000   MOV     ECX, 6
0054A3F0  |>  6A 00         /PUSH    0
0054A3F2  |.  6A 00         |PUSH    0
0054A3F4  |.  49            |DEC     ECX
0054A3F5  |.^ 75 F9         \JNZ     SHORT HtmlToIm.0054A3F0
0054A3F7  |.  51            PUSH    ECX
0054A3F8  |.  53            PUSH    EBX
0054A3F9  |.  56            PUSH    ESI
0054A3FA  |.  57            PUSH    EDI
0054A3FB  |.  8BD8          MOV     EBX, EAX
0054A3FD  |.  33C0          XOR     EAX, EAX
0054A3FF  |.  55            PUSH    EBP
0054A400  |.  68 2CA75400   PUSH    HtmlToIm.0054A72C
0054A405  |.  64:FF30       PUSH    DWORD PTR FS:[EAX]
0054A408  |.  64:8920       MOV     DWORD PTR FS:[EAX], ESP
0054A40B  |.  8D45 FC       LEA     EAX, DWORD PTR [EBP-4]
0054A40E  |.  8B93 80040000 MOV     EDX, DWORD PTR [EBX+480]
0054A414  |.  E8 4BA5EBFF   CALL    HtmlToIm.00404964
0054A419  |.  8D45 F8       LEA     EAX, DWORD PTR [EBP-8]
0054A41C  |.  8B93 84040000 MOV     EDX, DWORD PTR [EBX+484] 
0054A422  |.  E8 3DA5EBFF   CALL    HtmlToIm.00404964
0054A427  |.  8D45 FC       LEA     EAX, DWORD PTR [EBP-4]
0054A42A  |.  8B93 80040000 MOV     EDX, DWORD PTR [EBX+480]
0054A430  |.  E8 2FA5EBFF   CALL    HtmlToIm.00404964
0054A435  |.  8D45 F8       LEA     EAX, DWORD PTR [EBP-8]
0054A438  |.  8B93 84040000 MOV     EDX, DWORD PTR [EBX+484]
0054A43E  |.  E8 21A5EBFF   CALL    HtmlToIm.00404964
0054A443  |.  8D45 FC       LEA     EAX, DWORD PTR [EBP-4]
0054A446  |.  8B93 80040000 MOV     EDX, DWORD PTR [EBX+480]
0054A44C  |.  E8 13A5EBFF   CALL    HtmlToIm.00404964
0054A451  |.  8D45 F8       LEA     EAX, DWORD PTR [EBP-8]
0054A454  |.  8B93 84040000 MOV     EDX, DWORD PTR [EBX+484]
0054A45A  |.  E8 05A5EBFF   CALL    HtmlToIm.00404964
0054A45F  |.  33F6          XOR     ESI, ESI
0054A461  |.  8D45 FC       LEA     EAX, DWORD PTR [EBP-4]
0054A464  |.  8B93 80040000 MOV     EDX, DWORD PTR [EBX+480]
0054A46A  |.  E8 F5A4EBFF   CALL    HtmlToIm.00404964
0054A46F  |.  8D45 F8       LEA     EAX, DWORD PTR [EBP-8]
0054A472  |.  8B93 84040000 MOV     EDX, DWORD PTR [EBX+484] 
0054A478  |.  E8 E7A4EBFF   CALL    HtmlToIm.00404964
0054A47D  |.  8B45 F8       MOV     EAX, DWORD PTR [EBP-8]
0054A480  |.  E8 17A7EBFF   CALL    HtmlToIm.00404B9C
0054A485  |.  83F8 16       CMP     EAX, 16
0054A488  |.  0F85 83020000 JNZ     HtmlToIm.0054A711                ;  //注册码长度不等于22则跳
0054A48E  |.  8B45 F8       MOV     EAX, DWORD PTR [EBP-8]
0054A491  |.  E8 06A7EBFF   CALL    HtmlToIm.00404B9C
0054A496  |.  83F8 16       CMP     EAX, 16
0054A499  |.  0F85 72020000 JNZ     HtmlToIm.0054A711
0054A49F  |.  8B45 F8       MOV     EAX, DWORD PTR [EBP-8]
0054A4A2  |.  E8 F5A6EBFF   CALL    HtmlToIm.00404B9C
0054A4A7  |.  83F8 16       CMP     EAX, 16
0054A4AA  |.  0F85 61020000 JNZ     HtmlToIm.0054A711
0054A4B0  |.  8B45 F8       MOV     EAX, DWORD PTR [EBP-8]
0054A4B3  |.  E8 E4A6EBFF   CALL    HtmlToIm.00404B9C
0054A4B8  |.  83F8 16       CMP     EAX, 16
0054A4BB  |.  0F85 50020000 JNZ     HtmlToIm.0054A711
0054A4C1  |.  8D4D EC       LEA     ECX, DWORD PTR [EBP-14]
0054A4C4  |.  BA 03000000   MOV     EDX, 3
0054A4C9  |.  8B83 84040000 MOV     EAX, DWORD PTR [EBX+484]
0054A4CF  |.  E8 C43FEFFF   CALL    HtmlToIm.0043E498
0054A4D4  |.  8B45 EC       MOV     EAX, DWORD PTR [EBP-14]
0054A4D7  |.  BA 44A75400   MOV     EDX, HtmlToIm.0054A744           ;  ASCII "ACM"
0054A4DC  |.  E8 07A8EBFF   CALL    HtmlToIm.00404CE8
0054A4E1  |.  0F85 2A020000 JNZ     HtmlToIm.0054A711                ;  //注册码左边3位不是"ACM"则跳
0054A4E7  |.  8B45 F8       MOV     EAX, DWORD PTR [EBP-8]
0054A4EA  |.  E8 ADA6EBFF   CALL    HtmlToIm.00404B9C
0054A4EF  |.  83F8 16       CMP     EAX, 16
0054A4F2  |.  0F85 19020000 JNZ     HtmlToIm.0054A711
0054A4F8  |.  8D4D E8       LEA     ECX, DWORD PTR [EBP-18]
0054A4FB  |.  BA 03000000   MOV     EDX, 3
0054A500  |.  8B83 84040000 MOV     EAX, DWORD PTR [EBX+484]
0054A506  |.  E8 8D3FEFFF   CALL    HtmlToIm.0043E498
0054A50B  |.  8B45 E8       MOV     EAX, DWORD PTR [EBP-18]
0054A50E  |.  BA 44A75400   MOV     EDX, HtmlToIm.0054A744           ;  ASCII "ACM"
0054A513  |.  E8 D0A7EBFF   CALL    HtmlToIm.00404CE8
0054A518  |.  0F85 F3010000 JNZ     HtmlToIm.0054A711
0054A51E  |.  8B45 F8       MOV     EAX, DWORD PTR [EBP-8]
0054A521  |.  E8 76A6EBFF   CALL    HtmlToIm.00404B9C
0054A526  |.  83F8 16       CMP     EAX, 16
0054A529  |.  0F85 E2010000 JNZ     HtmlToIm.0054A711
0054A52F  |.  8D4D E4       LEA     ECX, DWORD PTR [EBP-1C]
0054A532  |.  BA 03000000   MOV     EDX, 3
0054A537  |.  8B83 84040000 MOV     EAX, DWORD PTR [EBX+484]
0054A53D  |.  E8 563FEFFF   CALL    HtmlToIm.0043E498
0054A542  |.  8B45 E4       MOV     EAX, DWORD PTR [EBP-1C]
0054A545  |.  BA 44A75400   MOV     EDX, HtmlToIm.0054A744           ;  ASCII "ACM"
0054A54A  |.  E8 99A7EBFF   CALL    HtmlToIm.00404CE8
0054A54F  |.  0F85 BC010000 JNZ     HtmlToIm.0054A711
0054A555  |.  8D4D F8       LEA     ECX, DWORD PTR [EBP-8]
0054A558  |.  BA 13000000   MOV     EDX, 13
0054A55D  |.  8B83 84040000 MOV     EAX, DWORD PTR [EBX+484]
0054A563  |.  E8 A83FEFFF   CALL    HtmlToIm.0043E510
0054A568  |.  837D FC 00    CMP     DWORD PTR [EBP-4], 0
0054A56C  |.  0F84 9F010000 JE      HtmlToIm.0054A711                ;  //用户名为空则跳
0054A572  |.  837D F8 00    CMP     DWORD PTR [EBP-8], 0
0054A576  |.  0F84 95010000 JE      HtmlToIm.0054A711                ;  //注册码右边19位为空则跳
0054A57C  |.  33DB          XOR     EBX, EBX
0054A57E  |>  8BFB          /MOV     EDI, EBX
0054A580  |.  83C7 01       |ADD     EDI, 1
0054A583  |.  71 05         |JNO     SHORT HtmlToIm.0054A58A
0054A585  |.  E8 3294EBFF   |CALL    HtmlToIm.004039BC
0054A58A  |>  8B45 F8       |MOV     EAX, DWORD PTR [EBP-8]
0054A58D  |.  4F            |DEC     EDI
0054A58E  |.  85C0          |TEST    EAX, EAX
0054A590  |.  74 05         |JE      SHORT HtmlToIm.0054A597
0054A592  |.  3B78 FC       |CMP     EDI, DWORD PTR [EAX-4]
0054A595  |.  72 05         |JB      SHORT HtmlToIm.0054A59C
0054A597  |>  E8 1894EBFF   |CALL    HtmlToIm.004039B4
0054A59C  |>  47            |INC     EDI
0054A59D  |.  807C38 FF 2D  |CMP     BYTE PTR [EAX+EDI-1], 2D
0054A5A2  |.  74 2A         |JE      SHORT HtmlToIm.0054A5CE
0054A5A4  |.  8D45 E0       |LEA     EAX, DWORD PTR [EBP-20]
0054A5A7  |.  8B55 F8       |MOV     EDX, DWORD PTR [EBP-8]
0054A5AA  |.  4F            |DEC     EDI
0054A5AB  |.  85D2          |TEST    EDX, EDX
0054A5AD  |.  74 05         |JE      SHORT HtmlToIm.0054A5B4
0054A5AF  |.  3B7A FC       |CMP     EDI, DWORD PTR [EDX-4]
0054A5B2  |.  72 05         |JB      SHORT HtmlToIm.0054A5B9
0054A5B4  |>  E8 FB93EBFF   |CALL    HtmlToIm.004039B4
0054A5B9  |>  47            |INC     EDI
0054A5BA  |.  8A543A FF     |MOV     DL, BYTE PTR [EDX+EDI-1]
0054A5BE  |.  E8 F1A4EBFF   |CALL    HtmlToIm.00404AB4
0054A5C3  |.  8B55 E0       |MOV     EDX, DWORD PTR [EBP-20]
0054A5C6  |.  8D45 F4       |LEA     EAX, DWORD PTR [EBP-C]
0054A5C9  |.  E8 D6A5EBFF   |CALL    HtmlToIm.00404BA4
0054A5CE  |>  43            |INC     EBX
0054A5CF  |.  83FB 13       |CMP     EBX, 13
0054A5D2  |.^ 75 AA         \JNZ     SHORT HtmlToIm.0054A57E         ;  //循环,去除注册码右边19位里的"-", 形成新字符串
0054A5D4  |.  8D45 F8       LEA     EAX, DWORD PTR [EBP-8]
0054A5D7  |.  8B55 F4       MOV     EDX, DWORD PTR [EBP-C]
0054A5DA  |.  E8 85A3EBFF   CALL    HtmlToIm.00404964
0054A5DF  |.  8D45 F4       LEA     EAX, DWORD PTR [EBP-C]
0054A5E2  |.  E8 E5A2EBFF   CALL    HtmlToIm.004048CC
0054A5E7  |.  8B45 F8       MOV     EAX, DWORD PTR [EBP-8]
0054A5EA  |.  E8 ADA5EBFF   CALL    HtmlToIm.00404B9C
0054A5EF  |.  83F8 10       CMP     EAX, 10
0054A5F2  |.  0F85 19010000 JNZ     HtmlToIm.0054A711                ;  //新字符串的长度不等于16则跳
0054A5F8  |.  33DB          XOR     EBX, EBX
0054A5FA  |>  8BC3          /MOV     EAX, EBX
0054A5FC  |.  25 01000080   |AND     EAX, 80000001
0054A601  |.  79 05         |JNS     SHORT HtmlToIm.0054A608
0054A603  |.  48            |DEC     EAX
0054A604  |.  83C8 FE       |OR      EAX, FFFFFFFE
0054A607  |.  40            |INC     EAX
0054A608  |>  85C0          |TEST    EAX, EAX
0054A60A  |.  75 38         |JNZ     SHORT HtmlToIm.0054A644
0054A60C  |.  8D45 DC       |LEA     EAX, DWORD PTR [EBP-24]
0054A60F  |.  8BD3          |MOV     EDX, EBX
0054A611  |.  83C2 01       |ADD     EDX, 1
0054A614  |.  71 05         |JNO     SHORT HtmlToIm.0054A61B
0054A616  |.  E8 A193EBFF   |CALL    HtmlToIm.004039BC
0054A61B  |>  8B4D F8       |MOV     ECX, DWORD PTR [EBP-8]
0054A61E  |.  4A            |DEC     EDX
0054A61F  |.  85C9          |TEST    ECX, ECX
0054A621  |.  74 05         |JE      SHORT HtmlToIm.0054A628
0054A623  |.  3B51 FC       |CMP     EDX, DWORD PTR [ECX-4]
0054A626  |.  72 05         |JB      SHORT HtmlToIm.0054A62D
0054A628  |>  E8 8793EBFF   |CALL    HtmlToIm.004039B4
0054A62D  |>  42            |INC     EDX
0054A62E  |.  8A5411 FF     |MOV     DL, BYTE PTR [ECX+EDX-1]
0054A632  |.  E8 7DA4EBFF   |CALL    HtmlToIm.00404AB4
0054A637  |.  8B55 DC       |MOV     EDX, DWORD PTR [EBP-24]
0054A63A  |.  8D45 F0       |LEA     EAX, DWORD PTR [EBP-10]
0054A63D  |.  E8 62A5EBFF   |CALL    HtmlToIm.00404BA4
0054A642  |.  EB 36         |JMP     SHORT HtmlToIm.0054A67A
0054A644  |>  8D45 D8       |LEA     EAX, DWORD PTR [EBP-28]
0054A647  |.  8BD3          |MOV     EDX, EBX
0054A649  |.  83C2 01       |ADD     EDX, 1
0054A64C  |.  71 05         |JNO     SHORT HtmlToIm.0054A653
0054A64E  |.  E8 6993EBFF   |CALL    HtmlToIm.004039BC
0054A653  |>  8B4D F8       |MOV     ECX, DWORD PTR [EBP-8]
0054A656  |.  4A            |DEC     EDX
0054A657  |.  85C9          |TEST    ECX, ECX
0054A659  |.  74 05         |JE      SHORT HtmlToIm.0054A660
0054A65B  |.  3B51 FC       |CMP     EDX, DWORD PTR [ECX-4]
0054A65E  |.  72 05         |JB      SHORT HtmlToIm.0054A665
0054A660  |>  E8 4F93EBFF   |CALL    HtmlToIm.004039B4
0054A665  |>  42            |INC     EDX
0054A666  |.  8A5411 FF     |MOV     DL, BYTE PTR [ECX+EDX-1]
0054A66A  |.  E8 45A4EBFF   |CALL    HtmlToIm.00404AB4
0054A66F  |.  8B55 D8       |MOV     EDX, DWORD PTR [EBP-28]
0054A672  |.  8D45 F4       |LEA     EAX, DWORD PTR [EBP-C]
0054A675  |.  E8 2AA5EBFF   |CALL    HtmlToIm.00404BA4
0054A67A  |>  43            |INC     EBX
0054A67B  |.  83FB 10       |CMP     EBX, 10
0054A67E  |.^ 0F85 76FFFFFF \JNZ     HtmlToIm.0054A5FA               ;  //循环,将新字符串按奇数位和偶数位分成两组字符串
0054A684  |.  8D45 FC       LEA     EAX, DWORD PTR [EBP-4]
0054A687  |.  E8 40A2EBFF   CALL    HtmlToIm.004048CC
0054A68C  |.  33DB          XOR     EBX, EBX
0054A68E  |>  8D45 D4       /LEA     EAX, DWORD PTR [EBP-2C]
0054A691  |.  BA 08000000   |MOV     EDX, 8
0054A696  |.  2BD3          |SUB     EDX, EBX
0054A698  |.  71 05         |JNO     SHORT HtmlToIm.0054A69F
0054A69A  |.  E8 1D93EBFF   |CALL    HtmlToIm.004039BC
0054A69F  |>  8B4D F4       |MOV     ECX, DWORD PTR [EBP-C]
0054A6A2  |.  4A            |DEC     EDX
0054A6A3  |.  85C9          |TEST    ECX, ECX
0054A6A5  |.  74 05         |JE      SHORT HtmlToIm.0054A6AC
0054A6A7  |.  3B51 FC       |CMP     EDX, DWORD PTR [ECX-4]
0054A6AA  |.  72 05         |JB      SHORT HtmlToIm.0054A6B1
0054A6AC  |>  E8 0393EBFF   |CALL    HtmlToIm.004039B4
0054A6B1  |>  42            |INC     EDX
0054A6B2  |.  8A5411 FF     |MOV     DL, BYTE PTR [ECX+EDX-1]
0054A6B6  |.  E8 F9A3EBFF   |CALL    HtmlToIm.00404AB4
0054A6BB  |.  8B55 D4       |MOV     EDX, DWORD PTR [EBP-2C]
0054A6BE  |.  8D45 FC       |LEA     EAX, DWORD PTR [EBP-4]
0054A6C1  |.  E8 DEA4EBFF   |CALL    HtmlToIm.00404BA4
0054A6C6  |.  43            |INC     EBX
0054A6C7  |.  83FB 08       |CMP     EBX, 8
0054A6CA  |.^ 75 C2         \JNZ     SHORT HtmlToIm.0054A68E         ;  //循环,将偶数位字符串反转
0054A6CC  |.  8D55 D0       LEA     EDX, DWORD PTR [EBP-30]
0054A6CF  |.  8B45 F0       MOV     EAX, DWORD PTR [EBP-10]          ;  //奇数位字符串
0054A6D2  |.  E8 3DB8FFFF   CALL    HtmlToIm.00545F14                ;  //奇数位字符串作标准MD5运算
0054A6D7  |.  8B55 D0       MOV     EDX, DWORD PTR [EBP-30]          ;  //奇数位字符串MD5值大写
0054A6DA  |.  8D45 F0       LEA     EAX, DWORD PTR [EBP-10]
0054A6DD  |.  E8 82A2EBFF   CALL    HtmlToIm.00404964
0054A6E2  |.  8D4D CC       LEA     ECX, DWORD PTR [EBP-34]
0054A6E5  |.  BA 08000000   MOV     EDX, 8
0054A6EA  |.  8B45 F0       MOV     EAX, DWORD PTR [EBP-10]          ;  //奇数位字符串MD5值大写
0054A6ED  |.  E8 AE3EEFFF   CALL    HtmlToIm.0043E5A0                ;  //取奇数位字符串MD5值大写的右边8位
0054A6F2  |.  8B55 CC       MOV     EDX, DWORD PTR [EBP-34]          ;  //奇数位字符串MD5值大写的右边8位
0054A6F5  |.  8D45 F0       LEA     EAX, DWORD PTR [EBP-10]
0054A6F8  |.  E8 67A2EBFF   CALL    HtmlToIm.00404964
0054A6FD  |.  8B45 FC       MOV     EAX, DWORD PTR [EBP-4]           ;  //偶数位字符串反转字符串
0054A700  |.  8B55 F0       MOV     EDX, DWORD PTR [EBP-10]          ;  //取奇数位字符串MD5值大写的右边8位
0054A703  |.  E8 E0A5EBFF   CALL    HtmlToIm.00404CE8                ;  //比较CALL
0054A708  |.  75 05         JNZ     SHORT HtmlToIm.0054A70F          ;  //关键跳转
0054A70A  |.  83CE FF       OR      ESI, FFFFFFFF
0054A70D  |.  EB 02         JMP     SHORT HtmlToIm.0054A711
0054A70F  |>  33F6          XOR     ESI, ESI
0054A711  |>  33C0          XOR     EAX, EAX
0054A713  |.  5A            POP     EDX
0054A714  |.  59            POP     ECX
0054A715  |.  59            POP     ECX
0054A716  |.  64:8910       MOV     DWORD PTR FS:[EAX], EDX
0054A719  |.  68 33A75400   PUSH    HtmlToIm.0054A733
0054A71E  |>  8D45 CC       LEA     EAX, DWORD PTR [EBP-34]
0054A721  |.  BA 0D000000   MOV     EDX, 0D
0054A726  |.  E8 C5A1EBFF   CALL    HtmlToIm.004048F0
0054A72B  \.  C3            RETN
0054A72C   .^ E9 DF9AEBFF   JMP     HtmlToIm.00404210
0054A731   .^ EB EB         JMP     SHORT HtmlToIm.0054A71E
0054A733   .  8BC6          MOV     EAX, ESI
0054A735   .  5F            POP     EDI
0054A736   .  5E            POP     ESI
0054A737   .  5B            POP     EBX
0054A738   .  8BE5          MOV     ESP, EBP
0054A73A   .  5D            POP     EBP
0054A73B   .  C3            RETN
**************************************************************  
【破解总结】
--------------------------------------------------------------
【算法总结】
1.用户名与注册码无关,但不能为空
2.注册码长度必须为22位,左边3位必须是"ACM",注册码里必须有3个"-"
3.剩余16位注册码正确与否是根据奇数位和偶数位运算来判断的
--------------------------------------------------------------
【算法注册机】
〖易语言代码〗
.版本 2
.支持库 dp1

.子程序 _按钮1_被单击
.局部变量 奇数位字符串, 文本型
.局部变量 偶数位字符串, 文本型
.局部变量 新字符串, 文本型
.局部变量 i, 整数型

奇数位字符串 = 到文本 (取随机数 (0, 9)) + 到文本 (取随机数 (0, 9)) + 到文本 (取随机数 (0, 9)) + 到文本 (取随机数 (0, 9)) + 到文本 (取随机数 (0, 9)) + 到文本 (取随机数 (0, 9)) + 到文本 (取随机数 (0, 9)) + 到文本 (取随机数 (0, 9))
偶数位字符串 = 到大写 (倒转字符串 (取文本右边 (到大写 (取数据摘要 (到字节集 (奇数位字符串))), 8)))
.计次循环首 (8, i)
    新字符串 = 新字符串 + 取文本中间 (奇数位字符串, i, 1) + 取文本中间 (偶数位字符串, i, 1)
.计次循环尾 ()
编辑框2.内容 = “ ACM-” + 取文本中间 (新字符串, 1, 5) + “-” + 取文本中间 (新字符串, 6, 5) + “-” + 取文本中间 (新字符串, 11, 6)


.子程序 倒转字符串, 文本型
.参数 string, 文本型
.局部变量 k, 整数型
.局部变量 RChar, 文本型
.局部变量 LChar, 文本型
.局部变量 WChar, 文本型

.判断循环首 (k < 取文本长度 (string))
    LChar = 取文本左边 (string, 取文本长度 (string) - k)
    RChar = 取文本右边 (LChar, 1)
    k = k + 1
    WChar = WChar + RChar
.判断循环尾 ()
返回 (WChar)
--------------------------------------------------------------
【注册信息】
 保存在strings.ini
--------------------------------------------------------------
感谢飘云老大、猫老大、Nisy老大以及很多前辈们的学习教程以及所有帮助过我的论坛兄弟姐妹们!谢谢
--------------------------------------------------------------
【版权声明】破文是学习的手记,兴趣是成功的源泉;本破文纯属技术交流, 转载请注明作者并保持文章的完整, 谢谢!

     _/_/_/   _/   _/   _/_/_/ 
    _/   _/  _/  _/    _/       
   _/_/_/    _/_/     _/_/_/_/ 
  _/         _/      _/    _/
 _/         _/      _/_/_/ _/    tianxj