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

写于一个台风来临之际,只因太空虚无聊,想起有些新人要求我给点做硬盘版的要求,于是就有了这个小东东。