Bie*_*ing 6 security debugging pdb-files
如果我没读错的话(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 包含有关所有方法(protected、internal以及private任何关键字)的信息。
PDB 不包含源代码;它们仅包含编译时使用的文件的链接。这样,人们就可以找出构建服务器的本地文件结构,这可能被视为安全风险。恕我直言,这是可以接受的。
就我个人而言,我不会太担心放弃公共 PDB。甚至微软也在 Windows 上这么做。并且您可以找出 Microsoft 构建服务器的本地目录结构;-)
例如,文件combase.pdb(符号存储哈希为 10EDC6786A36FBF7D9EE585F00212CB41)包含(除其他外)
d:\os\obj\x86fre\onecore\com\combase\dll\objfre\i386\combase.def
onecore\base\appmodel\common\removedirectorytree.cpp
Run Code Online (Sandbox Code Playgroud)