Olivier Michel

43 papers B 1C 1Misc 1Journal 13Unranked 20
YearRankTypeTitle / Venue / Authors
2022 conf
SIGCSE (1)
Anne-Laure Ligozat, Kevin Marquet, Aurélie Bugeau, Julien Lefèvre, Pierre Boulet, Sylvain Bouveret, Philippe Marquet, Olivier Ridoux, Olivier Michel
2015 conf
ECAL
Jonathan Pascalie, Martin Potier, Taras Kowaliw, Jean-Louis Giavitto, Olivier Michel, Antoine Spicher, René Doursat
2013 J jnl
Nat. Comput.
René Doursat, Hiroki Sayama, Olivier Michel
2013 conf
MCM
Louis Bigo, Moreno Andreatta, Jean-Louis Giavitto, Olivier Michel, Antoine Spicher
2013 J jnl
Comput. J.
Jacob Beal, Stefan Dulman, Olivier Michel, Antoine Spicher
2013 conf
SIGSIM-PADS
Martin Potier, Antoine Spicher, Olivier Michel
2013 J jnl
Int. J. Unconv. Comput.
Jean-Louis Giavitto, Olivier Michel, Antoine Spicher
2012 conf
UCNC
Susan Stepney, Ada Diaconescu, René Doursat, Jean-Louis Giavitto, Taras Kowaliw, Ottoline Leyser, Bruce J. MacLennan, Olivier Michel, Julian F. Miller, Igor Nikolic, Antoine Spicher, Christof Teuscher, Gunnar Tufte, Francisco J. Vico, Lidia Yamamoto
2012 ch.
Morphogenetic Engineering, Toward Programmable Complex Systems
Antoine Spicher, Olivier Michel, Jean-Louis Giavitto
2012 book
René Doursat, Hiroki Sayama, Olivier Michel
2012 ch.
Morphogenetic Engineering, Toward Programmable Complex Systems
René Doursat, Hiroki Sayama, Olivier Michel
2012 conf
UCNC
Antoine Spicher, Olivier Michel, Jean-Louis Giavitto
2011 J jnl
Theory Biosci.
Vic Norris, Abdallah Zemirline, Patrick Amar, Jean Nicolas Audinot, Pascal Ballet, Eshel Ben-Jacob, Gilles Bernot, Guillaume Beslon, Armelle Cabin, Eric Fanchon, Jean-Louis Giavitto, Nicolas Glade, Patrick Greussay, Yohann Grondin, James A. Foster, Guillaume Hutzler, Jürgen Jost, François Képès, Olivier Michel, Franck Molina, Jacqueline Signorini, Pasquale Stano, Alain R. Thierry
2011 J jnl
ACM Trans. Auton. Adapt. Syst.
Jacob Beal, Olivier Michel, Ulrik Pagh Schultz
2010 B conf
ICGT
Antoine Spicher, Olivier Michel, Jean-Louis Giavitto
2010 conf
SASO Workshops
Antoine Spicher, Olivier Michel, Jean-Louis Giavitto
2010 conf
SASO Workshops
Louis Bigo, Antoine Spicher, Olivier Michel
2010 J jnl
CoRR
Julien Cohen, Jean-Louis Giavitto, Olivier Michel
2009 J jnl
Nat. Comput.
Olivier Michel, Antoine Spicher, Jean-Louis Giavitto
2008 ch.
Software-Intensive Systems and New Computing Paradigms
Jean-Louis Giavitto, Olivier Michel, Antoine Spicher
2008 J jnl
Biosyst.
Antoine Spicher, Olivier Michel, Mikolaj Cieslak, Jean-Louis Giavitto, Przemyslaw Prusinkiewicz
2007 J jnl
Biosyst.
Antoine Spicher, Olivier Michel
2007 J jnl
Tech. Sci. Informatiques
Antoine Spicher, Olivier Michel
2007 book
Olivier Michel
2006 J jnl
Int. J. Unconv. Comput.
Olivier Michel, Jean-Pierre Banâtre, Pascal Fradet, Jean-Louis Giavitto
2005 conf
Artificial Evolution
Antoine Spicher, Olivier Michel, Jean-Louis Giavitto
2005 ed.
UPP
Jean-Pierre Banâtre, Pascal Fradet, Jean-Louis Giavitto, Olivier Michel
2005 Misc conf
International Conference on Computational Science (1)
Antoine Spicher, Olivier Michel
2004 conf
ACRI
Antoine Spicher, Olivier Michel, Jean-Louis Giavitto
2004 conf
UPP
Jean-Louis Giavitto, Olivier Michel, Julien Cohen, Antoine Spicher
2003 conf
JFLA
Julien Cohen, Olivier Michel, Jean-Louis Giavitto
2002 conf
WMC-CdeA
Jean-Louis Giavitto, Olivier Michel, Julien Cohen
2002 conf
UMC
Jean-Louis Giavitto, Olivier Michel
2002 conf
ACM SIGPLAN Workshop on Rule-Based Programming
Jean-Louis Giavitto, Olivier Michel
2002 J jnl
ACM SIGPLAN Notices
Jean-Louis Giavitto, Olivier Michel, Julien Cohen
2002 J jnl
Fundam. Informaticae
Jean-Louis Giavitto, Olivier Michel
2001 C conf
PPDP
Jean-Louis Giavitto, Olivier Michel
2001 conf
RULE@PLI
Jean-Louis Giavitto, Olivier Michel
1997 conf
PLILP
Jean-Louis Giavitto, Dominique De Vito, Olivier Michel
1996
Olivier Michel
1995 conf
PSLS
Jean-Louis Giavitto, Olivier Michel, Jean-Paul Sansonnet
1994 conf
ICLP Workshop: Parallel and Data Parallel Execution of Logic Programs
Olivier Michel, Jean-Louis Giavitto
1992 conf
WSA
Jean-Louis Giavitto, Jean-Paul Sansonnet, Olivier Michel
redb/extractors/basicproperties.py
← Index redb/extractors/basicproperties.py python
from dataclasses import asdict
import inspect
import os
import magic
from magika import Magika
from datetime import datetime, timezone
from typing import Any, List, Tuple

