Sango.PowerBall.Chinese.Big5 免光盘制作
日期:2005年8月6日 破解人:XF[BCG][CCG][DCM]
-------------------------------------------------------------------------------------------------------------------------
『软件名称』:Sango.PowerBall.Chinese.Big5
『软件大小』:光盘版(650MB)
『下载地址』:^_*
『软件介绍』:一个类ZUMA的游戏,台湾做的,不知道为什么它就能做得这么大?
『保护方式』:必须插入光盘,否则不能运行。
『破解声明』:仅供对新手如何制作硬盘版游戏提供学习和研究之用,失误之处敬请诸位大侠赐教!
『破解工具』:W32dsm8.93、HIEW6.81
『破解过程』:
原程序Ball.exe,无壳,直接用W32dsm8.93,查找关键字符串“GetDriveTypeA”来到:
-------------------------------------------------------------------------------------------------------------------
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0040B7B5(C)
|
:0040B7E5 0FBE0DE8724200 movsx ecx, byte ptr [004272E8] //取出内存中一个字节,我用的光盘是Z盘,这里是 Z
:0040B7EC 51 push ecx //压入堆栈
:0040B7ED 8D542434 lea edx, dword ptr [esp+34]
* Possible StringData Ref from Data Obj ->"%c:\" //取出变量值 %c:\,%c是用来被取代的变量
|
:0040B7F1 6890744200 push 00427490
:0040B7F6 52 push edx
:0040B7F7 E815040100 call 0041BC11 //取代变量 %c:\ -> Z:\
:0040B7FC 83C40C add esp, 0000000C
:0040B7FF 8D442430 lea eax, dword ptr [esp+30]
:0040B803 50 push eax
* Reference To: KERNEL32.GetDriveTypeA, Ord:0104h
|
:0040B804 FF154C504200 Call dword ptr [0042504C] //判断Z:是不是光盘
:0040B80A 83F805 cmp eax, 00000005 //如果是光盘,那么返回值就是5,硬盘则为4
:0040B80D 7420 je 0040B82F //是光盘就跳,否则弹出插入光盘的提示
:0040B80F 8B0DC8B64200 mov ecx, dword ptr [0042B6C8]
:0040B815 6A00 push 00000000
:0040B817 6A00 push 00000000
:0040B819 6A10 push 00000010
:0040B81B 51 push ecx
……以下代码省略…………
分析完了后就开始动手了,首先分析一下[004272E8]这里的Z的来源,是从注册表呢,还是从设置文件里来的呢?
--------------------------------------------------------------------------------------------------------------------
* Possible StringData Ref from Data Obj ->"TRUETECH.CFG"
|
:0040B7B7 68EC734200 push 004273EC
:0040B7BC 6A05 push 00000005
:0040B7BE E8FD740000 call 00412CC0
:0040B7C3 A1C8B64200 mov eax, dword ptr [0042B6C8]
:0040B7C8 83C408 add esp, 00000008
:0040B7CB 6A00 push 00000000
:0040B7CD 6A00 push 00000000
:0040B7CF 6A10 push 00000010
:0040B7D1 50 push eax
* Reference To: USER32.PostMessageA, Ord:01DEh
|
:0040B7D2 FF1574514200 Call dword ptr [00425174]
:0040B7D8 5F pop edi
:0040B7D9 5E pop esi
:0040B7DA 5D pop ebp
:0040B7DB 33C0 xor eax, eax
:0040B7DD 5B pop ebx
:0040B7DE 81C43C030000 add esp, 0000033C
:0040B7E4 C3 ret
……以下代码省略…………
上面就有一个TRUETECH.CFG,这个好象是设置文件吧,用HIEW看看,果然,第一个开始的三个字节就是Z:\,直接用HIEW改为:.\,还有一个字节怎么办,就直接改为16进制的00吧。
接下来,要改00427490这个里了。我们同样用HIEW将Ball.exe里的427490处的%c:\改为.\后面的用两个16进制的00写入。
最后,将0040B80D 7420改为EB20,这样不管判断为什么我们都可以进入游戏了。^-^
测试了一下,弹出".\Anim\MOVIE.DAT"文件不存在的提示,将光盘上的全部目录都复制到硬盘上,拿掉光盘,点击运行,OK!
至此,破解完成,修改两个文件,共8个字节,硬盘版制作成功!
『总结』:
一般来说:KERNEL32.dll里的函数GetDriveTypeA是此类程序的关键。
GetDriveTypeA说明:
判断一个磁盘驱动器的类型
返回值
Long,如驱动器不能识别,则返回零。
有很多朋友都问我如何做免光盘版,看了以上的内容,相信聪明的你一定会举一反三,做出自己的免光盘补丁了吧。^_*
<完>
感谢你看完这篇入门级的小东东。
顺便BS一下太阳猴,这个小子将偶以前的ID给注册了...
也顺便感谢BCG的Xy2000,CCG的SB,DCM的K头...等等这些好友(排名不分前后)。
-------------------------------------------------------------------------------------------------------------------------
有一种感觉总在失眠时,才承认是相思
有一种缘分总在梦醒后,才相信是永恒
有一种目光总在分手时,才看见是眷恋
有一种心情总在离别后,才明白是失落
-------------------------------------------------------------------------------------------------------------------------
XF[BCG][CCG][DCM]
2005.8.6
写于一个台风来临之际,只因太空虚无聊,想起有些新人要求我给点做硬盘版的要求,于是就有了这个小东东。