运送PDB文件是否使.net中的混淆无效?

时间:2011-08-30 13:05:09

标签: .net obfuscation pdb-files eazfuscator

如果我使用Eazfuscator对带有符号名称加密功能的vb.net程序集进行模糊处理(这样我可以使用Eazfuscator堆栈跟踪解码器),如果我发送PDB文件,这是否有效撤消?我想发送PDB文件,以便在堆栈跟踪中获取行号,并在错误报告中发回给我。

我知道我可以通过保留发布版本的PDB文件来获取行号,但这是我现在不需要的额外复杂层,我将来会实现这一点。我只是想通过包含PDB文件来确保我没有有效地发送非混淆代码。

提前感谢任何建议。

2 个答案:

答案 0 :(得分:4)

PDB不包含实际代码。但我有一种强烈的感觉,在混淆之后PDB将与二进制不兼容。 Here is what located inside PDB

  • 公共,私有和静态函数地址
  • 全局变量名称 和地址
  • 参数和局部变量名称以及偏移量 在堆栈中找到它们
  • 键入由类,结构, 和数据定义
  • 帧指针省略(FPO)数据,即 本地堆栈在x86上行走的关键
  • 源文件名及其行

据我所知,混淆会破坏非公共类型,方法,参数等内容。因此,如果它不会改变原始的IL偏移量,显示行号可能会起作用,但它会提供一些实际上被混淆的信息问题是它是否可以恢复。

如果您非常关注反混淆,我建议添加丰富的日志记录。

答案 1 :(得分:4)

不,运送PDB文件不会使混淆无效。但请注意,PDB文件可以包含局部变量的名称,因此这是反射器之类的反汇编程序可以使用的另一条信息。 PDB文件也可以包含源代码文件的完整路径,但是,这在泄露敏感信息方面几乎没有任何损害。

Crypto Obfuscator这样的混淆器支持生成PDB文件 - 在混淆之后,它会输出与混淆程序集同步的新PDB文件,以便堆栈跟踪保持正确。此外,PDB文件包含上述源代码文件的模糊名称。它还从PDB文件中删除所有本地变量名称。

免责声明:我为Crypto Obfuscator的开发者LogicNP Software工作。