from redb.extractors.enum import Tag
from redb.models.dataclasses import BasicProperties
from redb.extractors.extractor import Extractor


class BasicPropertiesExtractor(Extractor):

    def __init__(
        self,
        filepath,
        log,
        exporters=None,
        index_prefix=None,
        elastic_index=None,
        known_benign=False,
        known_malicious=False,
        parent_sha256=None,
        precomputed_hashes=None,
        is_fat=None,
        child_sha256=None,
        child_architecture=None,
        child_filetype=None,
        first_seen=None,
    ):
        super().__init__(
            filepath,
            log,
            exporters=exporters,
            index_prefix=index_prefix,
            elastic_index=elastic_index,
            known_benign=known_benign,
            known_malicious=known_malicious,
            precomputed_hashes=precomputed_hashes,
        )
        self.basic_properties = None
        self.elastic_index = self.index_prefix + "-basic_properties"
        self.is_packed = None
        self.parent_sha256 = parent_sha256  # For FAT Mach-O slices, points to container hash
        self.is_fat = is_fat  # True for FAT Mach-O containers, None otherwise
        self.child_sha256 = child_sha256  # SHA256 hashes of children (FAT slices, zip contents)
        self.child_architecture = child_architecture  # Architecture names for FAT Mach-O slices
        self.child_filetype = child_filetype  # Magika filetypes for children (useful for zip archives)
        self.first_seen = first_seen  # From catalog_samples, None for local files

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

    def _extract_basic_properties(self):
        self.log.debug(inspect.currentframe().f_code.co_name)
        filename = None  # Reserved for future use
        sample_name = os.path.basename(self.filepath)
        file_entropy = round(self.calculate_entropy(self.binary), 3)
        type_ = magic.from_buffer(self.binary)
        type_mime = magic.from_buffer(self.binary, mime=True)
        type_magika = Magika().identify_bytes(self.binary).output.label
        size = len(self.binary)
        self.basic_properties = BasicProperties(
            filename, sample_name, size, type_, type_mime, type_magika,
            file_entropy, self.is_packed, self.is_fat, self.child_sha256,
            self.child_architecture, self.child_filetype,
            first_seen=str(self.first_seen) if self.first_seen else None,
        )
        self.log.debug(f"Basic Properties dump: {asdict(self.basic_properties)}")

    def extract(self):
        self.log.debug(inspect.currentframe().f_code.co_name)
        try:
            self._extract_basic_properties()
            # self.export_to_elastic([self.basic_properties])
            return self.basic_properties
        except Exception as e:
            self.log.error(f"Extract basic properties error {self.hash.sha256} Exception: {e}")
            return None

    def prepare_export_data(self, exporter_type: str) -> Any:
        if exporter_type == "ElasticsearchExporter":
            return self.basic_properties
        elif exporter_type == "ClickHouseExporter":
            data = [[
                self.sha256,
                self.md5,
                self.sha1,
                self.parent_sha256,  # NULL for standalone/FAT, fat_hash for slices
                self.basic_properties.child_sha256 or [],  # SHA256 hashes of children
                self.basic_properties.child_architecture or [],  # Architecture names for FAT slices
                self.basic_properties.child_filetype or [],  # Magika filetypes for children
                self.basic_properties.is_fat,  # True for FAT Mach-O containers, NULL otherwise
                self.basic_properties.filename,
                self.basic_properties.sample_name,
                self.basic_properties.filesize,
                self.basic_properties.file_entropy,
                self.basic_properties.filetype,
                self.basic_properties.filetype_mime,
                self.basic_properties.filetype_magika,
                self.first_seen or datetime(1970, 1, 1, tzinfo=timezone.utc),  # From catalog_samples, epoch zero for local files (uses original datetime, not string)
                datetime.now(timezone.utc)
            ]]

            column_names = [
                'sha256', 'md5', 'sha1', 'parent_sha256', 'child_sha256', 'child_architecture', 'child_filetype',
                'is_fat', 'filename', 'sample_name',
                'filesize', 'file_entropy', 'filetype', 'filetype_mime',
                'filetype_magika', 'first_seen', 'analysis_date'
            ]

            column_type_names = [
                'String', 'String', 'String', 'Nullable(String)',
                'Array(FixedString(64))', 'Array(LowCardinality(String))', 'Array(LowCardinality(String))',
                'Nullable(UInt8)', 'Nullable(String)', 'String',
                'UInt64', 'Float64', 'LowCardinality(String)',
                'LowCardinality(String)', 'LowCardinality(String)',
                'DateTime64(3, \'UTC\')',
                'DateTime64(3, \'UTC\')'
            ]

            return data, column_names, column_type_names

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