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

C 語言編寫的小程式被殺毒軟體誤殺:降低誤報策略

     編輯:程式設計綜合問答

現象

自寫 C 語言程式 (含 `system("pause")` 等) 編譯後發給他人,被主流殺毒軟體 (360、火綜、Windows Defender) 直接查殺或攔截。

誤報常見觸發點

  • 使用 `system()`、`WinExec()`、`ShellExecute()` 等執行命令函式。
  • 無數位簽章、無版本資源、檔案熵值高 (UPX 壓縮)。
  • 行為特徵:修改註冊表、啟動項、訪問敏感目錄。
  • 編譯器預設輸出 (MinGW/GCC) 常被標記為「未知發佈者」。

降低誤報的實務做法

1. 簽名與資源資訊

  • 申請代碼簽章憑證 (EV Code Signing 最佳),對 `.exe` 簽名。
  • 在 Visual Studio / Resource Hacker 嵌入版本資源:公司名、產品名、版本號、著作權。

2. 避免敏感 API

  • 替換 `system("pause")` → `getchar()` 或自訂暫停函式。
  • 若需啟動外部程式,改用 `CreateProcess` 並妥善處理參數。

3. 打包為安裝程式

使用 Inno Setup / NSIS / WiX 打包為 `.exe` 安裝包,包含:

  • EULA 授權協議
  • 解除安裝項目
  • 開始選單捷徑
  • 數位簽章

安裝程式比裸 `.exe` 更易被信任。

4. 提交白名單

  • 微軟:提交樣本分析
  • 360/火綜/騰訊電腦管家:官網均有「誤報申訴」入口。

5. 編譯優化

  • 釋出模式編譯 (`-O2` / `/O2`),去除除錯資訊。
  • 靜態連結 runtime (`-static-libgcc` / `/MT`),減少依賴 DLL 載入行為。

「做成可安裝形式」的具體步驟 (Inno Setup 範例)

; MyProg.iss
[Setup]
AppName=My Little Tool
AppVersion=1.0
DefaultDirName={pf}\MyTool
OutputDir=dist
OutputBaseFilename=MyToolSetup
SignTool=signtool.exe /a /v /fd sha256 /tr https://timestamp.digicert.com /td sha256 $f

[Files]
Source: "MyProg.exe"; DestDir: "{app}"; Flags: ignoreversion

[Icons]
Name: "{group}\My Tool"; Filename: "{app}\MyProg.exe"
Name: "{commondesktop}\My Tool"; Filename: "{app}\MyProg.exe"

[UninstallDelete]
Type: filesandordirs; Name: "{app}"

總結

「做成可安裝形式」確實能大幅降低誤報,因為安裝包具有正規軟體特徵 (簽章、資源、解除安裝)。結合數位簽章與白名單提交,基本可解決個人/小團隊分發的誤報問題。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved