首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Visual Studio 發布 EXE 隱藏函數名:不發布 PDB 即可

     編輯:程式設計疑難解答

現象

OD 反組譯自編 EXE 可見所有函數名,但下載的商業軟體 (如優酷客戶端) 符號表乾淨。

原因

編譯器預設生成 PDB (Program Database) 符號檔,並將 PDB 路徑嵌入 EXE。反組譯工具讀取 PDB 即可還原函數名、行號、變數名。商業軟體發布時 **不包含 PDB**,故符號表為空。

解決方法

  1. 不發布 PDB 檔案:Release 版本輸出目錄僅保留 .exe、.dll,刪除 .pdb。
  2. 專案設定停用 PDB 生成 (可選):
    專案屬性 → Linker → Debugging → Generate Debug Info = No (/DEBUG:NONE)
    或
    C/C++ → General → Debug Information Format = None
  3. 釋出模式優化:/O2、/OPT:REF、/OPT:ICF 移除未使用函數、合併相同 COMDAT,進一步減少符號殘留。

補充說明

  • PDB 僅含 靜態符號 (函數名、類別名、行號),不含邏輯加密。逆向工程師仍可透過 IDA Pro 靜態分析還原邏輯,PDB 只是「方便」而已。
  • 若需保護核心演算法,考慮:加殼 (VMProtect/Themida)、關鍵邏輯移至 Server、使用 Rust/Go 編譯原生碼 並去除符號。
  • 開發階段保留 PDB 利於 Crash Dump 分析 (配合 SymSrv、WinDbg)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved