如何用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
相关产品推荐
相关产品推荐

