首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

多檔案綁定打包技術原理與實作:從資料結構到釋放執行流程 (安全研究視角)

     編輯:關於C++

聲明:本文分析檔案綁定器 (Binder) 技術原理,屬安全研究與逆向工程教學範疇。綁定器常被惡意軟體用於將木馬與正常程式捆綁分發,理解其機制有助於開發檢測與防禦方案。

核心設計思想

綁定器產出單一可執行檔,內含:

  1. 綁定器自身代碼 (Stub) - 負責釋放與執行內嵌檔案。
  2. 內嵌檔案資料 - 依序附加,每檔前置長度資訊 (最後一個檔案可不存長度)。

執行時:Stub 讀取自身長度定位首個內嵌檔,遞歸解析長度+資料,寫入臨時檔並執行。

關鍵資料結構

struct MODIFY_DATA {
    unsigned int finder;   // 魔數 0x12345678,用於定位自身結構位置
    _off_t my_length;      // Stub 自身檔案長度
} modify_data = {0x12345678, 0};

編譯後,Stub 在二進制中搜尋 finder,將實際長度回填 my_length。

綁定過程 (Bind_Files) 核心邏輯

  1. 讀取 Stub 自身檔案至緩衝區。
  2. 掃描緩衝區找到 finder,回填 modify_data (含實際長度)。
  3. 建立輸出檔,寫入修改後的 Stub。
  4. 對每個待綁定檔案 (除最後一個):
fwrite(&file_size, sizeof(file_size), 1, out); // 寫入長度
fwrite(&sync_flag, sizeof(int), 1, out);       // 同步/非同步執行旗標
fwrite(file_data, 1, file_size, out);          // 寫入資料
  1. 最後一個檔案:直接寫入資料 (無長度前綴)。

釋放執行過程 (Unbind) 核心邏輯

  1. 開啟自身檔案 (綁定後的輸出檔)。
  2. fseek 跳過 Stub 長度 (modify_data.my_length) 到達首個內嵌檔。
  3. 迴圈解析:
while (还有内嵌文件) {
    fread(&prog_len, sizeof(prog_len), 1, in); // 讀取長度
    fread(&sync_flag, sizeof(int), 1, in);     // 讀取旗標
    fread(buffer, 1, prog_len, in);            // 讀取資料
    fwrite(buffer, 1, prog_len, temp_file);    // 寫入臨時檔
    CreateProcess(temp_file, ..., sync_flag?FALSE:TRUE); // 執行
    if (!sync_flag) WaitForSingleObject(...);  // 同步等待
    if (!sync_flag) DeleteFile(temp_file);     // 同步模式執行後刪除
}

最後一個檔案:直接讀取剩餘所有資料至臨時檔並執行。

判斷「綁定模式」vs「釋放模式」

BOOL OnInitDialog() {
    // ...
    _stat(my_name, &ST);
    if (ST.st_size > 184*1024) { // 原始 Stub 大小 184KB
        Unbind();  // 超過原始大小 => 已綁定檔案,進入釋放流程
        exit(0);   // 直接退出,不顯示綁定器介面
    }
    // 否則顯示綁定器 GUI 供使用者選擇檔案綁定
}

安全風險與檢測特徵

檢測與防禦策略

  1. 靜態特徵:掃描 PE 結構異常 (Section 對齊、EntryPoint 指向異常區段、疊加資料)、Stub 魔數搜尋、內嵌 PE 頭檢測 (掃描 MZ PE 簽名)。
  2. 動態行為:監控進程建立臨時檔 (%TEMP%\temp*.exe) 並立即執行、自我讀取自身檔案 (CreateFile 自身路徑)、修改自身記憶體映像。
  3. 啟發式規則:單一檔案包含多個 PE 結構、EntryPoint 代碼包含大量檔案 I/O 與 CreateProcess 調用。
  4. 應用程式控制:AppLocker/WDAC 限制未簽名臨時檔執行、限制 %TEMP% 目錄執行權限。
  5. 沙箱分析:自動化提取內嵌模組進行獨立分析。

合法用途與替代方案

  • 合法場景:安裝包製作 (如 Inno Setup、NSIS)、自解壓縮檔 (SFX)、單檔案部署工具 (BoxedApp、VMware ThinApp)。
  • 現代替代:.NET Single-file Bundler (dotnet publish -r win-x64 --self-contained true -p:PublishSingleFile=true)、Go/Rust 靜態鏈接單二進制、容器化部署 (Docker)。

檔案綁定技術本身中性,關鍵在於使用意圖。安全從業者應掌握其資料結構特徵、釋放執行行為模式,構建多層次檢測體系;開發者應優先選用現代原生單檔案發布方案,避免引入類 Stub 機制帶來的安全風險與相容性問題。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
風險點說明
惡意軟體分發將木馬/勒索軟體與合法安裝程式/文檔綁定,利用合法程式信任度誘導執行。
繞過簽名檢測Stub 代碼較小且可變形,內嵌惡意載荷加密/壓縮,靜態特徵難提取。
無檔案落地變體進階版直接在記憶體中映射執行內嵌模組 (Reflective Loading),不寫入磁碟臨時檔。