如何从编译的二进制文件(.dll)中删除敏感数据? Visual Studio 2015(cpp)

时间:2018-09-20 04:26:03

标签: c++ dll visual-studio-2015 linker

我正在构建一个DLL,并且我想使此.dll的静态分析越难。但是,怎么了,如果我在记事本中打开已编译的.dll,我可以看到指向我的(某些).cpp和.h文件的完整路径。我可以看到(SOME)函数的定义,不需要反编译大声笑,它是可见的。样本:

void __cdecl Core::Context::Shutdown(void)
void __cdecl U::Read(unsigned __int64,unsigned __int64,char *)
C:\Git\Repo\Games/XXX/GameApi.h

等等,等等。 我不是新手,但我了解Debug / Release编译之间的区别。我不在乎二进制中的硬编码字符串,我知道如何隐藏它。但是常见的功能原型和文件路径吗?它们不应位于已编译的.dll中。

我正在使用

  • 发布配置,
  • x64 平台
  • C / C ++->常规-> 调试信息格式->无
  • C / C ++->代码生成-> 运行时库->多线程DLL(/ MD)
  • C / C ++->语言-> 启用运行时类型信息->否(/ GR-)
  • 链接器->调试-> 生成调试信息->否

这些选项已从.DLL中删除了很多敏感信息,但还不是全部!

编译器的完整命令行:

/GS /GL /W3 /Gy- /Zc:wchar_t /Gm- /O1 /sdl- /Fd"x64\Release\vc140.pdb" 
/Zc:inline /fp:precise /D "_WINDLL" /D "_UNICODE" /D "UNICODE" 
/errorReport:prompt /WX- /Zc:forScope /GR- /Gd /MD /Fa"x64\Release\" /EHsc 
/nologo /Fo"x64\Release\" /Os /Fp"x64\Release\Dll_x64.pch" 

链接器的完整命令行:

/OUT:"C:\Git\Repo\Games\XXX\Dll_x64.dll" /MANIFEST /LTCG:incremental 
/NXCOMPAT /DYNAMICBASE "kernel32.lib" "user32.lib" "gdi32.lib" 
"winspool.lib" "comdlg32.lib" "advapi32.lib" "shell32.lib" "ole32.lib" 
"oleaut32.lib" "uuid.lib" "odbc32.lib" "odbccp32.lib" 
/IMPLIB:"C:\Git\Repo\Games\XXX\Dll_x64.lib" /DLL /MACHINE:X64 /OPT:REF 
/MANIFESTUAC:"level='asInvoker' uiAccess='false'" 
/ManifestFile:"x64\Release\Dll_x64.dll.intermediate.manifest" /OPT:ICF 
/ERRORREPORT:PROMPT /NOLOGO /TLBID:1 

请解释一下,为什么我的函数原型和CPP / H文件的路径出现在已编译的.dll中。我该如何避免。

0 个答案:

没有答案