-
-
星空电影院6.01简单算法分析
-
发表于:
2005-4-22 02:39
9130
-
软件下载地址:http://vvvvv.cn/zhencui/xkdy.htm
软件大小: 2457 KB
软件语言: 中文
软件类别: 共享版
应用平台: windows
【软件简介】:
是娱乐所属在线软件,包罗了全国和海外引进的3000多部动画片、电影、港台、大陆、日韩 、欧美电影,并设为独特的秘密观看区,足以使您一饱眼福。1000M光纤接入,IBM专业服务器组,提供在线观看使您即刻体验极速的全方位视觉感受。关于软件的更多特色介绍,速度快质量高的精彩视频,专人实时跟踪更新升级,本软件具有自动升级功能。 通过独特的合作资源,提供超过400套超高清晰的卫星电视节目,高速HBO大片,BBC新闻,日本MM、港台凤凰、华娱、星空、TVB系列,国内中央及各省卫星电视节目。
【软件限制】:功能限制
【作者声明】:初学Crack,只是感兴趣,没有其它目的。失误之处敬请诸位大侠赐教!
【破解工具】:Ollydbg,W32DASM
------------------------------------------
【过 程】
用PEID查壳,发现是用DELPHI写的,没有加壳的,呵呵~~作者真是好人,关照像我这样的菜鸟。
运行软件输入试练码看看出错提示,然后用W32dasm反汇编找到出错提示的地方,汇编代码如下:
:004E0E72 741E je 004E0E92
:004E0E74 8D55EC lea edx, dword ptr [ebp-14]
:004E0E77 8B45FC mov eax, dword ptr [ebp-04]
:004E0E7A 8B8038030000 mov eax, dword ptr [eax+00000338]
:004E0E80 E84765F6FF call 004473CC
:004E0E85 8B45EC mov eax, dword ptr [ebp-14]
:004E0E88 E80736F2FF call 00404494
:004E0E8D 83F808 cmp eax, 00000008 //判断输入注册码的注册码位数是否小于等于8位,大于就无效
:004E0E90 7E0F jle 004E0EA1
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004E0E72(C)
|
* Possible StringData Ref from Code Obj ->" 您输入的注册码无效,请重新输入。"
|
:004E0E92 B8B8104E00 mov eax, 004E10B8
:004E0E97 E8D0FCF4FF call 00430B6C
:004E0E9C E9A4010000 jmp 004E1045
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004E0E90(C)
|
:004E0EA1 8D45E4 lea eax, dword ptr [ebp-1C] //如果不大于8位就跳到这来,以下为注册码验证的地方
//可以用OD载入后在这个地方下断点,跟踪下面一段看看
:004E0EA4 50 push eax //按热键CTRL+G,然后输入4E0EA1就可以到达这个地方了
:004E0EA5 8D55E0 lea edx, dword ptr [ebp-20]
:004E0EA8 8B45FC mov eax, dword ptr [ebp-04]
:004E0EAB 8B803C030000 mov eax, dword ptr [eax+0000033C]
:004E0EB1 E81665F6FF call 004473CC
:004E0EB6 8B45E0 mov eax, dword ptr [ebp-20] //跟踪时发现机器码在这里出现了,传入EAX,EAX=
:004E0EB9 B906000000 mov ecx, 00000006 //嘿嘿,这个6有用,传用ECX准备下一步动作,看下面就明白了
:004E0EBE BA01000000 mov edx, 00000001
:004E0EC3 E82C38F2FF call 004046F4 //此CALL的作用是取得机器码的前6位,知道上面那个6的用处了吧
:004E0EC8 8B4DE4 mov ecx, dword ptr [ebp-1C] //将取得的机器码前6位传入ECX
:004E0ECB 8D45E8 lea eax, dword ptr [ebp-18]
:004E0ECE BAE4104E00 mov edx, 004E10E4
:004E0ED3 E80836F2FF call 004044E0
:004E0ED8 8B45E8 mov eax, dword ptr [ebp-18]
:004E0EDB E8507EF2FF call 00408D30
:004E0EE0 8BF0 mov esi, eax //将机器码前6位的字符串转换成16进制后存放在ESI中
:004E0EE2 33C0 xor eax, eax //清空
:004E0EE4 55 push ebp
:004E0EE5 68FC0F4E00 push 004E0FFC
:004E0EEA 64FF30 push dword ptr fs:[eax]
:004E0EED 648920 mov dword ptr fs:[eax], esp
:004E0EF0 8D55DC lea edx, dword ptr [ebp-24]
:004E0EF3 8B45FC mov eax, dword ptr [ebp-04]
:004E0EF6 8B8038030000 mov eax, dword ptr [eax+00000338]
:004E0EFC E8CB64F6FF call 004473CC
:004E0F01 8B45DC mov eax, dword ptr [ebp-24] //试练码(你输入的假注册码)出现,将其传入EAX
:004E0F04 E8277EF2FF call 00408D30 //此CALL的作用是将试练码转换成16进制
:004E0F09 8BD8 mov ebx, eax //转换后传入EBX
:004E0F0B 8BC3 mov eax, ebx //????又放回EAX,不知道搞什么
:004E0F0D 2BC6 sub eax, esi //EAX=EAX-ESI
:004E0F0F 3B05D4CA5700 cmp eax, dword ptr [0057CAD4] //比较EAX与dword ptr [0057CAD4]中的值是否一样。
//dword ptr [0057CAD4]里存放着一个常量,调试时
//可以看见常量值是1B669
:004E0F15 7438 je 004E0F4F //EAX是否等于1B669,不相等就OVER了
* Possible StringData Ref from Code Obj ->" 您输入的注册码 "
|
:004E0F17 68F0104E00 push 004E10F0
:004E0F1C 8D55D4 lea edx, dword ptr [ebp-2C]
:004E0F1F 8B45FC mov eax, dword ptr [ebp-04]
:004E0F22 8B8038030000 mov eax, dword ptr [eax+00000338]
:004E0F28 E89F64F6FF call 004473CC
:004E0F2D FF75D4 push [ebp-2C]
* Possible StringData Ref from Code Obj ->" 不正确,请与作者联系。"
|
:004E0F30 680C114E00 push 004E110C
:004E0F35 8D45D8 lea eax, dword ptr [ebp-28]
:004E0F38 BA03000000 mov edx, 00000003
:004E0F3D E81236F2FF call 00404554
:004E0F42 8B45D8 mov eax, dword ptr [ebp-28]
:004E0F45 E822FCF4FF call 00430B6C
:004E0F4A E9A3000000 jmp 004E0FF2
-------------------------------------------------------------------------
总结:
从上面的分析可以知道这个算法很简单就是:注册码的十六进制=机器码前6位的十六进制+1B669
注册码就是机器码前6位的十六进制+1B669然后化成10进制
很久没有玩破解,都不会使用这些调试工具了,呵呵~~不过还好,竟然遇上这个算法简单的软件,以是写成一篇文章以供初学者学习
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)