吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 535|回复: 6
上一主题 下一主题
收起左侧

[原创] RA2/YR原版CD反盗版验证原理简介

[复制链接]
跳转到指定楼层
楼主
伤心的笔 发表于 2026-10-14 20:01 回帖奖励
本帖最后由 伤心的笔 于 2026-10-14 20:18 编辑

本来应该是一年前找个时间整理出来的,懒癌发作,拖到 CnCNet YR切换到了Ares+Phobos,拖到了 AI 逆向几乎成熟的时间点了。还是发出来吧,或许对想了解一点原理的人有点用。

一、问题背景

CnCNet YR 在设计上是需要兼容(官方的表述是:只考虑)正版用户的。CnCNet YR 有一个战役启动需求,在 CnCNet YR 切换到 Ares + Phobos 之前,此时唯一的办法就是把原游戏进程启动起来。我们知道,一共有四种正版红警2:原版CD、命令与征服十周年、EA Origin、Steam。前三者都可以通过直接运行ra2.exe/ra2md.exe这两个launcher启动游戏,而Steam版采用了蹩脚的Steam stub,要想做到无论Steam是否启动,都能稳定地启动游戏,需要运行 game.exe/gamemd.exe启动游戏,而非Steam版的game.exe/gamemd.exe是没有做这项修改的,直接运行game.exe/gamemd.exe进程会立刻退出。那么,如何让客户端准确判断要调用哪个exe呢?CnCNet YR之前的做法是直接比较已知版本的文件大小和SHA1哈希值,这显然不是个好做法。 一个更好的做法是,搞懂launcher到底做了什么操作,然后将launcher的关键逻辑重新实现,做到在不patch 原版CD的game.exe/gamemd.exe的前提下,依然能够成功启动所有四种正版游戏(顺便兼容盗版)。这里面,兼容原版CD的难度是最大的。



二、原版游戏的反盗版逻辑

其实这部分内容属于二十多年前的人就已经搞明白的事情,至少最初做盗版的MYTH大神是肯定搞懂了的。但是,时间久远,资料也很难找了。好在,此时是2025年,我们从头再做一遍也不费事。

我相信对文件有洁癖的人来说,可能思考过下面的问题:

  • gamemd.exe和YURI.exe区别是什么?我应该用哪一个?
  • 00000409.016和00000409.256是两个图像文件,被用在了哪里?可以删除吗?尤其是考虑到,只安装RA2时,对应图像是RA2图像,而安装 YR 后这两个文件就直接替换成了 YR 图像,原本的RA2图像则不再出现。
  • drvmgt.dll 和 secdrv.sys 是做什么的?是否能直接删除?
  • Conquer.dat和ConquerMD.dat这两个二进制文件的内容是什么意思?为什么删除后就打不开游戏了?
  • RA2.lcf、ra2md.lcf、yuri.lcf文件是做什么的?
  • 注册表里红警2的Serial那一串数字代表了什么?是随机生成的吗?

这里,我们从简单到困难开始,一步步解释。


2.1 SafeDisc反盗版方案


与之相关的资源:Ra2.exe、YURI.exe、drvmgt.dll、secdrv.sys、00000409.016、00000409.256。

我们先看两张截图:


图:有00000409.016、00000409.256的情况下,运行Ra2.exe/YURI.exe时的启动横幅界面。



图:无00000409.016、00000409.256的情况下,运行Ra2.exe/YURI.exe时不显示启动横幅。


很好理解。Ra2.exe/YURI.exe是带有SafeDisc保护的,而drvmgt.dll、secdrv.sys是SafeDisc相关的库文件。程序会首先把启动横幅显示出来,趁这个时间检测你是否插入了正版游戏CD,如果成立,那么执行真正的launcher逻辑,否则,弹出如图所示的对话框,不允许你启动游戏——是的,如果你是一个正版CD玩家,除非你硬要卡timing把光盘弹出来,否则你是看不到如下所示的界面的。


图:惊不惊喜,意不意外?游戏内的光盘检查理论上只是个备用手段,SafeDisc应该先于游戏本身把没有插入CD的玩家拦下来的。

不知道出于何种目的,Westwood 在发布YR时,将未加SafeDisc壳的ra2md.exe包含在了游戏中。ra2md.exe和YURI.exe的关系是,YURI.exe给ra2md.exe套了一层SafeDisc,从玩家观感上来说,YURI.exe多了个启动横幅和CD检查。

而Ra2.exe则是套了SafeDisc的,Westwood 并没有提供未套壳的版本。讽刺的是,因为盗版游戏一定会把Ra2.exe脱壳,将其从800多KB精简到了100 KB左右,而YURI.exe要么没有脱壳要么脱壳了但没有做大小精简,导致现在的杀毒软件会放过原版CD的YURI.exe,但不会放过Ra2.exe。



