¿Cómo se obtiene el hash del archivo PE de un archivo firmado?

5

Tengo un binario de PE con una firma digital. Quiero obtener el hash PE original (no el hash de todo el archivo).

No puedo entender cómo leerlo del archivo. La especificación de Authenticode sugiere que el bloque de firmas PKCS # 7 (por ejemplo, la Tabla de certificado de atributo) tiene un campo ContentInfo que contiene el hash PE original. Desafortunadamente, Microsoft no define una estructura ContentInfo. Tampoco la especificación PKCS # 7.

Recalcular el hash no ayudará si el archivo fue manipulado.

    
pregunta dockd 08.02.2018 - 02:00
fuente

1 respuesta

1

PKCS7 (también conocido como CMS) ciertamente define el ContentInfo genérico. Consulte rfc2630 sección 3 et succ, o rfc2315 sección 7 (no hay enlace para vincular):

  ContentInfo ::= SEQUENCE {
        contentType ContentType,
        content [0] EXPLICIT ANY DEFINED BY contentType }

  ContentType ::= OBJECT IDENTIFIER

Pero esto es deliberadamente tan flexible como para ser inútil en el procesamiento de datos: puede contener cualquier tipo de datos siempre que haya un OID para identificar ese tipo de datos.

No está claro en su fuente, pero mi primer hit en Google para "Formato de firma Authenticode" es download.microsoft.com/download/9/c/5/9c5b2167-8017.../Authenticode_PE.docx y eso dice en la página 7 sobre el contentInfo del SignedData utilizado para Authenticode:

  

• contentType se debe establecer en SPC_INDIRECT_DATA_OBJID (1.3.6.1.4.1.311.2.1.4).
  • el contenido debe establecerse en una estructura SpcIndirectDataContent, que se describe más adelante.

y de la página 9 a la 11 (que es más tarde) contiene una definición detallada que comienza con

SpcIndirectDataContent ::= SEQUENCE {
    data                    SpcAttributeTypeAndOptionalValue,
    messageDigest           DigestInfo
} --#public—

SpcAttributeTypeAndOptionalValue ::= SEQUENCE {
    type                    ObjectID,
    value                   [0] EXPLICIT ANY OPTIONAL
}

donde DigestInfo contiene el valor de AlgId y de digestión para un hash canónico del archivo calculado mediante un proceso detallado que comienza en la página 15.

    
respondido por el dave_thompson_085 17.03.2018 - 06:51
fuente

Lea otras preguntas en las etiquetas