如何对调试器隐藏变量/函数名? 我在C++中创建了.dll。.DLL处理我的许多程序的核心功能,并且需要尽可能安全和难以理解。我已经用包装机包装好了

如何对调试器隐藏变量/函数名? 我在C++中创建了.dll。.DLL处理我的许多程序的核心功能,并且需要尽可能安全和难以理解。我已经用包装机包装好了,c++,assembly,dll,reverse-engineering,C++,Assembly,Dll,Reverse Engineering,但是,我注意到,当我在OllyDBG中打开.DLL时,所有变量名和函数名仍然可见 例如,我可以看到这个 MOV [VariableName], EAX 我想让[VariableName]不会以如此明显的方式显示。。也许更像 MOV DWORD PTR DS:[ESI], EAX 我知道一定有办法做到这一点,因为我看不到软件有变量名和函数名显示给每个人看 是否有人有任何建议,我已经尝试删除在生成.DLL时创建的PDB。。。未更改任何内容。如果使用VC++进行构建,则变量和函数名存储在.pdb文

但是,我注意到,当我在OllyDBG中打开.DLL时,所有变量名和函数名仍然可见

例如,我可以看到这个

MOV [VariableName], EAX
我想让[VariableName]不会以如此明显的方式显示。。也许更像

MOV DWORD PTR DS:[ESI], EAX
我知道一定有办法做到这一点,因为我看不到软件有变量名和函数名显示给每个人看


是否有人有任何建议,我已经尝试删除在生成.DLL时创建的PDB。。。未更改任何内容。

如果使用VC++进行构建,则变量和函数名存储在.pdb文件中--pdb代表“程序数据库”。正如Steve Hansen所说,这在发布版本中默认是禁用的;然而,启用它是一项艰巨的任务。只需删除.pdb文件,OllyDBG将不再显示变量和函数名


但是,从DLL导出的函数名称仍然可见,例如
dumpbin/exports mydll.DLL
,除非您。

听起来像是在构建DLL的“调试”版本。我会仔细检查以确保您构建了“发布”版本。在VisualStudio中,这是一个下拉选择。(1) 这个网站上有很多关于代码混淆器的问题。(2) 重点是什么?如果你有合同和保密协议,这些都有很大的影响力。如果你不这样做,你应该这样做。(3) 如果您将.dll发送到一个不名誉的客户端,为什么要这样做?他们将以更快的速度反编译和除臭你的模糊和编译代码。史蒂文,我实际上是在发布模式下构建的。David,.DLL作为游戏客户端的一部分分发。这就是为什么它不是毫无意义的。我已经删除了.pdf文件,它们继续显示。。。可能是奥利把它们存储在某种保存中,这就是为什么它们一直显示的原因吗?哈哈,我的意思是我删除了pdb。在发布文件夹中使用.DLL生成的。是否确定?如果删除了.pdb文件,则OllyDbg查看|查看源文件窗口为空。。。。此外,在OllyDbg.exe所在的目录中,它会为所有模块创建.udd文件。尝试删除这些。完美!这就成功了,我不知道奥利制作了那些文件。删除.pdb和olly.udd文件是解决方案。