Skip to main content

开发者更新 - 2024 年 10 月 3 日

欢迎来到 2024 年 10 月 3 日的开发者更新!

image.png

今天的封面 Magic AI-Art:维度 49 由 Niko* 制作。

我们的上一次开发者更新是在 9 月 19 日!错过了吗?来看看这里!

公告

Spookality 提交现已开放!

您必须在 10 月 14 日之前将您的哈人作品提交至今年的万圣节主题活动中!

查看我们的博客文章以了解有关今年主题和类别的更多信息。

请注意,除了虚拟形象分类 之外,今年还有两个独立的世界类别 - 请务必看看它们!

我们明天将会进行直播!

明天(10 月 4 日)下午 2 点(北京时间2024年10月5日凌晨5点00分),我们将在Twitch 频道直播,不要指望会有什么重大公告!我们主要会出去玩(摸鱼),体验贴纸和分享功能,并回答一些问题。

到时见!

Udon 代码签名

眼尖的你们可能已经在最新的 SDK 更新日志中发现了以下说明:

Added Udon Code Signing! 
- Any worlds uploaded with this SDK (or newer) receive a server-side signature. This helps ensure only authentic (unmodified) versions of your world can be loaded into VRChat.
- This makes it significantly harder for malicious players to cheat or bypass scripts in your worlds.
- Each platform (PC, Android, iOS) has a different signature, so you need to upgrade all of your world's platforms.

翻译:

新增Udon代码签名!
- 使用此 SDK(或更高版本)上传的任何世界都会收到服务器端签名。这有助于确保只有真实的(未修改的)世界版本才能加载到 VRChat 中。
- 这使得恶意玩家更难在您的世界中作弊或绕过脚本。
- 每个平台(PC、Android、iOS)都有不同的签名,因此您需要升级您世界的所有平台版本。

这条信息告诉了您需要了解的一切,但如果您想了解更多细节,请继续阅读!

请注意,出于安全原因,我们可能仍会跳过一些技术细节。

漏洞利用

我们在这里试图阻止什么攻击?在内部,我们称之为“Asset Bundle Cache Swap”模式,它已被恶意用户滥用,以注入自定义 Udon 脚本、绕过限制(包括为了创作者经济利益)并用于骚扰。

概括地说,它的工作原理是下载一个世界,然后修改存储在磁盘上的副本。此副本通常用于避免每次进入都重新下载世界。但是,恶意用户可以在从中加载数据之前根据自己的喜好修改此缓存 - 当然,仅限于本地,但这也足以导致滥用。

顺便说一句,由于没有任何修改 VRChat 本身内容的操作,因此这与 EAC 无关。

Unity 的内置防护

Unity 本身为缓存的资源提供 CRC 校验。不幸的是,这只是一个 32 位值,因此很容易被现代 PC 破解。直白点说是,它较少用于安全检查,而更多地用于识别数据损坏(“坏磁盘”)问题。尽管如此,自从3.7.2-beta.2到现在,我们现在也还是在使用这个 CRC 检查。

遗憾的是,由于 Unity 的 assetbundle 加载方式,利用更强的签名验证整个捆绑包变得非常困难。因此,我们迫切寻找可以验证 bundle 内容的方法(至少是重要的部分)。

代码签名

