飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 6288|回复: 5

[原创] PopCap.Seven.Seas.Deluxe 1.13 破解过程

[复制链接]
  • TA的每日心情
    无聊
    2024-1-15 22:57
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    发表于 2009-10-4 01:22:52 | 显示全部楼层 |阅读模式
    无聊下载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:[esi+5C]
    00425D4E                 3899 2C030000                  cmp byte ptr ds:[ecx+32C],bl
    00425D54                 75 41                          jnz short WinSS.00425D97             ; 强制跳过显示注册成功,但游戏的计数器还在继续,等计数器归零游戏就不能玩儿了,等于破解未成功。修改试用次数不是好方法,因为启动时候还有NAG延时,非常讨厌。
    00425D56                 385E 79                        cmp byte ptr ds:[esi+79],bl
    00425D59                 74 0C                          je short WinSS.00425D67
    00425D5B                 8D5424 44                      lea edx,dword ptr ss:[esp+44]
    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:[esi+74]
    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:[esp+44]
    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:[esp+44]
    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:[esp+44]
    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:[eax+40]           ; 真假码比较关键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:[ebp+8]         ; 注册名长度
    0042DFD2                 85C0                           test eax,eax
    0042DFD4                 0F86 A2000000                  jbe WinSS.0042E07C                   ; 检测
    。。。。。。
    0042DFEA                 8038 20                        cmp byte ptr ds:[eax],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:[esp+98]
    0042E256                 884424 13                      mov byte ptr ss:[esp+13],al          ; esp+13由al而来
    。。。。。。
    0042E310                 E8 EBAD0300                    call WinSS.00469100
    0042E315                 8B8C24 C0000000                mov ecx,dword ptr ss:[esp+C0]
    0042E31C                 8A4424 13                      mov al,byte ptr ss:[esp+13]          ; 标志位赋值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:[0],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:[ecx+C]
    00469704                 57                             push edi
    00469705                 8B7C24 0C                      mov edi,dword ptr ss:[esp+C]
    00469709                 3B77 0C                        cmp esi,dword ptr ds:[edi+C]
    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 编辑 ]
    Snap1.gif

    评分

    参与人数 1威望 +4 飘云币 +20 收起 理由
    MOV + 4 + 20 鼓励下 呵呵 以后加油

    查看全部评分

    PYG19周年生日快乐!
  • TA的每日心情
    慵懒
    2015-10-9 11:25
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2009-10-4 09:03:38 | 显示全部楼层
    写得非常详细,学习了
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2009-10-4 19:42:37 | 显示全部楼层
    我再给你个关键点 具体怎么断到的我都不记得了 反正是简单F12跟了下 就出来了

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

    另外 这个公司的东西我们都不这么搞了 有兴趣你看下我前两天发布的POPCAP的一款游戏的绿色版
    PYG19周年生日快乐!
  • TA的每日心情
    无聊
    2024-1-15 22:57
  • 签到天数: 3 天

    [LV.2]偶尔看看I

     楼主| 发表于 2009-10-4 19:46:34 | 显示全部楼层
    好的,N大。

    我再研究一下,深入研究才能有提高,我的路还有很远。。。
    PYG19周年生日快乐!
  • TA的每日心情
    奋斗
    昨天 12:20
  • 签到天数: 11 天

    [LV.3]偶尔看看II

    发表于 2024-12-30 15:26:21 | 显示全部楼层
    这几天在研究popcap的游戏,刚好看到这篇老文。楼主的思路是正确的,但有一个缺陷,游戏如果运行在从未安装过的机器上,程序读取不到注册表中“SevenSeas”这一项时,代码运行不到楼主修改的地方,仍然会提示没有注册,第2次运行游戏时才能变成已注册。要解决这个问题,还需要进一步修改。
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2025-1-4 11:15
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2025-1-4 11:27:12 | 显示全部楼层
    感谢分享过程,学习~~~~
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

    快速回复 返回顶部 返回列表