SPIR-V 字节码是否提供混淆?

plá*_*omo 2 opengl obfuscation glsl vulkan spir-v

对于逆向工程师来说,将图形调试器附加到 OpenGL 应用程序以提取着色器源代码是很简单的。我的理解是,另一方面,Vulkan 使用 SPIR-V 字节码,而不是将纯文本着色器传递给图形 API。

SPIR-V 字节码是否混淆了着色器源,或者反编译是否相当容易?

Nic*_*las 5

有一个完整的规范详细解释了每个 SPIR-V 操作码的行为。这有点混淆相反。但还有更多。

尽管是“汇编”,但 SPIR-V 保留了大量有关源程序的信息。它包含结构定义、带参数和返回类型的函数定义、循环和条件构造等。为 SPIR-V 编写反编译器并不困难。

SPIR-V 还可以选择包含注释各种 SPIR-V 定义的文本片段。这更像是编译为 SPIR-V 的环境函数,但输出的 SPIR-V 可以包含变量名称、结构名称等。如果您愿意,这些 OpName 装饰都可以轻松剔除。

但即使没有名字,所有重要的结构信息都在那里。因此,与原始 GLSL 相比,SPIR-V 的安全收益相当小。