图:杀毒软件会把原版Ra2.exe当作病毒处理

脱壳可以使用UnSafeDisc + Safedisc2Cleaner实现。在如今的Windows 10/11系统上,可以使用这个修改版:https://github.com/nckstwrt/SafeDiscLoader/tree/4d1dc33e6e63a4ddca77bbcfa44a7ff98180e064/UnSafeDisc%20and%20SafeDisc2Cleaner



2.2 launcher 和游戏主进程的第一部分交互逻辑——加锁

这部分逻辑是大家比较容易意识到的。通过反汇编 ra2md.exe (或脱壳后的Ra2.exe、YURI.exe,下面就用 ra2md.exe 叙述了),我们容易知道,程序会创建一个 id 是 "48BC11BD-C4D7-466b-8A31-C6ABBAD47B3E" 的 Mutex,然后创建一个 id 是 "D6E7FC97-64F9-4d28-B52C-754EDF721C6F" 的 Event,随后立即启动 gamemd.exe。gamemd.exe 看到 Mutex 后才会继续启动游戏,同时给对应的 Event 发送一个信号,告诉 launcher 启动结果。否则,gamemd.exe 会立刻退出。Steam 版 game(md).exe 之所以可以直接双击启动,就是因为把这部分逻辑跳过了——没办法,EA也没有源代码了,正版也要按盗版的办法来做。

因此,我看到其他人的 launcher 实现中,或多或少也实现了这部分逻辑,成功达到了启动 game(md).exe的目的。然而,这样的 launcher 只能搭配破解后的 game(md).exe。如果你用的是未破解的 game(md).exe,你会体会到遭遇战开始后一段时间,你的部队自爆。


2.3 launcher 和游戏主进程的第二部分交互逻辑——“自爆补丁”



与之相关的资源:Conquer.dat、ConquerMD.dat、注册表、硬盘分区序列号。


红警2、将军中都存在这个机制。在 game(md).exe 中,自爆相关的判断是一定要重写的,这是几乎所有免CD——无论是盗版、Phobos还是十周年/Origin/Steam正版都要做的事情。但是,别忘了我们的目的是给CnCNet YR提供launcher解决方案,必须要兼容正版CD玩家,这部分玩家的game(md).exe是没有patch过的,相关的自爆逻辑存在,launcher必须要提供正确的值。那么,正版CD是怎么做的呢?
这里,我们要用到2025年初时,逻辑推理能力较强、还没有大幅限制思考深度的 AI——Grok,去逆向一下ra2md.exe。当时的Grok,在思考密码学问题方面还能做到毫不吝啬,用了整整七分钟的时间,对IDA的Hex rays逆向结果给出了准确判断——ra2md.exe里存在一份Blowfish算法实现。没错,没有调用Blowfish.dll,又实现了一份。


这里的协议是:

(1) launcher从注册表中读取红警2的InstallPath、Serial,从注册表中读取Windows系统的ProductID。取InstallPath所在盘符的文件系统序列号。将这些信息按字符串进行拼接,作为Blowfish解密的密钥。

(2) launcher读取Conquer(md).dat文件,作为Blowfish的密文。

(3) launcher 用第一步中的密钥,解密密文。把解密后的字符串通过 CreateFileMapping传递给 game(md).exe。
(4) game.exe 判断字符串是否等于 "(c) 2000 Electronic Arts, Inc. All Rights Reserved",gamemd.exe 判断字符串是否等于 "UIDATA,3DDATA,MAPS\0",注意此处有个0号字符,这个字符不是字符串终止符的意思。


因此,我们可以在launcher中实现相同的逻辑,以支持正版CD启动。我们也可以让launcher跳过解密阶段,直接向game(md).exe提供正确的字符串,同样可以避免自爆。
如此,我们成功实现了对正版CD玩家的兼容。因为这些玩家的game(md).exe是未破解过的,他们对战时仍然需要确保光驱内有正版CD,但我们的launcher终于可以保证游戏正常启动且不自爆了。


这里我给出逆向出来的launcher逻辑的C#版本,可读性比较高:

https://github.com/SadPencil/Ra2md-Launcher-CSharp/blob/master/Ra2MdLauncherCSharp/Program.cs

三、重新回答开头的问题

- gamemd.exe和YURI.exe区别是什么?我应该用哪一个?


答:YURI.exe 是加了SafeDisc壳的gamemd.exe。建议重新脱壳Ra2.exe和YURI.exe,你也可以把YURI.exe删掉。


