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 发表
楼主,做个动画吧,算法我看不懂.
支持你!!!!!!!!!!!
哈??这样都看不懂啊。??那好吧,今晚我弄个动画出来,来我的网络U盘等着 学习,收藏!!支持!!!! 收藏!!支持!!!!
页:
[1]