binbinbin 发表于 2006-11-20 23:10:56

HTML to Image 2.0.2006.1001注册算法(含全程录像)

【破文标题】HTML to Image 2.0.2006.1001注册算法-MD5
【破文作者】XXNB
【作者邮箱】支持PYG
【作者主页】binbinbin7456.ys168.com
【破解工具】OD
【破解平台】XPsp2
【软件名称】HTML to Image 2.0.2006.1001
【软件大小】1762KB
【原版下载】http://www.onlinedown.net/soft/35519.htm
【保护方式】名+码
【软件简介】Html To Image可以容易、快捷地将任意的html页转换成图片或缩略图。最新的特征:可直接将给定网址的网页保存成bmp、jpeg

、tiff、gif、png格式的图片;由大图像生成缩略图;支持批量转换;嵌入IE浏览器的前后关联菜单中。
【破解声明】向前辈们学习!只为学习交流!
------------------------------------------------------------------------
【破解过程】
------------------------------------------------------------------------
    这几天玩aspr壳,好晕啊。还是分析算法好!用peid的插件发现有几个加密算法,当时我就保佑它只用到MD5(这个我熟悉)。结果,万事

如意。作者没有加壳,我们直接进入主题:

1、OD载入,找了半天找不到断点。只好拿出DEDE。很快发现一个btnregist(偷笑),双击。还是那句话“找到关键断点,成功一半”。
输入注册信息:binbinbin。码:ACM-123456-123456-1234。注册码一定要类似这样的格式的,具体看我的分析。

得到:

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    0054A29A
0054A184|.64:FF30       push    dword ptr fs:
0054A187|.64:8920       mov   dword ptr fs:, esp
0054A18A|.8D55 F8       lea   edx, dword ptr
0054A18D|.8B83 78030000 mov   eax, dword ptr
0054A193|.E8 18E8F1FF   call    004689B0
0054A198|.8B45 F8       mov   eax, dword ptr          ;用户名位数
0054A19B|.8D55 FC       lea   edx, dword ptr
0054A19E|.E8 85F3EBFF   call    00409528
0054A1A3|.8B55 FC       mov   edx, dword ptr
0054A1A6|.8D83 80040000 lea   eax, dword ptr
0054A1AC|.E8 6FA7EBFF   call    00404920
0054A1B1|.8D55 F0       lea   edx, dword ptr
0054A1B4|.8B83 80030000 mov   eax, dword ptr
0054A1BA|.E8 F1E7F1FF   call    004689B0
0054A1BF|.8B45 F0       mov   eax, dword ptr           ;假码位数
0054A1C2|.8D55 F4       lea   edx, dword ptr
0054A1C5|.E8 5EF3EBFF   call    00409528
0054A1CA|.8B55 F4       mov   edx, dword ptr          ;假码
0054A1CD|.8D83 84040000 lea   eax, dword ptr
0054A1D3|.E8 48A7EBFF   call    00404920                         ;上面都是对称的
0054A1D8|.83BB 80040000>cmp   dword ptr , 0         ;用户名是否为空
0054A1DF|.75 20         jnz   short 0054A201
0054A1E1|.BA ACA25400   mov   edx, 0054A2AC                  ;p
0054A1E6|.8B83 B4030000 mov   eax, dword ptr
0054A1EC|.E8 D774FAFF   call    004F16C8
0054A1F1|.8B83 78030000 mov   eax, dword ptr
0054A1F7|.8B10          mov   edx, dword ptr
0054A1F9|.FF92 C4000000 call    dword ptr
0054A1FF|.EB 6B         jmp   short 0054A26C
0054A201|>83BB 84040000>cmp   dword ptr , 0         ;输入注册码没有
0054A208|.75 20         jnz   short 0054A22A
0054A20A|.BA E0A25400   mov   edx, 0054A2E0                  ;p
0054A20F|.8B83 B4030000 mov   eax, dword ptr
0054A215|.E8 AE74FAFF   call    004F16C8
0054A21A|.8B83 80030000 mov   eax, dword ptr
0054A220|.8B10          mov   edx, dword ptr
0054A222|.FF92 C4000000 call    dword ptr
0054A228|.EB 42         jmp   short 0054A26C
0054A22A|>8BC3          mov   eax, ebx
0054A22C|.E8 B7010000   call    0054A3E8                         ;这个理所当然是算法call,《《《《《《《《《《《《《《
0054A231|.85C0          test    eax, eax
0054A233      74 19         je      short 0054A24E                   ;关键跳转。爆破点
0054A235|.BA 30A35400   mov   edx, 0054A330                  ;t   "Thank you for registration! All limitations are