- 00000409.016和00000409.256是两个图像文件,被用在了哪里?可以删除吗?尤其是考虑到,只安装RA2时,对应图像是RA2图像,而安装 YR 后这两个文件就直接替换成了 YR 图像,原本的RA2图像则不再出现。


答:应该删除。只有SafeDisc才会用到这两个文件。


- drvmgt.dll 和 secdrv.sys 是做什么的?是否能直接删除?


答:应该删除。只有SafeDisc才会用到这两个文件。


- Conquer.dat和ConquerMD.dat这两个二进制文件的内容是什么意思?为什么删除后就打不开游戏了?


答:这两个文件是游戏自爆判断字符串经Blowfish加密后的密文。针对常见的patch后的game(md).exe,你可以将文件内容用0全部填充,或者填充任意你想要的数据。如果你想删掉这两个dat文件,要么换掉launcher,要么你对launcher做patch,让launcher不读这两个dat文件,直接向game(md).exe报告正确的字符串。


- RA2.lcf、ra2md.lcf、yuri.lcf文件是做什么的?


答:launcher 本身的程序逻辑会去取同名的lcf文件以读取相关配置信息。如果你用了C# 重写的这个launcher,这几个文件是不需要的,否则请保留。

- 注册表里红警2的Serial那一串数字代表了什么?是随机生成的吗?

答:这是Blowfish加密的密钥的一部分,是CD安装程序随机生成的。如果你是正版CD的受害者,请不要修改Serial、移动红警2到其他分区、格式化红警2所在分区,否则需要重新从CD安装一次红警2。当然,我也不觉得依然使用未破解的game(md).exe有什么价值,你还要插CD。CnCNet YR兼容这种情况是因为必须要兼容所有正版玩家,玩家自己就不要折磨自己了。


- 我了解原理了。是否有可能写出一个新版算号器,使得在不改变Conquer(md).dat内容的情况下,计算出正确的Serial?


答:不能。我们可以根据Serial等信息重新生成Conquer(md).dat文件,以通过未patch过的正版game(md).exe的自爆验证,但反过来不行——这叫已知明文攻击,其难度是巨大的。如果你做出来了,凭相关论文当个教授应该问题不大。

免费评分

参与人数 4威望 +1 吾爱币 +23 热心值 +4 收起 理由
lclp1314 + 1 + 1 谢谢@Thanks!
ioyr5995 + 1 + 1 热心回复!
jamesKind + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
Hmily + 1 + 20 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!

查看全部评分

发帖前要善用【论坛搜索】功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

推荐
 楼主| 伤心的笔 发表于 2026-10-15 18:23 |楼主
本帖最后由 伤心的笔 于 2026-10-15 18:41 编辑
Hmily 发表于 2026-10-15 11:27
这个原版哪里能下到,我机器上好像还是当年网吧拷的,貌似就是一个第三方写的launcher。

原版CD在archive.org上能下到,我手里也有存着,英文版的和繁中版的都有。

你机器上的应该不是第三方写的launcher(我的意思是不具备红警launcher应该有的功能),而是破解的人直接把game(md).exe的跟launcher通讯的部分全砍了,这样他的广告launcher只需要直接启动game(md).exe就行,编写难度和本贴这个还原原launcher行为的完全不是一个难度

我做的安装包(所有文件保证取自原版CD,英文和繁中语言包是CD的,另有CnCNet YR版简体汉化):
通过网盘分享的文件:RA2Setup
链接: https://pan.baidu.com/s/1FAP9v_eCd2GbhoDC6TPzEQ?pwd=ztwd 提取码: ztwd

如果想要CD镜像的话回复我一下(大多数人应该不需要这个,原版CD得需要XP虚拟机才能安装,收藏可以)

免费评分

参与人数 2吾爱币 +1 热心值 +2 收起 理由
lqh0536 + 1 谢谢@Thanks!
Hmily + 1 + 1 用心讨论,共获提升!

查看全部评分

推荐
jamesKind 发表于 2026-10-15 14:49
2026年了还能看到关注红警的 现在没事还看看08的视频,但已经玩不动了
沙发
Hmily 发表于 2026-10-15 11:27
这个原版哪里能下到,我机器上好像还是当年网吧拷的,貌似就是一个第三方写的launcher。
4#
xixicoco 发表于 2026-10-15 15:58
这玩意有年头了,现在要找个光盘不容易啊
6#
lequsshow 发表于 2026-10-16 09:55
还能看到这个游戏,可见当时风靡的程度
7#
xiulisan 发表于 2026-10-16 10:52
能编译成64位的吗?兼容win10
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - 52pojie.cn ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2026-10-16 11:34

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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