Nadine Vigouroux

92 papers A 2B 3C 6Misc 2Journal 14Unranked 65
YearRankTypeTitle / Venue / Authors
2025 conf
CCNC
Jordan Rey-Jouanchicot, André Bottaro, Eric Campo, Jean Léon Bouraoui, Nadine Vigouroux, Frédéric Vella
2025 J jnl
Internet Things
Jordan Rey-Jouanchicot, Eric Campo, Jean Léon Bouraoui, André Bottaro, Nadine Vigouroux, Frédéric Vella
2025 conf
UbiComp Companion
Ramy Bteich, Anaëlle Hamon, Yoann Maraval, Véronique Moriceau, Antonio Serpa, Thierry Val, Adrien van den Bossche, Nadine Vigouroux, Laurence Redon
2024 conf
IHM (Adjunct)
Antonio Serpa, Frédéric Vella, Nadine Vigouroux, Florence D'Inca
2024 J jnl
CoRR
Jordan Rey-Jouanchicot, André Bottaro, Eric Campo, Jean Léon Bouraoui, Nadine Vigouroux, Frédéric Vella
2024 conf
HCI (68)
Nadine Vigouroux, Jean-François Camps, Frédéric Vella
2023 conf
EICS (Workshops)
Christophe Kolski, Nadine Vigouroux, Yohan Guerrier, Frédéric Vella, Marine Guffroy
2023 J jnl
CoRR
Christophe Kolski, Nadine Vigouroux, Yohan Guerrier, Frédéric Vella, Marine Guffroy
2023 conf
HCI (10)
Nadine Vigouroux, Frédéric Vella, Gaëlle Lepage, Eric Campo
2023 J jnl
CoRR
Nadine Vigouroux, Frédéric Vella, Gaëlle Lepage, Eric Campo
2023 conf
HCI (49)
Frédéric Vella, Nathalie Dubus, Eloise Grolleau, Marjorie Deleau, Cécile Malet, Christine Gallard, Véronique Ades, Nadine Vigouroux
2023 J jnl
CoRR
Frédéric Vella, Nathalie Dubus, Eloise Grolleau, Marjorie Deleau, Cécile Malet, Christine Gallard, Véronique Ades, Nadine Vigouroux
2023 J jnl
Rev. Ouverte Intell. Artif.
Damien Brulin, Eric Campo, Thierry Val, Adrien van den Bossche, Frédéric Vella, Nadine Vigouroux
2022 J jnl
CoRR
Réjane Dalcé, Antonio Serpa, Thierry Val, Adrien van den Bossche, Frédéric Vella, Nadine Vigouroux
2022 J jnl
CoRR
Flavien Clastres-Babou, Frédéric Vella, Nadine Vigouroux, Philippe Truillet, Charline Calmels, Caroline Mercadier, Karine Gigaud, Margot Issanchou, Kristina Gourinovitch, Anne Garaix
2022 conf
ICCHP-AAATE (2)
Nadine Vigouroux, Frédéric Vella, Gaëlle Lepage, Eric Campo
2022 J jnl
CoRR
Nadine Vigouroux, Frédéric Vella, Gaëlle Lepage, Eric Campo
2022 conf
HCI (46)
Frédéric Vella, Flavien Clastres-Babou, Nadine Vigouroux, Philippe Truillet, Charline Calmels, Caroline Mercadier, Karine Gigaud, Margot Issanchou, Kristina Gourinovitch, Anne Garaix
2022 J jnl
CoRR
Frédéric Vella, Flavien Clastres-Babou, Nadine Vigouroux, Philippe Truillet, Charline Calmels, Caroline Mercadier, Karine Gigaud, Margot Issanchou, Kristina Gourinovitch, Anne Garaix
2021 conf
AHFE (11)
Adrian Roussel-Fayard, Nadine Vigouroux, Frédéric Vella, Jean-François Camps, Charlotte Tabarant
2021 conf
HCI (7)
Charline Calmels, Caroline Mercadier, Frédéric Vella, Antonio Serpa, Philippe Truillet, Nadine Vigouroux
2021 conf
HCI (45)
Ningxi Chen, Adrian Roussel-Fayard, Nadine Vigouroux, Jean-François Camps, Charlotte Tabarant, Frédéric Vella
2021 conf
IHM (Extended Abstracts)
Jean-Marc Meunier, Rozenn Baudet, Nadine Vigouroux, Frédéric Vella
2020 conf
HCI (44)
Frédéric Vella, Nadine Vigouroux, Rozenn Baudet, Antonio Serpa, Philippe Truillet, Xavier Carrau, Jean-François Camps, Caroline Mercardier, Charline Calmels, Karine Gigaud, Victoria Fourgous, Mélodie Blanchard
2020 conf
ICCHP (1)
Frédéric Vella, Nathalie Dubus, Cécile Malet, Christine Gallard, Véronique Ades, William Preel, Nadine Vigouroux
2020 B conf
AVI
Lilian Genaro Motti Ader, Brian Caulfield, Benoît Bossavit, Katerina El Raheb, Mathieu Raynal, Nadine Vigouroux, Karine Lan Hing Ting, Pourang P. Irani, Jean Vanderdonckt
2019 conf
HCI (8)
Wajih Abdallah, Frédéric Vella, Nadine Vigouroux, Adrien van den Bossche, Thierry Val
2019 conf
IHM (Adjunct)
Rozenn Baudet, Xavier Carrau, Frédéric Vella, Philippe Truillet, Jean-François Camps, Caroline Mercardier, Karine Gigaud, Victoria Fourgous, Mélodie Blanchard, Antonio Serpa, Nadine Vigouroux
2019 conf
INTERACT (4)
Lilian Genaro Motti Ader, Benoît Bossavit, Brian Caulfield, Mathieu Raynal, Karine Lan Hing Ting, Jean Vanderdonckt, Nadine Vigouroux
2018 conf
ICCHP (1)
Marine Guffroy, Yohan Guerrier, Christophe Kolski, Nadine Vigouroux, Frédéric Vella, Philippe Teutsch
2018 C conf
ICOST
Adrien van den Bossche, Nicolas Gonzalez, Thierry Val, Damien Brulin, Frédéric Vella, Nadine Vigouroux, Eric Campo
2017 conf
IHC
Lilian Genaro Motti Ader, Nadine Vigouroux, Philippe Gorce
2017 J jnl
Int. J. Sociotechnology Knowl. Dev.
Marine Guffroy, Nadine Vigouroux, Christophe Kolski, Frédéric Vella, Philippe Teutsch
2017 conf
HCI (28)
Lilian Genaro Motti Ader, Nadine Vigouroux, Philippe Gorce
2017 conf
IHM
Lilian Genaro Motti Ader, Nadine Vigouroux, Philippe Gorce
2017 conf
IHM
Damien Sauzin, Frédéric Vella, Nadine Vigouroux, Nathalie Dubus
2017 conf
AAATE Conf.
Damien Sauzin, Nadine Vigouroux, Frédéric Vella
2016 conf
Ubimob
Frédéric Vella, Nadine Vigouroux, Mathilde Blanc Machado, Adrien van den Bossche, Thierry Val
2016 conf
ICCHP (2)
Élodie Bertrand, Damien Sauzin, Frédéric Vella, Nathalie Dubus, Nadine Vigouroux
2016 conf
ICCHP (1)
Adrien van den Bossche, Eric Campo, Jenny Duchier, Elizabeth Bougeois, Mathilde Blanc Machado, Thierry Val, Frédéric Vella, Nadine Vigouroux
2016 C conf
ICOST
Elizabeth Bougeois, Jenny Duchier, Frédéric Vella, Mathilde Blanc Machado, Adrien van den Bossche, Thierry Val, Damien Brulin, Nadine Vigouroux, Eric Campo
2015 conf
IHM
Damien Sauzin, Frédéric Vella, Nadine Vigouroux
2015 conf
HCI (25)
Lilian Genaro Motti, Nadine Vigouroux, Philippe Gorce
2015 conf
DSAI
Lilian Genaro Motti, Nadine Vigouroux, Philippe Gorce
2014 conf
ICCHP (2)
Frédéric Vella, Damien Sauzin, Frédéric Philippe Truillet, Nadine Vigouroux
2014 conf
HCI (6)
Lilian Genaro Motti, Nadine Vigouroux, Philippe Gorce
2014 conf
IHM
Lilian Genaro Motti, Nadine Vigouroux, Philippe Gorce
2014 conf
ICCHP (2)
Cristina Popescu, Nadine Vigouroux, Mathieu Muratet, Julie Guillot, Petra Vlad, Frédéric Vella, Jawad Hajjam, Sylvie Ervé, Nathalie Louis, Julie Brin, Joseph Colineau, Thierry Hobé, Loïc Brimant
2013 conf
IHM
Lilian Genaro Motti, Nadine Vigouroux, Philippe Gorce
2012 conf
ICCHP (2)
Philippe Boissière, Nadine Vigouroux, Mustapha Mojahid, Frédéric Vella
2012 conf
ICCHP (1)
Guillaume Lepicard, Nadine Vigouroux
2012 conf
CogInfoCom
Pierre Rumeau, Nadine Vigouroux, B. Boudet, Guillaume Lepicard, Gábor Fazekas, F. Nourhachemi, M. Savoldelli
2012 C conf
ICOST
Viviane Pasqui, Ludovic Saint-Bauzel, Pierre Rumeau, Nadine Vigouroux
2011 conf
HCI (4)
Frédéric Vella, Nadine Vigouroux, Pierre Rumeau
2010 conf
ICCHP (1)
Youssef Bou Issa, Mustapha Mojahid, Bernard Oriola, Nadine Vigouroux
2010 conf
ICCHP (2)
Guillaume Lepicard, Nadine Vigouroux
2009 conf
INTERACT (1)
Khaldoun Al Faraj, Mustapha Mojahid, Nadine Vigouroux
2009 conf
HCI (3)
Khaldoun Al Faraj, Mustapha Mojahid, Nadine Vigouroux
2009 conf
IHM
Guillaume Lepicard, Nadine Vigouroux
2009 conf
TALN (Articles courts)
Jean Léon Bouraoui, Philippe Boissière, Mustapha Mojahid, Nadine Vigouroux, Aurélie Lagarrigue, Frédéric Vella, Jean-Luc Nespoulous
2009 A conf
ASSETS
Khaldoun Al Faraj, Nadine Vigouroux, Mustapha Mojahid
2009 conf
HCI (5)
Nadine Vigouroux, Pierre Rumeau, Frédéric Vella, Bruno Vellas
2009 conf
TALN (Articles courts)
Jean Léon Bouraoui, Nadine Vigouroux
2008 C conf
ICCHP
Khaldoun Al Faraj, Mustapha Mojahid, Nadine Vigouroux
2008 conf
IHM
Khaldoun Al Faraj, Nadine Vigouroux, Mustapha Mojahid
2007 conf
HCI (7)
Guillaume Lepicard, Frédéric Vella, Nadine Vigouroux, Benoît Rigolleau, David Chautard, Elian Pucheu
2006 J jnl
Document Numérique
Fabrice Maurel, Mustapha Mojahid, Nadine Vigouroux, Jacques Virbel
2005 conf
DiSS
Jean Léon Bouraoui, Nadine Vigouroux
2005 conf
CHI Extended Abstracts
Mathieu Raynal, Nadine Vigouroux
2005 conf
IHM
Frédéric Vella, Agnès Collignon, Amélie David, Valérie Chabbert, Nadine Vigouroux
2005 conf
IHM
Frédéric Vella, Mathieu Raynal, Philippe Boissière, Nadine Vigouroux
2004 conf
IHM
Frédéric Vella, Nadine Vigouroux, Philippe Truillet
2004 conf
Mobile HCI
Laurent Magnien, Jean Léon Bouraoui, Nadine Vigouroux
2004 conf
UbiMob
Laurent Magnien, Jean Léon Bouraoui, Nadine Vigouroux
2004 B conf
LREC
Laurence Devillers, Hélène Maynard, Sophie Rosset, Patrick Paroubek, Kevin McTait, Djamel Mostefa, Khalid Choukri, Laurent Charnay, Caroline Bousquet, Nadine Vigouroux, Frédéric Béchet, Laurent Romary, Jean-Yves Antoine, Jeanne Villaneau, Myriam Vergnes, Jérôme Goulian
2003 conf
HCI (4)
Fabrice Maurel, Mathieu Raynal, Bernard Oriola, Nadine Vigouroux
2002 C conf
ICCHP
Régis Privat, Nadine Vigouroux, Philippe Truillet, Bernard Oriola
2002 B conf
LREC
Jean-Yves Antoine, Caroline Bousquet-Vernhettes, Jérôme Goulian, Mohamed Zakaria Kurdi, Sophie Rosset, Nadine Vigouroux, Jeanne Villaneau
2002 A conf
INTERSPEECH
Caroline Bousquet-Vernhettes, Nadine Vigouroux
2001 Misc conf
HCI
Régis Privat, Nadine Vigouroux, Caroline Bousquet, Philippe Truillet, Bernard Oriola
1995 conf
EUROSPEECH
Eric Brison, Nadine Vigouroux
1994 C conf
ICCHP
Nadine Vigouroux, Bernard Oriola
1991 conf
EUROSPEECH
Harouna Kabré, Guy Perennou, Nadine Vigouroux
1989 conf
EUROSPEECH
C. Dours, Martine de Calmès, Harouna Kabré, J. M. Pecatte, Guy Perennou, Nadine Vigouroux
1989 conf
EUROSPEECH
A. van Erp, C. G. J. Houben, William J. Barry, Martine Grice, Louis-Jean Boë, G. Braun, Piero Cosi, N. Dyhr, Guy Perennou, Nadine Vigouroux, Denis Autesserre
1989 conf
EUROSPEECH
Guy Perennou, Nadine Vigouroux, Louis-Jean Boë, Geneviève Caelen-Haumont, Denis Autesserre, Dominique Fohr
1989 conf
EUROSPEECH
Denis Autesserre, Benoit Galindo, Bernard Teston, Nadine Vigouroux
1987 conf
ECST
Denis Autesserre, C. Barrera, Robert Espesser, Guy Perennou, Mario Rossi, Bernard Teston, Nadine Vigouroux
1987 conf
ECST
Nadine Vigouroux
1986 Misc conf
ICASSP
Jean Caelen, Nadine Vigouroux
1983 J jnl
Speech Commun.
G. Caelen, Nadine Vigouroux
1983 J jnl
Speech Commun.
Jean Caelen, Nadine Vigouroux, Guy Perennou
redb/extractors/pe_extractors/pe_signature_old.py
← Index redb/extractors/pe_extractors/pe_signature_old.py python
import inspect
import pefile