removed now."
0054A23A|.8B83 B4030000 mov   eax, dword ptr           ;作者只用了第一个字母来表示成功和失败的信息,所以
0054A240|.E8 8374FAFF   call    004F16C8                        ;字符串搜索的时候可以直接搜索“t”
0054A245|.8BC3          mov   eax, ebx
0054A247|.E8 FC040000   call    0054A748
0054A24C|.EB 1E         jmp   short 0054A26C
0054A24E|>BA B0A35400   mov   edx, 0054A3B0                  ;i   "Invalid registration code!"
0054A253|.8B83 B4030000 mov   eax, dword ptr
0054A259|.E8 6A74FAFF   call    004F16C8
0054A25E|.8B83 80030000 mov   eax, dword ptr
0054A264|.8B10          mov   edx, dword ptr
0054A266|.FF92 C4000000 call    dword ptr
0054A26C|>33C0          xor   eax, eax


++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2、跟进算法call:0054A22C|.E8 B7010000   call    0054A3E8,得到下面:具体的看注释



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 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    0054A72C
0054A405|.64:FF30       push    dword ptr fs:
0054A408|.64:8920       mov   dword ptr fs:, esp
0054A40B|.8D45 FC       lea   eax, dword ptr
0054A40E|.8B93 80040000 mov   edx, dword ptr          ;用户名
0054A414|.E8 4BA5EBFF   call    00404964
0054A419|.8D45 F8       lea   eax, dword ptr
0054A41C|.8B93 84040000 mov   edx, dword ptr          ;假码
0054A422|.E8 3DA5EBFF   call    00404964
0054A427|.8D45 FC       lea   eax, dword ptr
0054A42A|.8B93 80040000 mov   edx, dword ptr
0054A430|.E8 2FA5EBFF   call    00404964
0054A435|.8D45 F8       lea   eax, dword ptr
0054A438|.8B93 84040000 mov   edx, dword ptr
0054A43E|.E8 21A5EBFF   call    00404964
0054A443|.8D45 FC       lea   eax, dword ptr
0054A446|.8B93 80040000 mov   edx, dword ptr
0054A44C|.E8 13A5EBFF   call    00404964
0054A451|.8D45 F8       lea   eax, dword ptr
0054A454|.8B93 84040000 mov   edx, dword ptr
0054A45A|.E8 05A5EBFF   call    00404964
0054A45F|.33F6          xor   esi, esi
0054A461|.8D45 FC       lea   eax, dword ptr
0054A464|.8B93 80040000 mov   edx, dword ptr
0054A46A|.E8 F5A4EBFF   call    00404964
0054A46F|.8D45 F8       lea   eax, dword ptr
0054A472|.8B93 84040000 mov   edx, dword ptr
0054A478|.E8 E7A4EBFF   call    00404964
0054A47D|.8B45 F8       mov   eax, dword ptr
0054A480|.E8 17A7EBFF   call    00404B9C
0054A485|.83F8 16       cmp   eax, 16                        ;注册码要求16H位数的
0054A488|.0F85 83020000 jnz   0054A711
0054A48E|.8B45 F8       mov   eax, dword ptr          ;假码
0054A491|.E8 06A7EBFF   call    00404B9C
0054A496|.83F8 16       cmp   eax, 16
0054A499|.0F85 72020000 jnz   0054A711
0054A49F|.8B45 F8       mov   eax, dword ptr
0054A4A2|.E8 F5A6EBFF   call    00404B9C                         ;好像不用检测这么多次吧!!
0054A4A7|.83F8 16       cmp   eax, 16                        ;作者的用意我想不通
0054A4AA|.0F85 61020000 jnz   0054A711
0054A4B0|.8B45 F8       mov   eax, dword ptr
0054A4B3|.E8 E4A6EBFF   call    00404B9C
0054A4B8|.83F8 16       cmp   eax, 16
0054A4BB|.0F85 50020000 jnz   0054A711
0054A4C1|.8D4D EC       lea   ecx, dword ptr
0054A4C4|.BA 03000000   mov   edx, 3
0054A4C9|.8B83 84040000 mov   eax, dword ptr
0054A4CF|.E8 C43FEFFF   call    0043E498
0054A4D4|.8B45 EC       mov   eax, dword ptr           ;“ACM”
0054A4D7|.BA 44A75400   mov   edx, 0054A744                  ;acm
0054A4DC|.E8 07A8EBFF   call    00404CE8                         ;头三位应当为“ACM”
0054A4E1|.0F85 2A020000 jnz   0054A711
0054A4E7|.8B45 F8       mov   eax, dword ptr          ;(ASCII "ACM-123456-123456-1234")
0054A4EA|.E8 ADA6EBFF   call    00404B9C
0054A4EF|.83F8 16       cmp   eax, 16                        ;又检测
0054A4F2|.0F85 19020000 jnz   0054A711
0054A4F8|.8D4D E8       lea   ecx, dword ptr
0054A4FB|.BA 03000000   mov   edx, 3
0054A500|.8B83 84040000 mov   eax, dword ptr
0054A506|.E8 8D3FEFFF   call    0043E498                         ;取字符函数
0054A50B|.8B45 E8       mov   eax, dword ptr
0054A50E|.BA 44A75400   mov   edx, 0054A744                  ;acm
0054A513|.E8 D0A7EBFF   call    00404CE8
0054A518|.0F85 F3010000 jnz   0054A711
0054A51E|.8B45 F8       mov   eax, dword ptr
0054A521|.E8 76A6EBFF   call    00404B9C
0054A526|.83F8 16       cmp   eax, 16
0054A529|.0F85 E2010000 jnz   0054A711
0054A52F|.8D4D E4       lea   ecx, dword ptr
0054A532|.BA 03000000   mov   edx, 3
0054A537|.8B83 84040000 mov   eax, dword ptr          ;作者很喜欢重复重复重复的比较
0054A53D|.E8 563FEFFF   call    0043E498
0054A542|.8B45 E4       mov   eax, dword ptr
0054A545|.BA 44A75400   mov   edx, 0054A744                  ;acm
0054A54A|.E8 99A7EBFF   call    00404CE8
0054A54F|.0F85 BC010000 jnz   0054A711
0054A555|.8D4D F8       lea   ecx, dword ptr
0054A558|.BA 13000000   mov   edx, 13                        ;常数
0054A55D|.8B83 84040000 mov   eax, dword ptr
0054A563|.E8 A83FEFFF   call    0043E510
0054A568|.837D FC 00    cmp   dword ptr , 0             ;用户名输入没有
0054A56C|.0F84 9F010000 je      0054A711
0054A572|.837D F8 00    cmp   dword ptr , 0             ;后面那部分有没有东西
0054A576|.0F84 95010000 je      0054A711
0054A57C|.33DB          xor   ebx, ebx
0054A57E|>8BFB          /mov   edi, ebx                        ;循环开始
0054A580|.83C7 01       |add   edi, 1                        ;计数器
0054A583|.71 05         |jno   short 0054A58A
0054A585|.E8 3294EBFF   |call    004039BC
0054A58A|>8B45 F8       |mov   eax, dword ptr           ;后面那部分
0054A58D|.4F            |dec   edi
0054A58E|.85C0          |test    eax, eax
0054A590|.74 05         |je      short 0054A597
0054A592|.3B78 FC       |cmp   edi, dword ptr
0054A595|.72 05         |jb      short 0054A59C
0054A597|>E8 1894EBFF   |call    004039B4
0054A59C|>47            |inc   edi
0054A59D|.807C38 FF 2D|cmp   byte ptr , 2D      ;和2D“-”比较
0054A5A2|.74 2A         |je      short 0054A5CE
0054A5A4|.8D45 E0       |lea   eax, dword ptr
0054A5A7|.8B55 F8       |mov   edx, dword ptr
0054A5AA|.4F            |dec   edi
0054A5AB|.85D2          |test    edx, edx
0054A5AD|.74 05         |je      short 0054A5B4
0054A5AF|.3B7A FC       |cmp   edi, dword ptr
0054A5B2|.72 05         |jb      short 0054A5B9
0054A5B4|>E8 FB93EBFF   |call    004039B4
0054A5B9|>47            |inc   edi
0054A5BA|.8A543A FF   |mov   dl, byte ptr
0054A5BE|.E8 F1A4EBFF   |call    00404AB4
0054A5C3|.8B55 E0       |mov   edx, dword ptr
0054A5C6|.8D45 F4       |lea   eax, dword ptr
0054A5C9|.E8 D6A5EBFF   |call    00404BA4
0054A5CE|>43            |inc   ebx
0054A5CF|.83FB 13       |cmp   ebx, 13
0054A5D2|.^ 75 AA         \jnz   short 0054A57E                  ;这个循环是检测和去掉这个符号“-”间隔符号
0054A5D4|.8D45 F8       lea   eax, dword ptr
0054A5D7|.8B55 F4       mov   edx, dword ptr          ;去掉符号后 的字符串:"1234561234561234"
0054A5DA|.E8 85A3EBFF   call    00404964
0054A5DF|.8D45 F4       lea   eax, dword ptr
0054A5E2|.E8 E5A2EBFF   call    004048CC
0054A5E7|.8B45 F8       mov   eax, dword ptr
0054A5EA|.E8 ADA5EBFF   call    00404B9C                         ;计算位数
0054A5EF|.83F8 10       cmp   eax, 10                        ;从这里我们看出,输入的假码要应该有3个“-”。哈哈
0054A5F2      0F85 19010000 jnz   0054A711                         ;这个10H害我想了好长时间。
0054A5F8|.33DB          xor   ebx, ebx
0054A5FA|>8BC3          /mov   eax, ebx
0054A5FC|.25 01000080   |and   eax, 80000001
0054A601|.79 05         |jns   short 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 0054A644
0054A60C|.8D45 DC       |lea   eax, dword ptr
0054A60F|.8BD3          |mov   edx, ebx
0054A611|.83C2 01       |add   edx, 1
0054A614|.71 05         |jno   short 0054A61B
0054A616|.E8 A193EBFF   |call    004039BC
0054A61B|>8B4D F8       |mov   ecx, dword ptr
0054A61E|.4A            |dec   edx
0054A61F|.85C9          |test    ecx, ecx
0054A621|.74 05         |je      short 0054A628
0054A623|.3B51 FC       |cmp   edx, dword ptr
0054A626|.72 05         |jb      short 0054A62D
0054A628|>E8 8793EBFF   |call    004039B4
0054A62D|>42            |inc   edx
0054A62E|.8A5411 FF   |mov   dl, byte ptr       ;取字符
0054A632|.E8 7DA4EBFF   |call    00404AB4
0054A637|.8B55 DC       |mov   edx, dword ptr
0054A63A|.8D45 F0       |lea   eax, dword ptr
0054A63D|.E8 62A5EBFF   |call    00404BA4
0054A642|.EB 36         |jmp   short 0054A67A
0054A644|>8D45 D8       |lea   eax, dword ptr
0054A647|.8BD3          |mov   edx, ebx
0054A649|.83C2 01       |add   edx, 1
0054A64C|.71 05         |jno   short 0054A653
0054A64E|.E8 6993EBFF   |call    004039BC
0054A653|>8B4D F8       |mov   ecx, dword ptr
0054A656|.4A            |dec   edx
0054A657|.85C9          |test    ecx, ecx
0054A659|.74 05         |je      short 0054A660
0054A65B|.3B51 FC       |cmp   edx, dword ptr
0054A65E|.72 05         |jb      short 0054A665
0054A660|>E8 4F93EBFF   |call    004039B4
0054A665|>42            |inc   edx
0054A666|.8A5411 FF   |mov   dl, byte ptr
0054A66A|.E8 45A4EBFF   |call    00404AB4
0054A66F|.8B55 D8       |mov   edx, dword ptr
0054A672|.8D45 F4       |lea   eax, dword ptr
0054A675|.E8 2AA5EBFF   |call    00404BA4
0054A67A|>43            |inc   ebx
0054A67B|.83FB 10       |cmp   ebx, 10
0054A67E|.^ 0F85 76FFFFFF \jnz   0054A5FA
0054A684|.8D45 FC       lea   eax, dword ptr
0054A687|.E8 40A2EBFF   call    004048CC
0054A68C|.33DB          xor   ebx, ebx
0054A68E|>8D45 D4       /lea   eax, dword ptr
0054A691|.BA 08000000   |mov   edx, 8
0054A696|.2BD3          |sub   edx, ebx
0054A698|.71 05         |jno   short 0054A69F
0054A69A|.E8 1D93EBFF   |call    004039BC
0054A69F|>8B4D F4       |mov   ecx, dword ptr           ;(ASCII "24624624")   上面循环过滤的结果
0054A6A2|.4A            |dec   edx
0054A6A3|.85C9          |test    ecx, ecx
0054A6A5|.74 05         |je      short 0054A6AC
0054A6A7|.3B51 FC       |cmp   edx, dword ptr
0054A6AA|.72 05         |jb      short 0054A6B1
0054A6AC|>E8 0393EBFF   |call    004039B4
0054A6B1|>42            |inc   edx
0054A6B2|.8A5411 FF   |mov   dl, byte ptr
0054A6B6|.E8 F9A3EBFF   |call    00404AB4
0054A6BB|.8B55 D4       |mov   edx, dword ptr
0054A6BE|.8D45 FC       |lea   eax, dword ptr
0054A6C1|.E8 DEA4EBFF   |call    00404BA4
0054A6C6|.43            |inc   ebx
0054A6C7|.83FB 08       |cmp   ebx, 8
0054A6CA|.^ 75 C2         \jnz   short 0054A68E                  ;这两个循环我觉得没必要跟进
0054A6CC|.8D55 D0       lea   edx, dword ptr
0054A6CF|.8B45 F0       mov   eax, dword ptr           ;"13513513"   上面循环过滤的结果
0054A6D2|.E8 3DB8FFFF   call    00545F14                         ;这个对得到上面的“13513513”,取它的MD5值
0054A6D7|.8B55 D0       mov   edx, dword ptr           ;“50DAACD1190706850135441B2FD23047”这个就是MD5值
0054A6DA|.8D45 F0       lea   eax, dword ptr
0054A6DD|.E8 82A2EBFF   call    00404964
0054A6E2|.8D4D CC       lea   ecx, dword ptr
0054A6E5|.BA 08000000   mov   edx, 8                           ;取8位数
0054A6EA|.8B45 F0       mov   eax, dword ptr
0054A6ED|.E8 AE3EEFFF   call    0043E5A0
0054A6F2|.8B55 CC       mov   edx, dword ptr           ;从上面的字符串后面取得 "2FD23047"
0054A6F5|.8D45 F0       lea   eax, dword ptr
0054A6F8|.E8 67A2EBFF   call    00404964                         ;翻转刚才的“24624624”
0054A6FD|.8B45 FC       mov   eax, dword ptr          ;"42642642"
0054A700|.8B55 F0       mov   edx, dword ptr           ;和"2FD23047"比较,相等的话就注册成功了。终于搞定
0054A703|.E8 E0A5EBFF   call    00404CE8                         ;这个就是比较函数了,经典啊
0054A708      75 05         jnz   short 0054A70F                   ;不等的话就没了
0054A70A|.83CE FF       or      esi, FFFFFFFF                  ;注册成功标志。
0054A70D|.EB 02         jmp   short 0054A711
0054A70F|>33F6          xor   esi, esi
0054A711|>33C0          xor   eax, eax



