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

标签 opengl glsl obfuscation vulkan spir-v

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

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

最佳答案

有一个entire specification详细解释每个 SPIR-V 操作码的行为。这有点与混淆相反。但事情远不止这些。

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

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

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

关于opengl - SPIR-V 字节码是否提供混淆?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39279546/

相关文章:

opengl - GL_CULL_FACE 使所有物体消失

c - 使用 VBO 绘制 .obj

c++ - 如何在 OpenGL 中为 std430 布局正确填充和对齐数据

performance - 在 OpenGL 中为单个对象使用显示列表有什么问题吗?

opengl - GLSL 曲面分割置换贴图

android - android应用程序中的proguard

java - 简短的、不区分大小写的字符串混淆策略

java - 迄今为止最好的 Java 反混淆工具 - [问题已关闭]

math - OpenGL 数学 - 将屏幕空间投影到世界空间坐标

iphone - 在 iPhone 上使用 Alpha channel 捕获 EAGLview 内容