关于 P 社启动器的“无法验证 DLC 所有者”及其几种解决方案(以 Steam 版为例)
本帖最后由 sommio 于 2022-10-9 16:47 编辑首先,简单介绍一下 SteamworksSDK,这是一个由提供 Steam 的 API。P 社启动器及游戏本体通过调用它来进行数字版权管理,在 Windows 上它的二进制文件名称是 steam_api.dll(32 位)和 steam_api64.dll(64 位),在 Linux 上则统一为 libsteam_api.so。对于 CK2 之后的 P 社游戏,拥有两套 SteamworksSDK,其中一个位于游戏目录以供游戏程序(如 eu4.exe)调用,另外一个位于启动器目录 resources/app/dist/main/steam_api64.dll 以供启动器调用。这就是为什么补丁仅覆盖游戏目录会出现感叹号但是却不影响游戏内 DLC 激活原因,当然这个感叹号并非装饰性的它会影响需要跟 Steam 通讯的部分(例如多人游戏)
在此之后,简单介绍一下 DLC 破解补丁及游戏破解补丁的工作原理。首先从游戏破解补丁开始它的正确称呼为 SteamworksSDK 模拟器(emulator, emu),常见实现有 Ali213 和 FLT 以及被用的最多的 CODEX,它们的目的是为了完全模拟 SteamworksSDK 因此可以在真正脱离 Steam 的情况下运行游戏以及实现脱离 Steam 的多人游戏(当然,这需要自建服务器),因为不与 Steam 通讯所以用它们破解 DLC 是不可以获得成就的
(此处并没有更改启动器 distPlatform 键值)
关于 DLC 破解补丁,它与“破解补丁”的工作原理完全不同仅是为了劫持 BIsDlcInstalled 等用于 DLC 验证的相关函数让它们返回 True。常见的 CreamAPI 通过伪装成 steam_api64.dll 让游戏程序调用充当与 SteamworksSDK 之间的“代理”来劫持这些函数,在大多数配置好的整合包中文件由 steam_api64.dll 和 steam_api64_o.dll 以及配置文件 cream_api.ini 组成,其中 steam_api64.dll 为 CreamAPI 而 steam_api64_o.dll 为真正的 SteamworksSDK 前者无法脱离后者独立工作。对于 SmokeAPI,它设计用于伪装成系统动态链接库以注入代码(如 version.dll 和 d3dx9.dll) 来劫持相关函数,与双字节补丁的工作原理相同。用于 Linux 的解锁补丁通常不需要上述麻烦破事,直接配置 LD_PRELOAD 环境变量就可以注入代码
正文开始,首先是第一种方法:将游戏目录中 launcher-settings.json 文件内的 distPlatform 键值从 steam 改为 gog,因为 gog 是无 DRM 游戏平台所以启动器不会调用 SteamworksSDK 进行 DRM 验证。优点在于简便,缺点则是每个大小版本更新均会覆盖此文件以及无法正常多人游戏,推荐完全盗版玩家使用
第二种方法,用 DLC 解锁补丁或完全破解补丁劫持/覆盖启动器目录下的 SteamworksSDK。对于主流的 CreamAPI 整合包操作上是用 steam_api64.dll(对于整合包这个是 CreamAPI), steam_api64_o.dll(这才是真的 SteamworksSDK), creamapi.ini 覆盖启动器目录下的 resources/app/dist/main/steam_api64.dll,注意:此方法启动器自动更新后会把 CreamAPI 当作 SteamworksSDK 复制到新版本启动器目录下的resources/app/dist/main/steam_api64.dll 造成启动器自爆(重新覆盖一遍就好了)。
对于我在 Stellaris 板块发布的 SmokeAPI 整合包,则是把 msimg32.dll(伪动态链接库用于注入代码), SmokeAPI64.dll(SmokeAPI 本体), SmokeAPI.json(配置文件,主要是为了关闭日志,SmokeAPI 有默认配置可以不需要配置文件)复制到启动器目录而不需要覆盖 resources 文件夹及下面的 SteamworksSDK,整合包里面的 resources 仅用于给小白覆盖 CreamAPI,虽然使用 SmokeAPI 在启动器更新后不会自爆,但依然需要重新安装以解决感叹号问题,因为启动器自动更新并不会把 SmokeAPI 复制更新后的启动器文件夹。此类方法推荐正版本体玩家使用,因为启动器更新速度比游戏版本更新速度慢,以及可以保留多人游戏等需要 SteamworksSDK 的功能(根据我的测试,可用盗版 DLC 作为主机)
(此图中的例子为用 Goldberg “破解补丁(本体为 libsteam_api.so 配置文件在 steam_settings)”覆盖启动器目录 SteamworksSDK)
如果你想避免 P 社启动器自动更新,可以将 127.0.0.1 launcher.paradoxinteractive.com 添加至系统 hosts 文件(如 C:\Windows\System32\drivers\etc\hosts)以屏蔽更新
第三种方法,也是最完美的方法,仅适用于 Linux 玩家:使用 LD_PRELOAD 环境变量注入解锁补丁如 LibStellarKey。这种方法启动器更新后也不受任何影响,因为它可以不用在游戏目录和启动器目录放置任何文件用于“安装”
:lol等更新中 这不是刚发帖吗?也鸽了...{:4_182:} 感谢分享,谢谢大佬 JIADONG110 发表于 2022-10-5 20:20
这不是刚发帖吗?也鸽了...
@JIADONG110
@YUGG
瞎几把写好了,没啥重要的东西( 感谢大佬的分享 不影响我们玩游戏,感谢分享啊 感谢大佬的分享~! 感谢分享! 感谢楼主分享 感谢大佬!!!!!!!!! 感谢分享,谢谢大佬 感觉新的启动器问题不少 老的启动器好像就不怎么出这种问题 本帖最后由 sommio 于 2022-10-7 06:30 编辑
天草ひかり 发表于 2022-10-7 06:02
老的启动器好像就不怎么出这种问题
老启动器就调游戏目录的 SteamworksSDK 进行 DRM 验证,所以只要动游戏目录就好了。新启动器调启动器目录的 SteamworksSDK,所以得额外动启动器目录
现在 v2 启动器对于大部分国家的全正版用户没啥诸如无法识别本地 mod 之类的 bug 了
52难得的技术贴:victory: 后排强势围观大佬 感谢楼主分享 妙啊,谢谢大佬科普,虽不明,但觉厉 大佬为啥我按照那样做了paradox启动器检测没用mod了啊?
感谢楼主分享
感谢分享,谢谢大佬 感谢大佬分享!{:4_172:} 非常感谢大大的帖子,忙活了半天终于搞定了,赞!!!!!!
感谢LZ分享 呱呱呱呱呱 感谢大佬分享 感谢大佬分享 6666666666
感谢大佬分享 大神好专业,去StellarKey那个项目看了一眼,感觉不太明白,我就是linux在玩。另外大神帖子权限挺高,看不到文字后面的内容,只能先收藏日后再研究。我遇到问题是覆盖了dlc和dlc mata后,Charlemagne这个expansion打不开(其实早就买了这游戏,还有部分dlc,我以为我自己都买的7788了,开始玩才发现没买)检测到缺少expansion Charlemagne,搜来搜去也没有啥特别的解法
页:
[1]
2