与前任一起发布 pdb 的安全性如何?



如果我没看错的话,(https://github.com/Microsoft/microsoft-pdb),pdb包含调试信息。如果您要与exe一起向客户发布一个源代码,是否会带来客户或最终用户能够找到源代码的风险?

我可能会认为,如果你将Visual Studio附加到过程中是可能的,我还没有尝试过,但我相当确定你不需要把源代码塞在某个地方,以便使用pdb来查看入口点,最终一些数据会采取的整个路线。

如果是这样,有没有办法防止最终用户阻止这样做?

如果用户有足够的知识,则无法阻止用户了解您的程序的作用。

即使没有PDB,也可以使用一种称为逆向工程的技术来找出程序的作用。像IDA Pro这样的程序真的很擅长。使用中间语言的 C# 和 Java 等编程语言几乎都是在源代码中提供的。像dotPeek这样的工具可以显示反编译的源代码,令人难以置信的是它与真实源代码的接近程度。

关于 PDB,有公共 PDB 和私有 PDB。您通常会将公共 PDB 提供给公众(顾名思义),并保留专用 PDB 用于内部调试目的。可以使用名为 PDBCopy 的工具(使用-p参数)将专用 PDB(包含更多信息)转换为公共 PDB。

简化一下,你可以这样想:公共 PDB 包含有关具有public关键字(或等效,具体取决于您的编程语言)的方法的信息,私有 PDB 包含有关所有方法(protectedinternalprivate和任何关键字)的信息。

PDB 不包含源代码;它们只包含指向编译时使用的文件的链接。这样,人们就可以找出构建服务器的本地文件结构,这可能被视为安全风险。恕我直言,这是可以接受的。

就我个人而言,我不会太担心赠送公共 PDB。甚至Microsoft也为Windows这样做。你可以找出Microsoft构建服务器的本地目录结构;-)

例如,文件combase.pdb(符号存储哈希为 10EDC6786A36FBF7D9EE585F00212CB41)包含(除其他外)

d:osobjx86freonecorecomcombasedllobjfrei386combase.def
onecorebaseappmodelcommonremovedirectorytree.cpp

不包含源代码的 PDB。 它包含符号的名称(函数,类,全局变量)和有关源文件名/行(如何将RVA转换为文件/行)的信息。 所以 PDB 不会向用户提供您的源代码,而是给出您的源文件的名称以及文件系统中的完整路径和 所有内部符号名称

最新更新