Как открыть файлы, отправленные мне в "конверте документа"?

Я только что получил электронное письмо, чей X-Mailer - "X-Mailer: Microsoft CDO для Windows 2000". Он имеет в качестве вложения файл.sgn, содержимое которого представляет собой XML с одним полем, по-видимому, в формате PDF с кодировкой base64:

<DocumentEnvelope><SignaturePackage><Signature =
xmlns=3D"http://www.w3.org/2000/09/xmldsig#"><SignedInfo><Canonicalizatio=
nMethod Algorithm=3D"http://www.w3.org/TR/2001/REC-xml-c14n-20010315" =
/><SignatureMethod =
Algorithm=3D"http://www.w3.org/2000/09/xmldsig#rsa-sha1" /><Reference =
URI=3D"#SignedDoc"><DigestMethod =
Algorithm=3D"http://www.w3.org/2000/09/xmldsig#sha1" =
/><DigestValue>MFV2XJ9rfjhGCyA948wKB741ChQ=3D</DigestValue></Reference></=
SignedInfo><SignatureValue>aKHfEGfu2p9RdShv1Vv/kqC6gjdymojq0rQA+AU/hPocrr=
VqMQk2wbbJD60jc8QPP0kPIo4vWqB1mVx5Y45HK0LFWxMDkJ2/CN8GcODEum2Mamn3W2j9tKV=
8JfJAexlW47LprDq99W9YwfpXusaEplCOErCRj/2dhnGc4SgZXxw=3D</SignatureValue><=
KeyInfo><KeyValue><RSAKeyValue><Modulus>nz78eiuYN1Jmm5ND8xLLbJ9QTrBpjTMfv=
h4mbmHbBSB7HSHU+7Izp5GCiyDAlmXa3JjqKBRjw2+OpwhsJf+KHPltKFKwOltTN9QJWS4HJm=
H1xqF4VAuwvpp1tlJd1KP5WL/j9YCYigzEfZIAAUC2KiFlAxoR1mwz3alMR4v96h8=3D</Mod=
ulus><Exponent>AQAB</Exponent></RSAKeyValue></KeyValue></KeyInfo><Object =
Id=3D"SignedDoc"><DocumentOriginName =
xmlns=3D"">ecd20f25-95b3-4dc3-b8e6-fc62d23db259</DocumentOriginName><Docu=
mentExtension xmlns=3D"">pdf</DocumentExtension><DocumentCreationDate =
xmlns=3D"">2014-02-27T22:10:27.4320656+02:00</DocumentCreationDate><Docum=
entContent =
xmlns=3D"">JVBERi0xLjQNJeLjz9MNCjMgMCBvYmoNPDwvQ291bnQgMS9LaWRzWzQgMCBSXS=
9QYXJlbnQgMiAwIFIgDS9UeXBlL1BhZ2VzPj4NZW5kb2JqDTQgMCBvYmoNPDwvQXJ0Qm94WzA=

(... и т. д. и т. п.)

P9fdsc3jL4yg7at7G488BKcqQbpnZDkhXFsfhc/VIuPexfElgnf2oagaf/QjiZHy+ganiZcAH=
dFFFrN6xYK5n0JL5g330NKzD5CHBS8X1civ8VUAKdWjgI8pm1rFsm4v20SwIp/81OH1w=3D=3D=
</CertBase64></Certificate></SignaturePackage></DocumentEnvelope>

Если я копирую только часть DocumentContent и декодирую ее с помощью base64, я вижу заголовок PDF 1.3, но некоторые декодеры душат его, и в любом случае я не могу получить работающий PDF от этой вещи. Так:

  • Как я могу вручную извлечь файл PDF оттуда?
  • Существует ли отдельный инструмент для извлечения файлов из таких почтовых сообщений или из файлов.sgn?
  • Есть ли расширение Thunderbird, которое обрабатывает их и представляет PDF как обычное вложение?

Примечания:

  • Файл был автоматически отправлен платформой Net Ha-Mishpat израильских судов. Я могу связаться с судами, но у них нет технически грамотных людей, и я не могу связаться с подрядчиком по программному обеспечению, которого они использовали.
  • Я знаю людей, которым в прошлом удавалось извлекать декодированные файлы из этих.sgn, я просто не знаю, как именно.

4 ответа

Решение

Сегодня я получил один из этих документов.

Поскольку объяснение того, что не так с техподдержкой, казалось, заняло больше времени, чем попытка извлечь его самостоятельно, я создал небольшой скрипт на python для извлечения и декодирования документа pdf, который был встроен в файл sig.

