东方Project社区自动补丁系统
描述
简而言之,这是一个几乎通用的、易于扩展和定制的框架,用于在内存中修补Windows应用程序,专门用于翻译日语游戏。
它主要是为了促进东方Project游戏在东方补丁中心上的自动更新和多语言翻译而开发的,但理论上可以用于这些游戏的任何其他补丁,而无需通过该网站。
基础引擎的主要特点
-
简单地将主引擎和插件DLL注入到目标进程中。
-
完全传播到子进程。这允许与其他同样使用DLL注入的第三方补丁一起使用thcrap。(是的,这主要是为了vpatch而开发的。)
-
使用JSON作为所有补丁配置数据,使补丁本身在设计上开源。通过递归合并JSON对象,这给我们带来了...
-
补丁堆叠 - 同时应用任意数量的补丁,按优先级列表排序。通过运行配置支持基于通配符的某些补丁中文件的黑名单。
-
自动为使用Win32 ANSI函数的目标进程添加透明的Unicode文件名支持,无需使用AppLocale等程序。
-
补丁可以支持单个程序的多个构建和版本,通过SHA-256哈希和.EXE文件大小的组合来识别。
-
二进制修改用于对原始程序进行任意的内存修改(主要用于自定义汇编)。
-
断点可在原始代码的任何指令处调用自定义DLL函数。这些函数可以读取和修改当前的CPU寄存器状态。
-
多组顺序应用的二进制修改和断点,用于绕过EXE打包器和DRM方案。
-
文件断点用于将内存中的数据文件替换为补丁中的替代文件。
-
基于通配符的文件格式修补钩子在文件替换时调用 - 可以根据(可堆叠的!)JSON描述对数据文件应用补丁。
-
可选的Steam集成,适用于通过Steam提供但本身没有Steam集成的游戏。可以通过删除
steam_api.dll
来禁用。 -
...所有这些都不会对性能产生显著影响。☺
包含的模块
win32_utf8
:围绕我们需要的Win32 API调用的UTF-8包装库。这是一个独立项目,也可以(而且应该)在其他应用程序中自由使用。thcrap
:主要的补丁引擎。thcrap_loader
:一个命令行加载器,用于在新创建的进程上调用thcrap
的注入函数。thcrap_configure
:用于发现补丁、配置补丁堆栈和定位支持的游戏的GUI向导。thcrap_tsa
:一个thcrap插件,包含用于上海爱丽丝幻乐团STG引擎游戏的补丁钩子。thcrap_tasofro
:一个thcrap插件,包含用于Twilight Frontier的各种游戏的补丁钩子。thcrap_update
:包含补丁的更新功能、thcrap本身的数字签名自动更新,以及更新器GUI。可以安全删除thcrap_update.dll
以禁用所有在线功能。thcrap_bgmmod
:一个辅助库,用于处理原本未压缩的PCM音乐的非游戏特定BGM修改部分,如编解码器支持和循环点处理。目前静态链接到thcrap_tsa
中,因为这个模块目前是唯一支持BGM修改的模块,但已经拆分成一个单独的库,以便将来覆盖更多引擎。
构建
本仓库提供了一个现成的Visual Studio构建配置,涵盖了所有模块及其依赖项。要设置构建:
-
安装Visual Studio Community 2019。
- 构建thcrap_configure_v3需要Visual Studio 2019或更新版本。对于所有其他组件,Visual Studio Community 2017也可以工作
- 你也可以使用Visual Studio Community 2022。在安装过程中,确保安装v141和v141_xp工具集(v141_xp是带有Windows XP兼容性的Visual Studio 2017编译器,v141是v141_xp所需的)。
-
确保你已经与此仓库一起拉取了所有Git子模块:
git clone --recursive https://github.com/thpatch/thcrap.git
-
(可选)如果你的thcrap构建应能自动更新自身,你需要创建一个代码签名证书。为此,在此仓库的根目录(包含
thcrap.sln
的目录)的Visual Studio命令提示符(vcvarsall.bat
)上运行以下命令:makecert -n "CN=Your Name,E=yourmail@provider.net" -$ individual -a sha256 -len 4096 -r -cy authority -sky signature -pe -sv cert.pvk cert.cer pvk2pfx -pvk cert.pvk -spc cert.cer -pfx cert.pfx
cert.pfx
用于在构建过程中签名二进制文件,所以不要更改文件名。
然后,打开thcrap.sln
,从工具栏的下拉菜单(或配置管理器)中选择Debug或Release,并从主菜单运行生成 → 生成解决方案。
您也可以通过运行Visual Studio工具环境批处理文件(vcvarsall.bat
)从命令行进行构建,然后在thcrap目录中运行
msbuild /m /p:Configuration=Debug
或
msbuild /m /p:Configuration=Release
二进制文件将会生成在bin/
子目录中。
为自动更新签署发布存档
首先,使用OpenSSL将cert.pvk
转换为.pem文件,然后将此文件与scripts/release_sign.py
一起使用:
openssl rsa -inform pvk -in cert.pvk -outform pem -out cert.pem python release_sign.py -k cert.pem thcrap.zip
使用不同的编译器
推荐使用Visual Studio Community 2017进行构建,构建配置默认引用带有Windows XP支持的Visual Studio 2017平台工具集。但是,通过更改Base.props
中的<PlatformToolset>
值,该项目通常可以在Visual C++ 2010 Express之后的每个版本下构建。要查看系统上可用的所有平台工具集列表,请打开任何包含项目的属性
对话框,参考配置属性 → 常规 → 平台工具集下的下拉菜单。
目前不支持使用MinGW编译。在可预见的将来,这种情况不太可能改变,因为我们认为这没有太大价值。
依赖项
C/C++代码所需的所有第三方库都作为Git子模块包含在thcrap_external_dependencies子模块中,该子模块还包含预构建的DLL、.lib文件、导出定义和PDB。这些包括:
-
Jansson,除
win32_utf8
外的每个模块都需要。 -
libpng (>= 1.6.0),
thcrap_tsa
需要用于图像修补。 -
zlib,
thcrap_update
需要用于CRC32验证。不过libpng
无论如何都需要它。 -
thcrap_bgmmod
目前通过以下第三方库支持这些编解码器:
scripts
目录中的脚本是用Python 3编写的。其中一些需要此存储库中未包含的其他第三方库:
release_sign.py
需要PyCryptodome。repo_update.py
需要pathspec。可以通过pip
轻松安装。
许可证
除非另有说明,否则Touhou Community Reliant Patcher及所有附带模块均发布到公共领域。这意味着您可以对此代码做任何事情,甚至不需要署名。
话虽如此,我们确实很感谢您的署名。☺
支持者
喜欢我们的工作吗?在Open Collective上成为Touhou Patch Center的支持者,帮助我们决定thcrap未来开发的优先事项。
感谢所有支持者!