我正在构建一个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中。
我正在使用
这些选项已从.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中。我该如何避免。