你的世界中的所有 Udon 脚本都会被编译成 Udon 汇编代码,它被存储为一个序列化的字节数组。换句话说,无论您的 Udon 来自何处(预制件、自定义 U#、节点图、CyanTrigger 等),上传的内容实际上只是一堆压缩的字节码。

当使用新的 SDK 完成上传时,我们会利用一些现代加密技术在这些字节数组上创建签名。由此生成一个签名密钥对,该密钥由签名密钥(可用于创建签名)和验证密钥(只能用于验证,但不能用于创建签名)组成。签名在上传时嵌入到世界中,而验证密钥存储在我们的 API 上。签名密钥可以被简单地丢弃。每次上传都会生成一个新的,倒也没什么问题,因为签名速度非常快。

将此视为某种批准流程:当您上传一个世界时,您的 PC 将处理您拥有的每一块Udon,然后将该印章的打印结果放在我们的 API 上。再然后,VRChat 可以检查每个脚本上的标记是否与打印结果匹配,但显然打印结果不能用于标记任何新脚本。

对于读者中的书呆子爱好者来说:我们根据每个单独的可签名元素的 SHA-512 哈希计算 ed25519 签名,并将其与数据本身一起序列化。顺便说一句,所有这些都是为了性能而在 Rust 中实现的。这样计算所有签名通常只需不到 10 毫秒,即使对于更大的世界也是如此!

当 VRChat 客户端现在加载一个世界时,它将同时看到验证密钥(不在缓存中)和所有签名,因此可以在加载时验证每个 Udon 程序。由于签名密钥已丢失,因此无法伪造这些签名。没有签名的脚本也将被视为错误,就此无法再注入恶意的 Udon 代码。

当脚本验证失败时,您将被送回家或进入错误世界。缓存的捆绑包也将被删除,因此下次您访问该世界时,它将重新下载它。这主要是为防在您实际遇到磁盘损坏之类的情况时触发验证失败。

顺便说一句,我们称这个库为 vrc_fast_crypto.dll(需要明确的是“密码学”),这让社区团队感到害怕,因为他们担心人们会看到它并认为我们正在偷搞“加密”(货币)。

完美的安全性?

与其他安全相关的更改一样,这并不完美。我们完全清楚这并不能涵盖我们所有的基础设施(尽管我们将让你们弄清楚缺少了什么)。然而,它确实为黑客增加了一个重大障碍。与往常一样,随着时间的推移,我们将继续努力加强我们的防御。

如果您想报告安全问题,或者认为您在我们的方法中发现了问题,您可以通过这个表单进行秘密报告。我们非常重视此类举报,并将与您一起解决问题。

持续开发

管理和隐藏徽章

您知道 VRChat 中目前有五个徽章吗?但目前,您只能在个人主页上看到用户获得的前三个徽章。

通过此次更新,拥有 3 个以上徽章的用户将拥有“查看全部”按钮,可查看其获得的所有徽章的画廊。在您自己的个人资料中,您可以转到徽章库以管理您的徽章。从库中,您最多可以选择三个徽章以在您的个人资料中展示。

查看您个人资料的人可以单击“查看全部(View All)”以查看徽章的完整列表。

请注意,您目前无法重新排列个人资料徽章,但这个功能应该会在以后推出。

隐藏徽章

如果您想完全隐藏徽章,您可以单击图库中的徽章,然后选择“隐藏徽章”,它将对其他人完全隐藏。

网络更新!

再次回到网络团队的更多更新!现在可在vrchat.com/home体验这些更新,包括:

  • 现在,在 Discord 或 Twitter 等平台上展示链接时,虚拟形象具有预览功能:

    image.png


  • 虚拟形象页面现在显示性能评级:

    image.png

  • 当前为 iOS 显示替身模型信息。

  • 修复了一个错误,该错误有时会错误地将您的朋友显示为离线在一起闲逛。

    • 我的意思是。。。这可能是真的,但我们保证我们无法知道这一点。
  • 贴纸(目前是 Open Beta 功能)现在可以从 Gallery 页面进行管理。

  • 您现在可以从群组页面拒绝忽略了其通知的群组邀请,而不是在以太中丢失。

  • 与即将推出的功能相关的几个修复。:眼睛:

  • 修复了导致 OAuth 登录页面(用于 Furality、VRChat Wiki 等)中断的错误。

模型替身生成器更新

正好赶上 Spookality,我们已经开始应用自动配置规则来分隔大型的常见额外部分,例如尾巴、耳朵、帽子、马尾辫、斗篷、角和鹿角!

模型替身生成器搜索骨架的层次结构(hierarchy),根据其词库对对象的名称进行模式匹配,并确保任何匹配的部分都足够大,值得分开。通过测试的部件将被视为已手动添加到 VRCImpostorSettings 脚本的 Extra Child Transforms 列表中。

(别担心,如果虚拟形象已经有 VRCImpostorSettings 脚本,我们将跳过此自动匹配行为并改用您的选择。

在模型替身中分离动画部分可以让它们跟随根在真实虚拟形象上的运动,从而使它们更具表现力。

(那应该会让你竖起耳朵,摇尾巴。

更重要的是,它帮助我们在最重要的部分保持视觉保真度。Pi 自愿提供他们的万圣节服装作为致敬,向我们展示为什么这很重要:

image.png

怪异!但并不是我们真正喜欢的那种恐怖。

如果您想要本次的修复,请在网站上删除并重新生成您认为会从此更新中受益的任何虚拟形象的替身。自动生成替身的功能正在火热测试中,但手动生成它们是跳到队伍前列并确保您在其他用户面前看起来最好的最快方法!

我们一直在努力使模型替身达到最佳状态,我们需要您的帮助!如果您遇到损坏或不能很好地代表原始模型的模型替身,请通过支持票证将虚拟形象 ID 发送给我们。

手部追踪更新

我们推出了 2 项新的手势追踪功能!

导航启动器(Quick Menu Openers)

为了解决某些 VR 流媒体应用程序使用与打开快捷菜单相同的手势打开 SteamVR 主控面板的冲突,我们引入了两种打开快捷菜单的新方法:

圆形钥匙开启器(Circle-Key Opener)

一个腕戴式虚拟可穿戴界面,当您将图标引导到圆形插槽中时,它会打开 Quick Menu。只需要一只手即可使用。

按钮(Push Button)

一种腕戴式虚拟可穿戴界面,当您用另一只手的食指按下按钮时,它会打开 Quick Menu。需要两只手操作。

操作菜单(Action Menu)

以前,使用手势跟踪时,操作菜单不可用。您现在可以通过观察右手掌,并将拇指和小指尖的顶部捏在一起来放置和打开它。它将向您显示放置位置的预览,并在您释放时将自身放置在该位置。

请参考下面的两个示例:

结论

现在就这样了!下一次更新将在两周后:10 月 17 日!届时见!