You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python3中实现Hexdump 复现sigtool十六进制转储命令效果

Python 3 实现指定Shell命令等效功能

原命令逻辑拆解

你给出的Shell命令实际执行逻辑如下:

  • 读取目标文件的二进制内容
  • 调用ClamAV的sigtool将二进制内容逐字节转换为连续无分隔的小写十六进制字符串
  • 截取生成的十六进制字符串的前2048字节(因sigtool输出为纯ASCII字符,等价于截取前2048个字符,对应原始文件前1024字节的十六进制表示)
    这个输出正好适配ClamAV .ndb恶意文件规则库的十六进制签名匹配需求。

纯Python实现(无外部依赖)

Python 3.5+ 内置的字节处理方法可以直接实现等效逻辑,不需要调用外部sigtool进程,性能更好也更方便集成到检测脚本里:

def get_clamav_hex_sig(file_path: str, dump_len: int = 2048) -> str:
    # 每1字节原始数据对应2位十六进制字符,按需读取避免加载整个大文件
    read_size = (dump_len // 2) + (1 if dump_len % 2 else 0)
    with open(file_path, 'rb') as fp:
        raw_content = fp.read(read_size)
    # 生成连续小写十六进制串,和sigtool --hex-dump输出格式完全一致
    hex_dump = raw_content.hex()
    # 截取指定长度,等效head -c的字节截取逻辑
    return hex_dump[:dump_len]

使用说明

  • 调用方式:直接传入目标文件路径即可,返回值就是和原Shell命令输出完全一致的十六进制字符串,可以直接用于和.ndb规则做匹配校验:
    # 示例:读取目标PHP文件的十六进制签名
    file_hex_sig = get_clamav_hex_sig("malicious.php")
    
  • 性能优化:上述实现不会读取整个文件,只会读取生成指定长度十六进制串所需的最少字节,扫描大体积PHP文件时效率远高于原Shell命令的全文件cat逻辑。
  • 匹配注意:如果你的.ndb规则中存储的十六进制签名是大写格式,只需要将返回的签名串和规则串统一转为小写(或大写)再匹配即可,ClamAV本身对十六进制签名的大小写不敏感。
  • 全量读取版本:若需要100%复刻原命令的全文件读取行为(无特殊需求不推荐,大文件下内存占用高),可以使用如下写法:
    def get_hex_sig_full_read(file_path: str, dump_len: int = 2048) -> str:
        with open(file_path, 'rb') as fp:
            raw_content = fp.read()
        return raw_content.hex()[:dump_len]
    

内容的提问来源于stack exchange,提问作者tmclo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 01:42:27