假设一家公司在他们的应用程序中实现了一种新颖的着色器,并且他们想让它难以被窃取。但是,OpenGL 着色器以明文形式发送到 GPU,Vulkan 很容易接受 decompileable bytecode。 .是否有任何图形 API 具有非零级别的着色器混淆?
最佳答案
Does any graphics API have a non-zero level of shader obfuscation?
没有。这没有任何意义。着色器并不像成熟的应用程序那么复杂。着色器可能达到的复杂性有相当严格的限制以允许保持交互性。任何类型的混淆层,在深处,都只是一个奇怪的指令集,可以使用优化编译器/转译器轻松地去混淆。
一般规则是:如果它可以执行并产生可读的结果*,则可以对其进行去混淆处理。就这么简单。
此外,熟练的图形黑客将能够查看最终渲染和/或中间结果(可以使用 renderdoc 等工具轻松获得)并从中找出着色器的要点。哎呀,90% 的图形编码都包含这种视觉输出调试,当您试图弄清楚为什么以及如何您的着色器不符合您的要求时,以及您在屏幕上看到的困惑是如何首先发生的。因此,任何有经验的图形黑客都已经掌握了通过“查看”着色器进行逆向工程所需的大部分技能。
* 如果不是“可读结果”的约束,那么 Homomorphic Encryption可能允许真正的代码混淆。但是您通常希望着色器的输出可供人类阅读。
关于opengl - 是否有任何图形 API 实现着色器混淆?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39311606/