iT邦幫忙

2025 iThome 鐵人賽

DAY 17
0
Security

我的30天資安攻之路防身修練:實戰×工具×AI全紀錄系列 第 17

【DAY17】加解密初篇:Windows桌面檔案加密/解密自動化實作

  • 分享至 

  • xImage
  •  

本來DAY17使要與密碼學的內容有關,但是在取用網路公共資源碼時,我想先初步介紹一下加解密

檔案加密/解密自動化,是指利用程式或系統工具,自動對資料進行「加密處理」或「解密還原」的技術流程。這種自動化通常涵蓋「批次檔案處理」、「無需人工選擇」、「部分或全部資料保護」等特性,常用於企業端點安全、個人敏感資料防護、或資安防禦場景.

加密/解密自動化定義
檔案加密:指將檔案內容用密碼或金鑰轉換成無法直接讀取的密文,只能透過正確金鑰解密還原。加密常用演算法如 AES、RSA、XOR 等,能防止未授權存取與竄改.

檔案解密:是指將加密後的密文,恢復成原始明文。一般需要用正確密碼或私密金鑰,才可還原檔案內容.

自動化作業:是指利用程式腳本、自動同步工具或企業端點系統,對指定路徑、檔案群組自動批次執行加密解密處理,不需人工逐一操作。例如:進入指定資料夾即自動加密新檔案;或依規則自動將加密檔案還原。


常見自動加密觸發條件

  1. 檔案建立或修改
    當指定資料夾裡新檔案建立或原檔案被修改時,系統會自動加密該檔案(如同步備份或端點防護軟體)。
    例:用檔案系統監控 API (如 Windows 的 ReadDirectoryChangesW)偵測新增、編輯操作。

  2. 下載行為
    當使用者下載任何檔案到指定路徑時,自動將下載檔案加密,防止未授權存取。
    例:防毒軟體或企業安全代理在「Downloads」資料夾監控,發現新檔即加密。

  3. 使用者登入/登出
    當特定使用者登入、登出時,批次自動加密/解密指定檔案。
    例:EFS(加密檔案系統)開機、關機時自動執行相關操作。

  4. 資料備份/同步
    備份或雲端同步前自動先加密所有檔案,確保雲端/遠端資料安全。
    例:多數雲端硬碟(Dropbox、OneDrive)支援此類加密流程,或透過同步工具腳本。

  5. 規則策略或安全政策啟動
    依照企業政策或資安軟體規則,自動批次觸發資料加密,包含自動排程、特定條件(IP、時間)等。
    例:TrendMicro、Kaspersky防毒設定的「檔案加密規則」。

  6. 手動或程式化命令執行
    使用者點擊按鈕、執行特定指令時自動加密(如「一鍵加密」、「文件解密」)。
    例:Windows應用程式GUI、Shell腳本等。

高階自動化流程設計
可配合時段、網路狀態、裝置連線等狀態,動態決定自動加密觸發點。

透過系統 API 或第三方監控元件實現即時、批次或排程加密處理。


所以我們今天就是要用Windows應用程式GUI進行手動命令執行(也會撰寫一些有關xor的語法)

1.打開visual studio(選擇桌面視窗C++ Win32應用程式)

2.開好專案建新方案main.cpp
請注意後面寫的程式語言會跟視窗規定有關係,所以先將【專案】打開,並至屬性檢查

確認「連結器」→「系統」→「子系統」是「Windows (/SUBSYSTEM:WINDOWS)」
https://ithelp.ithome.com.tw/upload/images/20250917/20168357c6aFK95AKv.png

確認「C/C++」→「語言」中,C++語言標準至少為 C++17 / C++20。

https://ithelp.ithome.com.tw/upload/images/20250917/20168357C7c37QIbJI.png


3.程式碼開始
#include <windows.h>
#include
#include
// 加密或解密單一檔案(XOR 用同一函數)
void EncryptDecryptFile(const std::wstring& filename) {
std::fstream fs(filename, std::ios::in | std::ios::out | std::ios::binary);
if (!fs) {
MessageBox(NULL, L"無法開啟檔案!", L"錯誤", MB_OK | MB_ICONERROR);
return;
}
char ch;
while (fs.get(ch)) {
ch = ch ^ 0xFF; // XOR 0xFF 位元反轉
fs.seekp(-1, std::ios::cur);
fs.put(ch);
fs.flush();
}
fs.close();
}
// Windows 應用程式入口
int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) {
int ret = MessageBox(NULL,
L"要加密文件請按「確定」,要解密請按「取消」",
L"檔案加解密",
MB_OKCANCEL | MB_ICONQUESTION);
std::wstring filepath = L"輸入自己的路徑";
if (ret == IDOK) {
EncryptDecryptFile(filepath); // 加密
MessageBox(NULL, L"檔案已加密!", L"完成", MB_OK);
}
else {
EncryptDecryptFile(filepath); // 解密 (同一函式)
MessageBox(NULL, L"檔案已解密!", L"完成", MB_OK);
}
return 0;
}

EncryptDecryptFile 函式

以二進位讀寫模式開啟指定的檔案。
檔案逐字元讀取(fs.get(ch)),對每個字元使用 ch ^ 0xFF 做 XOR 位元反轉。
使用 seekp(-1, std::ios::cur) 讓寫入指標回退一格,把加密後的字元覆寫回該位置。持續處理直到讀完整個檔案。

WinMain 函式作為執行入口

顯示訊息讓使用者選擇是加密(按「確定」)還是解密(按「取消」)。
指定固定檔案路徑(此處須注意 escape 路徑字元,否則編譯會錯誤)。
根據使用者選擇呼叫 EncryptDecryptFile 執行加密或解密。
完成後顯示訊息框通知結果。

XOR 運算(^)是簡單的加解密方法,透過對每個位元取反(0xFF 為全1字節,所有位元反轉)達到資料混淆。
加密與解密邏輯相同,因為
(x⊕k)⊕k=x。
程式中路徑 "C:\Users......." 寫法不正確,C++ 字串中 \ 需要寫成 \ 才能正確解析。


4.呈現畫面
https://ithelp.ithome.com.tw/upload/images/20250917/20168357fzrNLJdoQC.png
// 加密或解密單一檔案(XOR 用同一函數)

https://ithelp.ithome.com.tw/upload/images/20250917/201683572jCjv3h4Kk.png
// Windows 應用程式入口
(正常來說,駭客是不會讓你解密的!!!視窗只是僅供提醒喔~~~)

https://ithelp.ithome.com.tw/upload/images/20250917/20168357RC4ReGp1lE.png
最後呈現 我的程式就被鎖住啦! 駭客可以加上遠端連線木馬加勒索可以加密你的其他重要檔案,導致重要資料被奪取!


上一篇
【DAY16】社交工程:當駭客不靠技術?
下一篇
【DAY18】小插曲:資安概論簡介及小筆記!
系列文
我的30天資安攻之路防身修練:實戰×工具×AI全紀錄19
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言