То есть, предполагая, что существует один прикрепленный файл PDF, и формат файла sig такой же, как у меня.

Я надеюсь, что кто-то найдет это полезным.

import base64
import xml.etree.ElementTree as ET
import sys


def decode(infile, outfile):
    tree = ET.parse(infile)
    xmlns = '{http://www.w3.org/2000/09/xmldsig#}'
    b64 = tree.find("./SignaturePackage/{0}Signature/{0}Object/DocumentContent".format(xmlns)).text
    txt = base64.b64decode(b64)

    with open(outfile, 'bw+') as f:
        f.write(txt)

if __name__ == "__main__":
    if len(sys.argv) < 2:
        print('usage: python unpack.py <input_filename>')
        exit(1)
    infile = sys.argv[1]
    outfile = 'out.pdf'
    decode(infile, outfile)
    print('Done. Result saved to {0}'.format(outfile))

Я создал суть для этого сценария.

Вам нужно установить python 3.x, поместить файл sig и скрипт python в одну папку (или указать путь к файлу скрипта) и выполнить его следующим образом:

python unpack.py <sig_filename>

Это создаст файл с именем out.pdf в той же папке.

Вот элементарный скрипт, который вы можете использовать в Unix-подобных системах (и, возможно, в Windows тоже с небольшими изменениями), чтобы извлечь PDF-файл из конверта документа; Я называю это sgn2pdf (поскольку файл конверта doc имеет расширение sgn). Его интерфейс командной строки

sgn2pdf [INPUT_FILENAME] [OUTPUT_FILENAME]

т.е. если вы добавите первый аргумент, он будет считан из этого файла, а не из стандартного ввода; и если вы добавите второй аргумент, он перенаправит вывод во второй указанный файл.

Источник:

#!/bin/bash
#
# Extract a PDF file from an Israeli courts' .sgn PDF document envelope

exec 3<&0 # tie (new) file descriptor 3 to what is currently the standard input
exec 4>&1 # tie (new) file descriptor 4 to what is currently the standard output

if [[ $# > 0 ]]; then
    exec 3<$1 
    shift
fi
if [[ $# > 0 ]]; then
    exec 4>$1
    shift
fi
exec <&3 >&4
sed -r 's/^.*<DocumentContent[^>]*>//; s/<\/Document.*$//;' | base64 -d -i >&4

base64 декодер является частью GNU coreutils пакет и должен быть доступен в любом дистрибутиве Linux.

Возможно, слишком поздно, но если вы получили этот файл из израильской судебной системы (נט המשפט), то здесь они дают ссылку ( эту ссылку) на программу Windows, которая открывает его.

Использование CDO 200 и конверта документа указывает на то, что электронное письмо, вероятно, было отправлено автоматически или программно, то есть с помощью сценария, вне доступа или каким-либо другим способом через SMTP и программу, совместимую с CDO (не обычный почтовый клиент).

Файл SGN вряд ли будет настоящим файлом SGN, который является файлом "Sierra Print Artist"; кажется более вероятным, что кто-то использовал расширение вручную для файла подписи.

Я не верю, что этот файл должен был быть тем вложением, которое вы ожидаете открыть. Кажется, гораздо более вероятно, что файл, который вы видите, включен в электронное письмо как способ для отправителя показать его как "подписанный", когда он генерируется автоматически. Поскольку PDF-файл встроен в XML-файл, скорее всего, нет расширения, которое бы автоматически расшифровывало раздел вложения, который вы считаете PDF-файлом. Вы можете попробовать скопировать весь раздел, а затем расшифровать его и сохранить декодированный текст в текстовом редакторе, совместимом с юникодом, а затем посмотреть, открывается ли он как читаемый PDF-файл.

Но я думаю, что вы напрасно тратите свое время, и это вложение соответствует тому, что вы увидели бы, если бы кто-то включил визитную карточку с изображением, когда отправлял вам электронное письмо из какой-либо программы через CDO. То есть он не предназначен для декодирования, потому что если бы вы могли это сделать, то, возможно, вы могли бы подделать подпись отправителя.

Вы пытались связаться с отправителем, чтобы узнать, имеет ли вложение какое-либо значение? Мне кажется довольно очевидным, что это просто файл с подписью. Заголовок говорит вам, что алгоритм, используемый для генерации подписи, находится по адресу http://www.w3.org/TR/2002/REC-xmldsig-core-20020212/xmldsig-core-schema.xsd#rsa-sha1 - что один должен сказать вам, что это не файл, который вы должны открыть как таковой.

Другие вопросы по тегам