Odalric-Ambrym Maillard

110 papers A* 18A 5B 8C 5Journal 57Unranked 15
YearRankTypeTitle / Venue / Authors
2025 C conf
CoG
Anthony Kobanda, Odalric-Ambrym Maillard, Rémy Portelas
2025 J jnl
CoRR
Anthony Kobanda, Odalric-Ambrym Maillard, Rémy Portelas
2025 J jnl
CoRR
Adrien Prévost, Timothée Mathieu, Odalric-Ambrym Maillard
2025 J jnl
CoRR
Waris Radji, Odalric-Ambrym Maillard
2025 J jnl
CoRR
Frédérick Fabre Ferber, Dominique Gay, Jean-Christophe Soulié, Jean Diatta, Odalric-Ambrym Maillard
2025 J jnl
CoRR
Frédérick Fabre Ferber, Dominique Gay, Jean-Christophe Soulié, Jean Diatta, Odalric-Ambrym Maillard
2025 J jnl
CoRR
Sumit Vashishtha, Odalric-Ambrym Maillard
2025 A* conf
ICML
Tuan Dam, Pascal Stenger, Lukas Schneider, Joni Pajarinen, Carlo D'Eramo, Odalric-Ambrym Maillard
2025 J jnl
CoRR
Anthony Kobanda, Waris Radji, Mathieu Petitbois, Odalric-Ambrym Maillard, Rémy Portelas
2025 J jnl
CoRR
Waris Radji, Odalric-Ambrym Maillard
2025 J jnl
CoRR
Victor Boone, Odalric-Ambrym Maillard
2024 J jnl
Trans. Mach. Learn. Res.
Timothée Mathieu, Matheus Centa, Riccardo Della Vecchia, Hector Kohler, Alena Shilova, Odalric-Ambrym Maillard, Philippe Preux
2024 J jnl
Trans. Mach. Learn. Res.
Timothée Mathieu, Debabrota Basu, Odalric-Ambrym Maillard
2024 J jnl
RLJ
Hassan Saber, Odalric-Ambrym Maillard
2024 B conf
ALT
Shubhada Agrawal, Timothée Mathieu, Debabrota Basu, Odalric-Ambrym Maillard
2024 J jnl
CoRR
Anthony Kobanda, Rémy Portelas, Odalric-Ambrym Maillard, Ludovic Denoyer
2024 J jnl
CoRR
Odalric-Ambrym Maillard, Mohammad Sadegh Talebi
2024 A conf
UAI
Tuan Dam, Odalric-Ambrym Maillard, Emilie Kaufmann
2024 J jnl
CoRR
Tuan Dam, Odalric-Ambrym Maillard, Emilie Kaufmann
2024 J jnl
CoRR
Hippolyte Bourel, Anders Jonsson, Odalric-Ambrym Maillard, Chenxiao Ma, Mohammad Sadegh Talebi
2024 conf
EGC
Frédérick Fabre Ferber, Dominique Gay, Jean-Christophe Soulié, Jean Diatta, Odalric-Ambrym Maillard
2023 J jnl
CoRR
Timothée Mathieu, Riccardo Della Vecchia, Alena Shilova, Matheus Centa de Medeiros, Hector Kohler, Odalric-Ambrym Maillard, Philippe Preux
2023 J jnl
CoRR
Shubhada Agrawal, Timothée Mathieu, Debabrota Basu, Odalric-Ambrym Maillard
2023 A conf
AISTATS
Hippolyte Bourel, Anders Jonsson, Odalric-Ambrym Maillard, Mohammad Sadegh Talebi
2023 A* conf
NeurIPS
Dorian Baudry, Fabien Pesquerel, Rémy Degenne, Odalric-Ambrym Maillard
2023 C conf
ACML
Hassan Saber, Fabien Pesquerel, Odalric-Ambrym Maillard, Mohammad Sadegh Talebi
2023 J jnl
CoRR
Tuan Dam, Pascal Stenger, Lukas Schneider, Joni Pajarinen, Carlo D'Eramo, Odalric-Ambrym Maillard
2022 J jnl
Comput. Networks
Kinda Khawam, Hassan Fawaz, Samer Lahoud, Odalric-Ambrym Maillard, Steven Martin
2022 J jnl
CoRR
Debabrota Basu, Odalric-Ambrym Maillard, Timothée Mathieu
2022 J jnl
CoRR
Reda Ouhamma, Debabrota Basu, Odalric-Ambrym Maillard
2022 J jnl
CoRR
Sayak Ray Chowdhury, Patrick Saux, Odalric-Ambrym Maillard, Aditya Gopalan
2022 J jnl
CoRR
Mahsa Asadi, Aurélien Bellet, Odalric-Ambrym Maillard, Marc Tommasi
2022 J jnl
Trans. Mach. Learn. Res.
Mahsa Asadi, Aurélien Bellet, Odalric-Ambrym Maillard, Marc Tommasi
2022 J jnl
J. Mach. Learn. Res.
Lilian Besson, Emilie Kaufmann, Odalric-Ambrym Maillard, Julien Seznec
2022 A* conf
NeurIPS
Fabien Pesquerel, Odalric-Ambrym Maillard
2022 J jnl
Comput. Electron. Agric.
Romain Gautron, Odalric-Ambrym Maillard, Philippe Preux, Marc Corbeels, Régis Sabbadin
2022 J jnl
CoRR
Patrick Saux, Odalric-Ambrym Maillard
2022 J jnl
CoRR
Romain Gautron, Emilio J. Padrón, Philippe Preux, Julien Bigot, Odalric-Ambrym Maillard, David Emukpere
2021 A* conf
NeurIPS
Dorian Baudry, Patrick Saux, Odalric-Ambrym Maillard
2021 J jnl
CoRR
Dorian Baudry, Patrick Saux, Odalric-Ambrym Maillard
2021 A* conf
NeurIPS
Hassan Saber, Pierre Ménard, Odalric-Ambrym Maillard
2021 J jnl
CoRR
Hassan Saber, Pierre Ménard, Odalric-Ambrym Maillard
2021 A* conf
ICLR
Yannis Flet-Berliac, Reda Ouhamma, Odalric-Ambrym Maillard, Philippe Preux
2021 A* conf
NeurIPS
Reda Ouhamma, Odalric-Ambrym Maillard, Vianney Perchet
2021 A conf
AISTATS
Sayak Ray Chowdhury, Aditya Gopalan, Odalric-Ambrym Maillard
2021 conf
ECML/PKDD (1)
Hassan Saber, Léo Saci, Odalric-Ambrym Maillard, Audrey Durand
2021 A* conf
NeurIPS
Reda Ouhamma, Odalric-Ambrym Maillard, Vianney Perchet
2021 A* conf
NeurIPS
Fabien Pesquerel, Hassan Saber, Odalric-Ambrym Maillard
2020 J jnl
CoRR
Hassan Saber, Pierre Ménard, Odalric-Ambrym Maillard
2020 J jnl
CoRR
Mohammad Sadegh Talebi, Anders Jonsson, Odalric-Ambrym Maillard
2020 J jnl
CoRR
Yannis Flet-Berliac, Reda Ouhamma, Odalric-Ambrym Maillard, Philippe Preux
2020 C conf
ACML
Edouard Leurent, Odalric-Ambrym Maillard
2020 J jnl
CoRR
Hassan Saber, Pierre Ménard, Odalric-Ambrym Maillard
2020 J jnl
CoRR
Edouard Leurent, Denis V. Efimov, Odalric-Ambrym Maillard
2020 A* conf
NeurIPS
Edouard Leurent, Odalric-Ambrym Maillard, Denis V. Efimov
2020 conf
CDC
Edouard Leurent, Denis V. Efimov, Odalric-Ambrym Maillard
2020 J jnl
CoRR
Edouard Leurent, Denis V. Efimov, Odalric-Ambrym Maillard
2020 A* conf
NeurIPS
Dorian Baudry, Emilie Kaufmann, Odalric-Ambrym Maillard
2020 J jnl
CoRR
Dorian Baudry, Emilie Kaufmann, Odalric-Ambrym Maillard
2020 J jnl
CoRR
Dorian Baudry, Romain Gautron, Emilie Kaufmann, Odalric-Ambrym Maillard
2020 J jnl
CoRR
Hippolyte Bourel, Odalric-Ambrym Maillard, Mohammad Sadegh Talebi
2019 J jnl
CoRR
Edouard Leurent, Yann Blanco, Denis V. Efimov, Odalric-Ambrym Maillard
2019 A* conf
NeurIPS
Nicolas Carrara, Edouard Leurent, Romain Laroche, Tanguy Urvoy, Odalric-Ambrym Maillard, Olivier Pietquin
2019 J jnl
CoRR
Subhojyoti Mukherjee, Odalric-Ambrym Maillard
2019 A* conf
NeurIPS
Mohammad Sadegh Talebi, Odalric-Ambrym Maillard
2019 J jnl
CoRR
M. Sadegh Talebi, Odalric-Ambrym Maillard
2019 book
Odalric-Ambrym Maillard
2019 C conf
ACML
Mahsa Asadi, Mohammad Sadegh Talebi, Hippolyte Bourel, Odalric-Ambrym Maillard
2019 J jnl
CoRR
Mahsa Asadi, Mohammad Sadegh Talebi, Hippolyte Bourel, Odalric-Ambrym Maillard
2019 conf
ECML/PKDD (3)
Edouard Leurent, Odalric-Ambrym Maillard
2019 J jnl
CoRR
Edouard Leurent, Odalric-Ambrym Maillard
2019 A* conf
NeurIPS
Ronald Ortner, Matteo Pirotta, Alessandro Lazaric, Ronan Fruit, Odalric-Ambrym Maillard
2019 J jnl
CoRR
Nicolas Carrara, Edouard Leurent, Romain Laroche, Tanguy Urvoy, Odalric-Ambrym Maillard, Olivier Pietquin
2019 B conf
ALT
Odalric-Ambrym Maillard
2018 J jnl
J. Mach. Learn. Res.
Audrey Durand, Odalric-Ambrym Maillard, Joelle Pineau
2018 B conf
ALT
Mohammad Sadegh Talebi, Odalric-Ambrym Maillard
2018 J jnl
CoRR
Mohammad Sadegh Talebi, Odalric-Ambrym Maillard
2017 B conf
ALT
Odalric-Ambrym Maillard
2017 B conf
ALT
Jaouad Mourtada, Odalric-Ambrym Maillard
2017 J jnl
CoRR
Jaouad Mourtada, Odalric-Ambrym Maillard
2017 A* conf
ICML
Borja Balle, Odalric-Ambrym Maillard
2017 J jnl
CoRR
Audrey Durand, Odalric-Ambrym Maillard, Joelle Pineau
2017 J jnl
Int. J. Data Sci. Anal.
Robin Allesiardo, Raphaël Féraud, Odalric-Ambrym Maillard
2016 J jnl
CoRR
Aditya Gopalan, Odalric-Ambrym Maillard, Mohammadi Zaki
2016 A* conf
ICML
Akram Erraqabi, Michal Valko, Alexandra Carpentier, Odalric-Ambrym Maillard
2016 J jnl
CoRR
Robin Allesiardo, Raphaël Féraud, Odalric-Ambrym Maillard
2014 conf
NIPS
Odalric-Ambrym Maillard, Timothy A. Mann, Shie Mannor
2014 A* conf
ICML
Odalric-Ambrym Maillard, Shie Mannor
2014 B conf
ALT
Ronald Ortner, Odalric-Ambrym Maillard, Daniil Ryabko
2014 J jnl
CoRR
Ronald Ortner, Odalric-Ambrym Maillard, Daniil Ryabko
2014 conf
ECML/PKDD (1)
Akram Baransi, Odalric-Ambrym Maillard, Shie Mannor
2013 A conf
AISTATS
Phuong Nguyen, Odalric-Ambrym Maillard, Daniil Ryabko, Ronald Ortner
2013 J jnl
CoRR
Odalric-Ambrym Maillard, Phuong Nguyen, Ronald Ortner, Daniil Ryabko
2013 conf
ICML (1)
Odalric-Ambrym Maillard, Phuong Nguyen, Ronald Ortner, Daniil Ryabko
2013 B conf
ALT
Odalric-Ambrym Maillard
2013 J jnl
CoRR
Odalric-Ambrym Maillard, Rémi Munos, Daniil Ryabko
2012 conf
NIPS
Odalric-Ambrym Maillard
2012 J jnl
J. Mach. Learn. Res.
Odalric-Ambrym Maillard, Rémi Munos
2012 conf
NIPS
Alexandra Carpentier, Odalric-Ambrym Maillard
2011
Odalric-Ambrym Maillard
2011 A* conf
COLT
Odalric-Ambrym Maillard, Rémi Munos, Gilles Stoltz
2011 A conf
AISTATS
Odalric-Ambrym Maillard, Rémi Munos
2011 conf
NIPS
Odalric-Ambrym Maillard, Rémi Munos, Daniil Ryabko
2011 conf
NIPS
Alexandra Carpentier, Odalric-Ambrym Maillard, Rémi Munos
2010 C conf
ACML
Odalric-Ambrym Maillard, Rémi Munos, Alessandro Lazaric, Mohammad Ghavamzadeh
2010 conf
NIPS
Mohammad Ghavamzadeh, Alessandro Lazaric, Odalric-Ambrym Maillard, Rémi Munos
2010 conf
ECML/PKDD (2)
Odalric-Ambrym Maillard, Rémi Munos
2010 conf
NIPS
Odalric-Ambrym Maillard, Rémi Munos
2009 B conf
ALT
Odalric-Ambrym Maillard, Nicolas Vayatis
2009 conf
NIPS
Odalric-Ambrym Maillard, Rémi Munos
redb/extractors/pe_extractors/pe_inconsistency_tests.py
← Index redb/extractors/pe_extractors/pe_inconsistency_tests.py python
import inspect
from redb.ext.spoof_check import (
    Result,
    checksum_test,
    duplicate_test,
    import_count_test,
    linker_test,
)
from redb.extractors.enum import Tag
from redb.extractors.pe_extractor import PEExtractor
from redb.models.dataclasses import (
    DotNetInconsistencyTests,
    PEInconsistencyTests,
)
from datetime import datetime, timezone
from typing import Any