【破解总结】
------------------------------------------------------------------------
名:binbinbin
码:ACM-123456-123456-1234

要对照相应位置来讲。

1、采用了MD5算法。

2、首先,对输入的假码进行格式化,就是说,头三位要是“ACM”。然后就是检测分隔符“-”要有三个,具体位置好像没有限定的。再然后就

是把那些分隔符去掉。

3、去掉分隔符后,取得上面相应的“24624624”这些位数的位置的字符。

4、然后取出相应的“13513513”这些位数的位置的字符。然后对这个字符串取MD5值。得到“50DAACD1190706850135441B2FD23047”

5、先把输入的假码的“24624624”对应位置的字符倒过来,即是:“42642642”。然后取MD5值的最后8位:“2FD23047”和倒过来后的字符串

一一比较。相等就成功。


所以我们对应上面的输入信息可以得到相应真码:ACM-173450-13325D-1F32

收工。


录像在下面的U盘下载。

[ 本帖最后由 binbinbin 于 2006-11-22 18:17 编辑 ]

qq500com 发表于 2006-11-21 12:39:02

楼主,做个动画吧,算法我看不懂.
支持你!!!!!!!!!!!

binbinbin 发表于 2006-11-21 18:00:12

原帖由 qq500com 于 2006-11-21 12:39 发表
楼主,做个动画吧,算法我看不懂.
支持你!!!!!!!!!!!


哈??这样都看不懂啊。??那好吧,今晚我弄个动画出来,来我的网络U盘等着

ZHOU2X 发表于 2006-11-21 18:23:24

学习,收藏!!支持!!!!

qq500com 发表于 2006-11-21 21:20:40

收藏!!支持!!!!
页: [1]
查看完整版本: HTML to Image 2.0.2006.1001注册算法(含全程录像)