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

如何用Python分离PGP自解密归档(SDA)的EXE头与加密消息?

分离PGP自解密归档(SDA)中的加密消息部分

PGP自解密归档(SDA)本质是PE格式可执行文件头 + 末尾追加的PGP加密消息,PEReader无法识别是因为它仅解析PE结构,不会处理附加在PE之外的内容。以下是几种可靠的提取方法:

方法1:手动用十六进制编辑器提取

这是最直接的方式,利用PGP加密消息的固定标记定位:

  • 用十六进制编辑器(如HxD、010 Editor)打开目标SDA的EXE文件
  • 在编辑器中搜索ASCII字符串 -----BEGIN PGP MESSAGE-----
  • 找到起始标记后,选中从该位置到 -----END PGP MESSAGE----- 末尾的所有内容(包含这两行标记)
  • 将选中内容保存为新文件(后缀可设为.pgp或.asc),即可用常规PGP工具处理

方法2:直接用GnuPG处理

部分版本的GnuPG可以直接识别SDA文件,无需手动分离:

  • 尝试运行命令解密并提取内容:
    gpg --decrypt your-sda-file.exe > decrypted-content.txt
    
    输入密码后即可得到解密后的原始内容
  • 如果仅需提取加密消息部分,可尝试导出:
    gpg --export-options export-minimal --decrypt your-sda-file.exe > extracted-message.pgp
    

方法3:脚本自动提取

用Python脚本批量或自动定位并提取PGP消息:

with open("your-sda-file.exe", "rb") as input_file:
    file_content = input_file.read()

# 定义PGP消息的起始和结束标记
start_marker = b"-----BEGIN PGP MESSAGE-----"
end_marker = b"-----END PGP MESSAGE-----"

# 查找标记位置
start_pos = file_content.find(start_marker)
end_pos = file_content.find(end_marker) + len(end_marker)

if start_pos != -1 and end_pos != -1:
    pgp_message = file_content[start_pos:end_pos]
    with open("extracted-pgp-message.pgp", "wb") as output_file:
        output_file.write(pgp_message)
    print("加密消息已提取至 extracted-pgp-message.pgp")
else:
    print("未找到有效的PGP消息标记")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 10:58:21