from hashlib import md5, sha1, sha256

from asn1crypto import cms, pem, x509, core

from redb.extractors.enum import Tag
from redb.extractors.pe_extractor import PEExtractor
from redb.models.dataclasses import PECertificate, PESigner


class PESignatureExtractor(PEExtractor):
    """
    RFC 3161 - Internet X.509 Public Key Infrastructure Time-Stamp Protocol (TSP)
    Section 2.4.2 defines the TSTInfo structure.
    https://tools.ietf.org/html/rfc3161#section-2.4.2

    Microsoft Authenticode Time Stamping Specification
    https://download.microsoft.com/download/9/c/5/9c5b2167-8017-4bae-9fde-d599bac8184a/Authenticode_PE.docx
    """

    def __init__(
        self,
        filepath,
        log,
        index_prefix=None,
        elastic_index=None,
        known_benign=False,
        known_malicious=False,
        pe=None,
    ):
        super().__init__(
            filepath,
            log,
            index_prefix,
            elastic_index,
            known_benign,
            known_malicious,
            pe,
        )
        self.elastic_index = self.index_prefix + "-pe_signature"
        self.log.debug(inspect.currentframe().f_code.co_name)

    def tag(self):
        return Tag.PE_SIGNATURE.value

    @staticmethod
    def _extract_certificate_info(cert_data):
        # self.log.debug(inspect.currentframe().f_code.co_name)

        certificate = x509.Certificate.load(cert_data)
        certificate_serial_number = format(certificate.serial_number, "x").upper()
        grouped_serial_number = ":".join(
            [
                certificate_serial_number[i : i + 2]
                for i in range(0, len(certificate_serial_number), 2)
            ]
        )
        return PECertificate(
            _id=format(certificate.serial_number, "x").upper(),
            certificate_serial_number=grouped_serial_number,
            certificate_issuer=certificate.issuer.human_friendly,
            certificate_subject=certificate.subject.human_friendly,
            certificate_valid_from=certificate["tbs_certificate"]["validity"][
                "not_before"
            ].native.strftime("%Y-%m-%d %H:%M:%S"),
            certificate_valid_to=certificate["tbs_certificate"]["validity"][
                "not_after"
            ].native.strftime("%Y-%m-%d %H:%M:%S"),
            certificate_thumbprint=sha1(cert_data).hexdigest().upper(),
            certificate_md5=md5(cert_data).hexdigest().upper(),
            certificate_sha256=sha256(cert_data).hexdigest().upper(),
        )

    @staticmethod
    def _parse_microsoft_time_stamp(ts_token):
        class TSTInfo(core.Sequence):
            _fields = [
                ("version", core.Integer),
                ("policy_id", core.ObjectIdentifier),
                ("message_imprint", core.Sequence),
                ("serial_number", core.Integer),
                ("gen_time", core.GeneralizedTime),
                ("accuracy", core.Sequence, {"optional": True}),
                ("ordering", core.Boolean, {"optional": True}),
                ("nonce", core.Integer, {"optional": True}),
                ("tsa", core.Sequence, {"optional": True}),
                ("extensions", core.Sequence, {"optional": True}),
            ]

        # The content should be SignedData
        signed_data = ts_token["content"]

        # The actual timestamp should be in the encapContentInfo
        encap_content_info = signed_data["encap_content_info"]
        tst_info = TSTInfo.load(encap_content_info["content"])

        # Extract the genTime field from TSTInfo, type(genTime): <class 'datetime.datetime'>
        gen_time = tst_info["gen_time"].native

        return gen_time

    def _extract_signer_info(self, signer):
        self.log.debug(inspect.currentframe().f_code.co_name)
        signing_time = None

        for attr_set in [signer["signed_attrs"], signer["unsigned_attrs"]]:
            if attr_set:
                for attribute in attr_set:
                    attr_type = attribute["type"].dotted
                    if attr_type == "1.2.840.113549.1.9.5":  # signingTime
                        signing_time = attribute["values"][0].native
                        break
                    elif (
                        attr_type == "1.3.6.1.4.1.311.3.2.1"
                        or attr_type == "1.3.6.1.4.1.311.3.3.1"
                    ):  # microsoft_time_stamp_token
                        try:
                            ts_token = attribute["values"][0].native
                            signing_time = self._parse_microsoft_time_stamp(ts_token)
                            self.log.debug(
                                f"Signing Time from Microsoft Time Stamp Token: {signing_time}"
                            )
                        except Exception as e:
                            self.log.error(
                                f"Error parsing Microsoft Time Stamp Token: {e}"
                            )
                            self.log.error("Token structure:", attribute["values"][0])
                    elif attr_type == "1.2.840.113549.1.9.6":  # counterSignature
                        counter_sig_values = attribute["values"]
                        for counter_sig_value in counter_sig_values:
                            try:
                                counter_sig_info = cms.SignerInfo.load(
                                    counter_sig_value.native
                                )
                                cs_signed_attrs = counter_sig_info["signed_attrs"]
                                for cs_attr in cs_signed_attrs:
                                    cs_attr_type = cs_attr["type"].dotted
                                    if (
                                        cs_attr_type == "1.2.840.113549.1.9.5"
                                    ):  # signingTime
                                        signing_time = cs_attr["values"][0].native
                                        self.log.debug(
                                            "Signing Time (from countersignature):",
                                            signing_time,
                                        )
                                        break
                                if signing_time:
                                    break
                            except Exception as e:
                                self.log.error(
                                    f"Error processing countersignature: {e}"
                                )
                    if signing_time:
                        break
            if signing_time:
                break
        signer_serial_number = format(
            signer["sid"].native["serial_number"], "x"
        ).upper()
        grouped_serial_number = " ".join(
            [
                signer_serial_number[i : i + 2]
                for i in range(0, len(signer_serial_number), 2)
            ]
        )
        return PESigner(
            # this is to avoid duplicate _id with the Signer certificate used to sign as they are in the same ES index
            _id=format(signer["sid"].native["serial_number"], "x").upper()
            + signer["digest_algorithm"]["algorithm"].native,
            signer_serial_number=grouped_serial_number,
            signer_digest_algorithm=signer["digest_algorithm"]["algorithm"].native,
            signer_signature_algorithm=signer["signature_algorithm"][
                "algorithm"
            ].native,
            signing_time=(
                signing_time.strftime("%Y-%m-%d %H:%M:%S") if signing_time else None
            ),
            # "countersigners": extract_countersigners(signer), # TODO: Implement this
        )

    def _extract_signature_info(self):
        self.log.debug(inspect.currentframe().f_code.co_name)
        address = self.pe.OPTIONAL_HEADER.DATA_DIRECTORY[
            pefile.DIRECTORY_ENTRY["IMAGE_DIRECTORY_ENTRY_SECURITY"]
        ].VirtualAddress
        size = self.pe.OPTIONAL_HEADER.DATA_DIRECTORY[
            pefile.DIRECTORY_ENTRY["IMAGE_DIRECTORY_ENTRY_SECURITY"]
        ].Size

        addr_8 = address + 8
        signature_data = bytes(
            self.pe.write()[addr_8 : addr_8 + size]  # noqa E203
        )  # Ensure this is a bytes object
        if pem.detect(signature_data):
            signature_data = pem.unarmor(signature_data)

        content_info = cms.ContentInfo.load(signature_data)
        signed_data = content_info["content"]

        certificates = signed_data["certificates"]
        signers = signed_data["signer_infos"]

        certificates_list = []
        for cert in certificates:
            cert_info = self._extract_certificate_info(cert.chosen.dump())
            certificates_list.append(cert_info)

        signer_info_list = []
        for signer in signers:
            signer_info = self._extract_signer_info(signer)
            signer_info_list.append(signer_info)

        return certificates_list, signer_info_list

    def extract(self):
        try:
            self.log.debug(inspect.currentframe().f_code.co_name)
            if self._is_signed():
                certificates_list, signers_list = self._extract_signature_info()
                # self.export_to_elastic([PECodeSigning(certificates_list, signers_list)])
                self.export_to_elastic(certificates_list, Tag.PE_CERTIFICATE.value)
                self.export_to_elastic(signers_list, Tag.PE_SIGNER.value)
            return True
        except Exception as e:
            self.log.error(f"Error extracting PE Signature: {e}")
            return None