windows网站篡改脚本编制
✅ 功能简介
该监控系统具备如下主要功能:
功能点 | 说明 |
---|---|
📁 目录监控 | 实时监听指定主目录及其所有子目录内文件的变动情况。 |
🔒 文件哈希校验 | 对文件内容生成 SHA256 哈希,确保变更检测基于内容而非时间戳。 |
🚫 排除机制 | 支持设置需排除的子目录或特定文件,避免频繁改动目录带来的干扰。 |
🧾 日志记录 | 所有非排除目录中的新增或被篡改的文件将自动写入 update.txt 日志文件中。 |
🧠 基线建立 | 系统首次运行时自动建立哈希基线作为“可信状态”,便于后续变更比对。 |
📋 应用场景示例
-
监控业务系统配置文件:防止配置被恶意或误操作修改;
-
跟踪重要文档目录:如合同、方案等文档被非法修改或替换;
-
代码安全检测:辅助识别可能被植入恶意代码的敏感代码文件夹。
🔧 使用方法(示意)
-
配置监控路径
修改MONITOR_FOLDER = "C:/YourFolder"
指定你需要监控的文件夹; -
可选:配置排除路径
python
复制编辑
EXCLUDE_PATHS = [ "logs", # 忽略日志文件夹 "temp/cache.txt" # 忽略某个具体文件 ]
-
运行程序(建议后台运行或注册为服务):
bash
复制编辑
python monitor.py
-
查看变更日志:
所有被篡改或新增的文件信息将写入update.txt
,格式如下:bash
复制编辑
[2025-05-15 21:40:15] 🚨 文件被篡改:docs/readme.md [2025-05-15 21:41:03] 🆕 新增或未知文件被修改:uploads/newfile.txt
🔐 安全建议
-
建议将
update.txt
设为只读,仅安全管理员可查看; -
建议每次系统更新或目录内容变动后手动重建一次哈希基线;
-
可配合企业文件服务器策略,加强操作权限管理。
实战
代码
import os
import hashlib
import json
import time
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler# === 配置路径 ===
MONITOR_FOLDER = "C:/MySecureFolder"
HASH_DB_FILE = "hash_baseline.json"
LOG_FILE = "update.txt"# ❗ 要排除监控的子目录(相对于 MONITOR_FOLDER 的路径)
EXCLUDE_PATHS = ["temp","logs","secret/ignore.txt"
]def is_excluded(path):rel_path = os.path.relpath(path, MONITOR_FOLDER)for ex in EXCLUDE_PATHS:if rel_path == ex or rel_path.startswith(ex + os.sep):return Truereturn Falsedef calculate_hash(file_path):hasher = hashlib.sha256()try:with open(file_path, 'rb') as f:while chunk := f.read(8192):hasher.update(chunk)return hasher.hexdigest()except Exception:return Nonedef log_change(message):timestamp = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime())with open(LOG_FILE, 'a', encoding='utf-8') as f:f.write(f"[{timestamp}] {message}\n")def build_baseline():hash_dict = {}for root, _, files in os.walk(MONITOR_FOLDER):for file in files:full_path = os.path.join(root, file)if is_excluded(full_path):continuerel_path = os.path.relpath(full_path, MONITOR_FOLDER)file_hash = calculate_hash(full_path)if file_hash:hash_dict[rel_path] = file_hashwith open(HASH_DB_FILE, 'w') as f:json.dump(hash_dict, f, indent=4)print("✅ 哈希基线已建立")def load_baseline():if not os.path.exists(HASH_DB_FILE):return {}with open(HASH_DB_FILE, 'r') as f:return json.load(f)class TamperAlertHandler(FileSystemEventHandler):def on_modified(self, event):if event.is_directory:returnif is_excluded(event.src_path):returnrel_path = os.path.relpath(event.src_path, MONITOR_FOLDER)current_hash = calculate_hash(event.src_path)baseline = load_baseline()if rel_path in baseline:if current_hash and current_hash != baseline[rel_path]:message = f"🚨 文件被篡改:{rel_path}"print(message)log_change(message)else:message = f"🆕 新增或未知文件被修改:{rel_path}"print(message)log_change(message)def start_monitor():print(f"🚀 正在监控文件夹:{MONITOR_FOLDER}")print(f"🚫 排除路径:{EXCLUDE_PATHS}")event_handler = TamperAlertHandler()observer = Observer()observer.schedule(event_handler, MONITOR_FOLDER, recursive=True)observer.start()try:while True:time.sleep(1)except KeyboardInterrupt:observer.stop()observer.join()if __name__ == "__main__":if not os.path.exists(HASH_DB_FILE):build_baseline()start_monitor()