Python程序如何检测代码是否被污染或篡改?有哪些推荐的方法?
网站/网络程序来的,会放小鸡跑跑看。
有什么监控/扫描程序推荐吗? python 语言
Python程序如何检测代码是否被污染或篡改?有哪些推荐的方法?
7 回复
让 ai 分析看看就行了
发我,我给你分析分析
- 你有原始程序,想和流出版对比
只要对比 md5 即可
2. 你没有原始程序,想检查流出版是否安全
[在线查毒]( https://www.virustotal.com/gui/home/upload)或者本地查毒
去吾爱破解平台让人家查查,人家是专业搞软件的
就是那里流出的 😂
在Python中检测代码是否被污染或篡改,核心在于建立可信的基准并进行比对。以下是几种专业且实用的方法,你可以根据安全需求组合使用:
1. 完整性校验(推荐首选)
对关键文件计算密码学哈希值(如SHA-256)并与基准值比对,这是最直接有效的方法。
import hashlib
import os
def calculate_file_hash(filepath, algorithm='sha256'):
"""计算文件的哈希值"""
hash_func = hashlib.new(algorithm)
with open(filepath, 'rb') as f:
for chunk in iter(lambda: f.read(4096), b''):
hash_func.update(chunk)
return hash_func.hexdigest()
def verify_integrity(filepath, expected_hash, algorithm='sha256'):
"""验证文件完整性"""
actual_hash = calculate_file_hash(filepath, algorithm)
if actual_hash == expected_hash:
print(f"[✓] {filepath} 完整性验证通过")
return True
else:
print(f"[!] {filepath} 已被篡改!期望哈希: {expected_hash},实际哈希: {actual_hash}")
return False
# 使用示例
if __name__ == "__main__":
# 预先计算并安全存储的基准哈希值
TRUSTED_HASHES = {
'main.py': '5d41402abc4b2a76b9719d911017c592...', # 替换为实际哈希
'config.py': '...'
}
for file, expected_hash in TRUSTED_HASHES.items():
if os.path.exists(file):
verify_integrity(file, expected_hash)
2. 数字签名验证
对于更高安全级别,使用非对称加密对哈希值进行签名和验证,确保基准值本身未被篡改。
from cryptography.hazmat.primitives import hashes
from cryptography.hazmat.primitives.asymmetric import padding
from cryptography.hazmat.primitives.serialization import load_pem_public_key
import base64
def verify_signature(filepath, signature_b64, public_key_path):
"""使用公钥验证文件签名"""
with open(public_key_path, 'rb') as key_file:
public_key = load_pem_public_key(key_file.read())
with open(filepath, 'rb') as f:
file_data = f.read()
signature = base64.b64decode(signature_b64)
try:
public_key.verify(
signature,
file_data,
padding.PSS(
mgf=padding.MGF1(hashes.SHA256()),
salt_length=padding.PSS.MAX_LENGTH
),
hashes.SHA256()
)
print(f"[✓] {filepath} 签名验证通过")
return True
except Exception as e:
print(f"[!] {filepath} 签名验证失败: {e}")
return False
3. 运行时监控与行为分析
- 导入钩子(Import Hooks):使用
importlib设置钩子,在模块加载时进行校验 - 系统文件监控:使用
watchdog库监控关键文件的变化 - 内存校验:对已加载的模块对象计算哈希(适用于防内存补丁)
4. 部署实践建议
- 安全存储基准值:将哈希/签名存储在只读介质、安全服务器或使用TPM/HSM
- 分层校验:对入口脚本、核心库、配置文件分别校验
- 定期检查:结合定时任务或系统调用进行周期性验证
- 响应机制:检测到篡改时立即告警、停止服务或触发恢复流程
注意事项
- 保护校验逻辑自身不被绕过是关键挑战,可考虑使用代码混淆或将其编译为C扩展
- 在容器化部署中,可利用镜像签名(如Docker Content Trust)
- 对于开源依赖,应使用官方渠道并验证PGP签名
总结建议:结合哈希校验与数字签名,并建立自动化的监控响应流程。
注:完整实现需考虑密钥管理、错误处理和性能影响。对于极高安全需求,建议结合操作系统级完整性机制(如Linux IMA)。