class PEInconstistencyTestsExtractor(PEExtractor):
    """Collection of functions to perform features inconsistency tests

    A Test where the result is True means that there is an inconsistency.
    At the moments it runs a series of inconsistency tests on PE metadata from
    - spoof_check
    - pescanner
    - dotnetfile
    """

    def __init__(
        self,
        filepath,
        log,
        exporters=None,
        index_prefix=None,
        elastic_index=None,
        known_benign=False,
        known_malicious=False,
        pe=None,
        dotnet=None,
    ):
        super().__init__(
            filepath,
            log,
            exporters,
            index_prefix,
            elastic_index,
            known_benign,
            known_malicious,
            pe,
        )
        self.dotnet = dotnet if dotnet else None
        self.pe_inconsistency_tests = None
        self.dotnet_inconsistency_tests = None
        self.elastic_index = self.index_prefix + "-pe_inconsistency_tests"

    def tag(self):
        return [Tag.PE_INCONSISTENCY_TESTS.value, Tag.DOTNET_INCONSISTENCY_TESTS.value]

    def extract(self):
        self.log.debug(inspect.currentframe().f_code.co_name)
        tests_performed = False

        # Handle PE rich header tests
        try:
            rich_header = self.pe.parse_rich_header()
            if rich_header:
                self.pe_inconsistency_tests = PEInconsistencyTests(
                    test_rich_header_checksum=checksum_test(self.pe, rich_header) == Result.INVALID,
                    test_rich_header_duplicate=duplicate_test(self.pe, rich_header) == Result.INVALID,
                    test_rich_header_linker=linker_test(self.pe, rich_header) == Result.INVALID,
                    test_rich_header_import_count=import_count_test(self.pe, rich_header) == Result.INVALID,
                )
                tests_performed = True
            else:
                self.pe_inconsistency_tests = PEInconsistencyTests(
                    test_rich_header_checksum=None,
                    test_rich_header_duplicate=None,
                    test_rich_header_linker=None,
                    test_rich_header_import_count=None,
                )
        except Exception as e:
            self.log.error(f"Error processing rich header tests for {self.hash.sha256}: {e}")
            self.pe_inconsistency_tests = None

            # self.export_to_elastic([self.pe_inconsistency_tests])

        # Handle .NET tests
        try:
            if self._check_dotnet():
                if not self.dotnet:
                    self.dotnet, self.error = self._generate_dotnetfile_object()
                if self.error:
                    self.log.error(f"Error generating .NET object {self.hash.sha256}: {self.error}")
                self.dotnet_inconsistency_tests = DotNetInconsistencyTests(
                    test_dotnet_data_dir_hidden=self.dotnet.AntiMetadataAnalysis.is_dotnet_data_directory_hidden,
                    test_dotnet_extra_data=self.dotnet.AntiMetadataAnalysis.has_metadata_table_extra_data,
                    test_dotnet_fake_types=self.dotnet.AntiMetadataAnalysis.has_self_referenced_typeref_entries,
                    test_dotnet_invalid_type_ref=self.dotnet.AntiMetadataAnalysis.has_invalid_typeref_entries,
                    test_dotnet_fake_datastreams=self.dotnet.AntiMetadataAnalysis.has_fake_data_streams,
                    test_dotnet_extra_module_table=self.dotnet.AntiMetadataAnalysis.module_table_has_multiple_rows,
                    test_dotnet_extra_assembly_table=self.dotnet.AntiMetadataAnalysis.assembly_table_has_multiple_rows,
                    test_dotnet_invalid_strings_stream=self.dotnet.AntiMetadataAnalysis.has_invalid_strings_stream_entries,
                    test_dotnet_streams_mixed_case=self.dotnet.AntiMetadataAnalysis.has_mixed_case_stream_names,
                    test_dotnet_method_def_invalid_table=self.dotnet.AntiMetadataAnalysis.has_invalid_methoddef_entries,
                    test_dotnet_max_len_exceeding_strings=self.dotnet.AntiMetadataAnalysis.has_max_len_exceeding_strings,
                )
                tests_performed = True
        except Exception as e:
            self.log.error(f"Error processing .NET tests for {self.hash.sha256}: {e}")
            self.dotnet_inconsistency_tests = None

        # self.export_to_elastic([self.dotnet_inconsistency_tests])

        # If no tests were performed, return False to skip database insertion
        if not tests_performed:
            self.log.info("No inconsistency tests were performed.")
            return False

        return True

    def prepare_export_data(self, exporter_type: str) -> Any:
        if exporter_type == "ElasticsearchExporter":
            return [self.pe_inconsistency_tests, self.dotnet_inconsistency_tests]
        elif exporter_type == "ClickHouseExporter":
            current_time = datetime.now(timezone.utc)

            # For PE tests: if no rich header (all True), store NULL instead
            has_rich_header = any([
                hasattr(self.pe_inconsistency_tests, 'test_rich_header_checksum'),
                hasattr(self.pe_inconsistency_tests, 'test_rich_header_duplicate'),
                hasattr(self.pe_inconsistency_tests, 'test_rich_header_linker'),
                hasattr(self.pe_inconsistency_tests, 'test_rich_header_import_count')
            ])
            
            pe_tests = [
                None if not has_rich_header else self.pe_inconsistency_tests.test_rich_header_checksum,
                None if not has_rich_header else self.pe_inconsistency_tests.test_rich_header_duplicate,
                None if not has_rich_header else self.pe_inconsistency_tests.test_rich_header_linker,
                None if not has_rich_header else self.pe_inconsistency_tests.test_rich_header_import_count,
            ]
            
            # For .NET tests: if not a .NET file, store NULL instead of False
            dotnet_tests = [
                self.dotnet_inconsistency_tests.test_dotnet_data_dir_hidden if self.dotnet_inconsistency_tests else None,
                self.dotnet_inconsistency_tests.test_dotnet_extra_data if self.dotnet_inconsistency_tests else None,
                self.dotnet_inconsistency_tests.test_dotnet_fake_types if self.dotnet_inconsistency_tests else None,
                self.dotnet_inconsistency_tests.test_dotnet_invalid_type_ref if self.dotnet_inconsistency_tests else None,
                self.dotnet_inconsistency_tests.test_dotnet_fake_datastreams if self.dotnet_inconsistency_tests else None,
                self.dotnet_inconsistency_tests.test_dotnet_extra_module_table if self.dotnet_inconsistency_tests else None,
                self.dotnet_inconsistency_tests.test_dotnet_extra_assembly_table if self.dotnet_inconsistency_tests else None,
                self.dotnet_inconsistency_tests.test_dotnet_invalid_strings_stream if self.dotnet_inconsistency_tests else None,
                self.dotnet_inconsistency_tests.test_dotnet_streams_mixed_case if self.dotnet_inconsistency_tests else None,
                self.dotnet_inconsistency_tests.test_dotnet_method_def_invalid_table if self.dotnet_inconsistency_tests else None,
                self.dotnet_inconsistency_tests.test_dotnet_max_len_exceeding_strings if self.dotnet_inconsistency_tests else None,
            ]
            
            data = [[
                self.sha256,
                self.md5,
                self.sha1,
                *pe_tests,
                *dotnet_tests,
                current_time
            ]]

            column_names = [
                'sha256', 'md5', 'sha1',
                'test_rich_header_checksum', 'test_rich_header_duplicate', 'test_rich_header_linker', 'test_rich_header_import_count',
                'test_dotnet_data_dir_hidden', 'test_dotnet_extra_data',
                'test_dotnet_fake_types', 'test_dotnet_invalid_type_ref',
                'test_dotnet_fake_datastreams', 'test_dotnet_extra_module_table',
                'test_dotnet_extra_assembly_table', 'test_dotnet_invalid_strings_stream',
                'test_dotnet_streams_mixed_case', 'test_dotnet_method_def_invalid_table',
                'test_dotnet_max_len_exceeding_strings', 'analysis_date'
            ]
            
            column_type_names = [
                'FixedString(64)', 'FixedString(32)', 'FixedString(40)',
                'Nullable(Boolean)', 'Nullable(Boolean)', 'Nullable(Boolean)', 'Nullable(Boolean)',
                'Nullable(Boolean)', 'Nullable(Boolean)', 'Nullable(Boolean)', 'Nullable(Boolean)',
                'Nullable(Boolean)', 'Nullable(Boolean)', 'Nullable(Boolean)', 'Nullable(Boolean)',
                'Nullable(Boolean)', 'Nullable(Boolean)', 'Nullable(Boolean)',
                'DateTime64(3, \'UTC\')'
            ]

            if not data:
                return None

            return (data, column_names, column_type_names)

    def get_clickhouse_table(self) -> str:
        return "redb_pe_inconsistency_tests"