zaas 发表于 2009-10-4 01:22:52

PopCap.Seven.Seas.Deluxe 1.13 破解过程

无聊下载popcap的游戏玩儿,经验证【通杀所有PopCap游戏破解补丁】不适合popCAP的这款游戏。
折腾了一下午(水平不够啊),注册倒是成功了,可重启还要求注册。
郁闷的去看电视,不死心,睡觉前有翻了会儿PYG以前大师们的教学,搞定。

【软件介绍】:Seven Seas for Windows —锻炼脑力的海盗船之战,是儿童益智游戏。Seven seas—锻炼脑力的海盗船之战。你的船孤零零的飘荡茫茫大海上,四周突然冒出了许多海盗船,怎么办,身为船长的你,是投降还是战斗?!如果战斗,你的船上只有定向放射的炮弹,好了,决定好了,向海盗船开火。海面被等分为许多小四方格。战斗采用回合制,每条船每次只能移动一步,横、斜均可,但是炮弹并不是按你意愿的方向射击,鼠标放在你的船上会出现射击的两个炮弹,如果方向上有海盗船,点击自己的船就可以发射炸掉他们,但是你也失去了一次移动机会。海面上会出现一些旋涡,进去的话可以从另一个漩涡中出来,能够暂时躲开海盗船的追击。该游戏有一定的难度,适合爱动脑子的孩子及大人玩。Pop Cap Games系列游戏之一。
【下载地址】:http://downloads.popcap.com/www/ ... /SevenSeasSetup.exe
愉快中,遂写个过程聊表纪念,也避免后来人走弯路。。。

od载入老规矩查字符串下断;
00425D46               E8 255A0000                  call WinSS.0042B770                  ; 下断
00425D4B               8B4E 5C                        mov ecx,dword ptr ds:
00425D4E               3899 2C030000                  cmp byte ptr ds:,bl
00425D54               75 41                        jnz short WinSS.00425D97             ; 强制跳过显示注册成功,但游戏的计数器还在继续,等计数器归零游戏就不能玩儿了,等于破解未成功。修改试用次数不是好方法,因为启动时候还有NAG延时,非常讨厌。
00425D56               385E 79                        cmp byte ptr ds:,bl
00425D59               74 0C                        je short WinSS.00425D67
00425D5B               8D5424 44                      lea edx,dword ptr ss:
00425D5F               68 00674A00                  push WinSS.004A6700                  ; ASCII "You must register online to continue playing!"
00425D64               52                           push edx
00425D65               EB 3A                        jmp short WinSS.00425DA1
00425D67               8B46 74                        mov eax,dword ptr ds:
00425D6A               83F8 02                        cmp eax,2
00425D6D               7C 1C                        jl short WinSS.00425D8B
00425D6F               B9 0F000000                  mov ecx,0F
00425D74               8D5424 44                      lea edx,dword ptr ss:
00425D78               2BC8                           sub ecx,eax
00425D7A               51                           push ecx
00425D7B               68 EC664A00                  push WinSS.004A66EC                  ; ASCII "%d PLAYS REMAINING"
00425D80               52                           push edx
00425D81               E8 9C830300                  call WinSS.0045E122                  ; 显示还可以玩多少次
00425D86               83C4 0C                        add esp,0C
00425D89               EB 1E                        jmp short WinSS.00425DA9
00425D8B               8D4424 44                      lea eax,dword ptr ss:
00425D8F               68 D4664A00                  push WinSS.004A66D4                  ; ASCII "UNREGISTERED VERSION"
00425D94               50                           push eax
00425D95               EB 0A                        jmp short WinSS.00425DA1
00425D97               8D4C24 44                      lea ecx,dword ptr ss:
00425D9B               68 BC664A00                  push WinSS.004A66BC                  ; ASCII "THANKS FOR REGISTERING!"
00425DA0               51                           push ecx
00425DA1               E8 7C830300                  call WinSS.0045E122

