此领域的未来工作将在 Sakura Motion 组织下进行,起始于我们的核心重写:https://github.com/SakuraMotion/PurismCore。
日本語版:README_JA.md
此仓库包含一个简单的 Live2D 模型,它会崩溃任何尝试加载它的应用程序:一种拒绝服务攻击。如果你安装了 ImHex 十六进制编辑器,可以使用 src/moc3.hexpat 中的模式文件来检查和编辑 MOC3 文件。请注意,你需要将文件开头附近的 0x7FFFFFFF (FF FF FF 7F) 运行时空间偏移值改为一个合理的值(0),才能看到模式数据。或者,你也可以在 Settings 标签中启用 ShowRuntimeSpaceFields。
src/moc3.hexpat 应该能够查看所有 MOC3 文件。如果你发现它无法查看某个文件,请提交 issue,我们会进行调查。
包含的文件也可作为进一步研究和实验的模板。
发布这些文件是希望促使 Live2D 改进其安全实践。
目前只有一个广泛使用的 MOC3 读取器实现:Live2D Cubism Core。Cubism Core 是一个 C 语言库,它未对 MOC3 文件中包含的偏移量进行任何边界检查。因此,很容易在内存中读写超出 MOC3 数据边界的内存,并且几乎可以肯定可以通过这种方式执行任意代码。
到目前为止,我尚未找到仅使用 Cubism Core 实现代码执行的方法;但是,通过利用宿主程序(例如 Cubism Viewer、VTube Studio 等)的内存布局,仍有可能实现代码执行。
MOC3ingbird 模型(此仓库)的直接 ZIP 下载:点击此处。
如果你有 Live2D 的 Cubism Editor (and Viewer) 或其他任何能加载 Live2D 模型的软件,直接用其打开 exploit.moc3 文件即可。
对于 Live2D Cubism Editor 附带的查看器,你可以下载此仓库,然后将 exploit.moc3 拖入查看器。它会开始加载模型,并立即崩溃。
如果你在崩溃的应用程序上附加调试器,你应该会看到 EXCEPTION_ACCESS_VIOLATION 异常、SIGSEGV 或其他类似错误。当前的 PoC 将一个指向 moc3BaseAddress + sections.parts.runtimeSpace0 的指针写入值为 moc3BaseAddress + sections.parts.ids 的指针。
src/moc3.hexpat 模式支持所有 MOC3 文件。一些示例可在 https://live2d.com/en/download/sample-data/ 找到。请注意,这些示例的版权归 Live2D Inc. 所有,并可能带有额外限制。OpenL2D 项目开发者不负责确保本软件用户遵守任何第三方协议。
版权所有 © 2023 The OpenL2D Project Developers。保留所有权利。
此模型及所有相关文件均为自由软件,遵循 Freedom of Development Project 于 https://freedevproject.org/fdpl-1.0-us 发布的 Free Development Public License 1.0-US 条款。使用此仓库中的文件即表示接受此许可证。
此仓库中的任何文件均非源自任何 Live2D 软件的输出。所有权仅归 OpenL2D 项目开发者所有,其在分发这些文件方面不承担任何协议下的任何义务。
更明确地说:你可以自由使用包含的模型文件和模式文件来创建自己的 MOC3 读写器。没有任何许可证会限制你这样做。