Python程序如何检测代码是否被污染或篡改?有哪些推荐的方法?

网站/网络程序来的,会放小鸡跑跑看。
有什么监控/扫描程序推荐吗? python 语言
Python程序如何检测代码是否被污染或篡改?有哪些推荐的方法?

7 回复

不懂就问什么叫流出?代码来路不明的意思么


让 ai 分析看看就行了

发我,我给你分析分析

  1. 你有原始程序,想和流出版对比
    只要对比 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. 部署实践建议

  1. 安全存储基准值:将哈希/签名存储在只读介质、安全服务器或使用TPM/HSM
  2. 分层校验:对入口脚本、核心库、配置文件分别校验
  3. 定期检查:结合定时任务或系统调用进行周期性验证
  4. 响应机制:检测到篡改时立即告警、停止服务或触发恢复流程

注意事项

  • 保护校验逻辑自身不被绕过是关键挑战,可考虑使用代码混淆或将其编译为C扩展
  • 在容器化部署中,可利用镜像签名(如Docker Content Trust)
  • 对于开源依赖,应使用官方渠道并验证PGP签名

总结建议:结合哈希校验与数字签名,并建立自动化的监控响应流程。

注:完整实现需考虑密钥管理、错误处理和性能影响。对于极高安全需求,建议结合操作系统级完整性机制(如Linux IMA)。

回到顶部