改变方法,这次查找"The registration number you entered is not valid for that name.Make sure the name and registration number are entered correctly."
有两处。
00420EDA               E8 21B6FEFF                  call WinSS.0040C500
00420EDF               BF F0644A00                  mov edi,WinSS.004A64F0               ; ASCII "The registration number you entered is not valid for that name.Make sure the name and registration number are entered correctly."
00420EE4               83C9 FF                        or ecx,FFFFFFFF
。。。。。。
00420F06               8BC1                           mov eax,ecx
00420F08               BE F0644A00                  mov esi,WinSS.004A64F0               ; ASCII "The registration number you entered is not valid for that name.Make sure the name and registration number are entered correctly."
所以Ctrl+F9看看。
00421C73               E8 78A4FEFF                  call WinSS.0040C0F0                  ; 读注册名
。。。。。。
00421CA4               E8 47A4FEFF                  call WinSS.0040C0F0                  ; 读假码
。。。。。。
00421CBD               FF50 40                        call dword ptr ds:         ; 真假码比较关键Call
00421CC0               84C0                           test al,al                           ; 经典的标志位比较
00421CC2               75 0E                        jnz short WinSS.00421CD2             ; 关键跳转
00421CC4               8BCD                           mov ecx,ebp
经试验,修改关键跳转不成功,程序出错。只要修改标志位才行,修改test al,al 为mov al,1,注册成功,游戏次数到0也没问题,只不过。。。每次重新启动游戏都要注册一次。。。跟进关键call再看看!
0042DED0               6A FF                        push -1
。。。。。。
0042DFCF               8B45 08                        mov eax,dword ptr ss:         ; 注册名长度
0042DFD2               85C0                           test eax,eax
0042DFD4               0F86 A2000000                  jbe WinSS.0042E07C                   ; 检测
。。。。。。
0042DFEA               8038 20                        cmp byte ptr ds:,20             ; 有否空格检测
。。。。。。
0042E03F               3AC2                           cmp al,dl                            ; 比较是否大字符ascii>127
。。。。。。
0042E054               E8 CC160300                  call WinSS.0045F725                  ; 取注册名每位小写转大写
。。。。。。
0042E0AE               E8 3DE0FDFF                  call WinSS.0040C0F0                  ; 读软件名sevenseas
。。。。。。
0042E145               E8 DB150300                  call WinSS.0045F725                  ; 小写转大写
。。。。。。
0042E1D9               E8 C2650000                  call WinSS.004347A0                  ; 注册名+OA+SEVENSEAS
。。。。。。
0042E204               E8 77C30300                  call WinSS.0046A580
。。。。。。
0042E231               E8 AABF0300                  call WinSS.0046A1E0                  ;真假码计算比较
。。。。。。
0042E24A               E8 B1B40300                  call WinSS.00469700
0042E24F               8D8C24 98000000                lea ecx,dword ptr ss:
0042E256               884424 13                      mov byte ptr ss:,al          ; esp+13由al而来
。。。。。。
0042E310               E8 EBAD0300                  call WinSS.00469100
0042E315               8B8C24 C0000000                mov ecx,dword ptr ss:
0042E31C               8A4424 13                      mov al,byte ptr ss:          ; 标志位赋值esp+13
0042E320               5F                           pop edi
0042E321               5E                           pop esi
0042E322               5D                           pop ebp
0042E323               5B                           pop ebx
0042E324               64:890D 00000000               mov dword ptr fs:,ecx
0042E32B               81C4 BC000000                  add esp,0BC
0042E331               C2 0800                        retn 8
0042E256由于长度的问题不好修改,只好跟进上边的call看看。
00469700               56                           push esi
00469701               8B71 0C                        mov esi,dword ptr ds:
00469704               57                           push edi
00469705               8B7C24 0C                      mov edi,dword ptr ss:
00469709               3B77 0C                        cmp esi,dword ptr ds:
0046970C               74 07                        je short WinSS.00469715
0046970E               5F                           pop edi
0046970F               32C0                           xor al,al                        ; 标志位赋值
00469711               5E                           pop esi
00469712               C2 0400                        retn 4
很明显,修改xor al,al即可。仅仅修改这一处就可以跳过软件注册。
保存。测试通过。

[ 本帖最后由 zaas 于 2009-10-4 01:27 编辑 ]

老万 发表于 2009-10-4 09:03:38

写得非常详细,学习了

Nisy 发表于 2009-10-4 19:42:37

我再给你个关键点 具体怎么断到的我都不记得了 反正是简单F12跟了下 就出来了

搜索ASCII 然后拉到最上方的那串很明显的数串 剩下的你自己研究下

另外 这个公司的东西我们都不这么搞了 有兴趣你看下我前两天发布的POPCAP的一款游戏的绿色版

zaas 发表于 2009-10-4 19:46:34

好的,N大。

我再研究一下,深入研究才能有提高,我的路还有很远。。。

小仙人掌_Lucas 发表于 2024-12-30 15:26:21

这几天在研究popcap的游戏,刚好看到这篇老文。楼主的思路是正确的,但有一个缺陷,游戏如果运行在从未安装过的机器上,程序读取不到注册表中“SevenSeas”这一项时,代码运行不到楼主修改的地方,仍然会提示没有注册,第2次运行游戏时才能变成已注册。要解决这个问题,还需要进一步修改。

hizlin 发表于 2025-1-4 11:27:12

感谢分享过程,学习~~~~
页: [1]
查看完整版本: PopCap.Seven.Seas.Deluxe 1.13 破解过程