Imed Hammouda

84 papers A* 3A 6B 7C 6Misc 2Journal 16Unranked 35
YearRankTypeTitle / Venue / Authors
2021 J jnl
ISPRS Int. J. Geo Inf.
Allan Mazimwe, Imed Hammouda, Anthony Gidudu
2020 J jnl
SN Comput. Sci.
Allan Mazimwe, Imed Hammouda, Anthony Gidudu, Bernard Barasa
2020 J jnl
IEEE Softw.
Juho Lindman, Jennifer Horkoff, Imed Hammouda, Eric Knauss
2019 J jnl
ISPRS Int. J. Geo Inf.
Allan Mazimwe, Imed Hammouda, Anthony Gidudu
2019 C conf
WETICE
Allan Mazimwe, Imed Hammouda, Anthony Gidudu
2019 ed.
SEiA@ICSE
Engineer Bainomugisha, Michel Chaudron, Imed Hammouda, Yvonne Dittrich
2019 J jnl
CoRR
Jennifer Horkoff, Juho Lindman, Imed Hammouda, Eric Knauss
2018 A conf
RE
Jennifer Horkoff, Jerker Ersare, Jonas Kahler, Thorsteinn D. Jorundsson, Imed Hammouda
2018 A conf
ER
Jennifer Horkoff, Juho Lindman, Imed Hammouda, Eric Knauss
2018 conf
OSS
Patricija Ilin, Dimitrios Platis, Imed Hammouda
2018 J jnl
CoRR
Jan-Philipp Steghöfer, Håkan Burden, Regina Hebig, Gül Çalikli, Robert Feldt, Imed Hammouda, Jennifer Horkoff, Eric Knauss, Grischa Liebel
2018 J jnl
ACM Trans. Comput. Educ.
Jan-Philipp Steghöfer, Håkan Burden, Regina Hebig, Gul Calikli, Robert Feldt, Imed Hammouda, Jennifer Horkoff, Eric Knauss, Grischa Liebel
2018 conf
ICSOB
Jennifer Horkoff, Juho Lindman, Imed Hammouda, Eric Knauss, Jamel Debbiche, Martina Freiholtz, Patrik Liao, Stephen Mensah, Aksel Strömberg
2018 ed.
SEiA@ICSE
Haitham S. Hamza, Engineer Bainomugisha, Michel Chaudron, Imed Hammouda
2018 J jnl
J. Internet Serv. Appl.
Juho Lindman, Imed Hammouda
2018 conf
ICSE (Companion Volume)
Amir Zghidi, Imed Hammouda, Brahim Hnich
2017 C conf
ICGSE
Er Nie, Imed Hammouda
2017 B conf
SEAA
Grace Kamulegeya, Regina Hebig, Imed Hammouda, Michel Chaudron, Raymond Mugwanya
2017 Misc conf
PoEM
Jennifer Horkoff, Imed Hammouda, Juho Lindman, Jamel Debbiche, Martina Freiholtz, Patrik Liao, Stephen Mensah, Aksel Strömberg
2017 conf
OSS
Juho Lindman, Imed Hammouda
2017 conf
OSS
M. M. Mahbubul Syeed, Juho Lindman, Imed Hammouda
2017 conf
WAPI@ICSE
Amir Zghidi, Imed Hammouda, Brahim Hnich, Eric Knauss
2017 Misc conf
SAC
David Jensen, Andreas Lundkvist, Imed Hammouda
2016 ed.
OSS
Kevin Crowston, Imed Hammouda, Björn Lundell, Gregorio Robles, Jonas Gamalielsson, Juho Lindman
2016 conf
ICSE (Companion Volume)
Jan-Philipp Steghöfer, Eric Knauss, Emil Alégroth, Imed Hammouda, Håkan Burden, Morgan Ericsson
2016 conf
OSS
Sinan Abdulwahhab, Yazen Alabady, Yacoub Sattar, Imed Hammouda
2015 C conf
OpenSym
Oscar Muchow, David Ustarbowski, Imed Hammouda
2015 conf
RCoSE@ICSE
Imed Hammouda, Eric Knauss, Leonardo Costantini
2015 conf
ECSA Workshops
M. M. Mahbubul Syeed, Alexander Lokhman, Tommi Mikkonen, Imed Hammouda
2015 ed.
SSE@SIGSOFT FSE
Imed Hammouda, Alberto Sillitti
2015 conf
IWPSE
William Granli, John Burchell, Imed Hammouda, Eric Knauss
2014 conf
EduSymp@MoDELS
Imed Hammouda, Håkan Burden, Rogardt Heldal, Michel R. V. Chaudron
2014 A conf
RE
Eric Knauss, Imed Hammouda
2014 J jnl
Int. J. Open Source Softw. Process.
M. M. Mahbubul Syeed, Imed Hammouda, Tarja Systä
2014 C conf
OpenSym
M. M. Mahbubul Syeed, Klaus Marius Hansen, Imed Hammouda, Konstantinos Manikas
2014 J jnl
J. Softw.
M. M. Mahbubul Syeed, Imed Hammouda
2014 conf
OSS
M. M. Mahbubul Syeed, Imed Hammouda
2013 conf
HICSS
Alexander Lokhman, Tommi Mikkonen, Imed Hammouda, Rick Kazman, Hong-Mei Chen
2013 J jnl
J. Softw.
M. M. Mahbubul Syeed, Imed Hammouda, Tarja Systä
2013 conf
MindTrek
M. M. Mahbubul Syeed, Imed Hammouda, Csaba Berko
2013 conf
OSS
M. M. Mahbubul Syeed, Imed Hammouda
2012 J jnl
J. Syst. Softw.
Terhi Kilamo, Imed Hammouda, Tommi Mikkonen, Timo Aaltonen
2012 conf
OSS
Alexander Lokhman, Antti Luoto, Salum Abdul-Rahman, Imed Hammouda
2012 conf
OSS
M. M. Mahbubul Syeed, Terhi Kilamo, Imed Hammouda, Tarja Systä
2012 ed.
OSS
Imed Hammouda, Björn Lundell, Tommi Mikkonen, Walt Scacchi
2012 conf
OSS
Terhi Kilamo, Imed Hammouda, Ville Kairamo, Petri Räsänen, Jukka P. Saarinen
2012 A* conf
ICSE
Terhi Kilamo, Imed Hammouda, Mohamed Amine Chatti
2011 conf
OSS
Terhi Kilamo, Imed Hammouda, Ville Kairamo, Petri Räsänen, Jukka P. Saarinen
2011 conf
OSS
Veerakishore Goduguluri, Terhi Kilamo, Imed Hammouda
2011 J jnl
Int. J. Softw. Eng. Knowl. Eng.
Imed Hammouda, Kai Koskimies, Tommi Mikkonen
2011 ed.
MindTrek
Artur Lugmayr, Heljä Franssila, Christian Safran, Imed Hammouda
2011 J jnl
Int. J. Open Source Softw. Process.
M. M. Mahbubul Syeed, Timo Aaltonen, Imed Hammouda, Tarja Systä
2011 conf
OSS
Imed Hammouda, Björn Lundell
2010 C conf
Software Engineering (Workshops)
Martin Ebner, Imed Hammouda, Hans-Jörg Happel, Walid Maalej, Wolfgang Reinhardt
2010 ch.
Agility Across Time and Space
Jakub Rudzki, Imed Hammouda, Tuomas Mikkola, Karri Mustonen, Tarja Systä
2010 conf
OSS
Terhi Kilamo, Timo Aaltonen, Imed Hammouda, Teemu J. Heinimäki, Tommi Mikkonen
2010 conf
EUROMICRO-SEAA
Imed Hammouda
2010 conf
MindTrek
Imed Hammouda, Tommi Mikkonen, Ville Oksanen, Ari Jaaksi
2010 conf
OSS
Imed Hammouda, Timo Aaltonen, Andrea Capiluppi
2010 B conf
ICALT
Imed Hammouda, Rami Laine, Jari Peltonen
2010 C conf
Software Engineering
Wolfgang Reinhardt, Martin Ebner, Imed Hammouda, Hans-Jörg Happel, Walid Maalej
2009 conf
EUROMICRO-SEAA
Jakub Rudzki, Imed Hammouda, Tuomas Mikkola
2009 J jnl
Softw. Pract. Exp.
Imed Hammouda, Anna Ruokonen, Mika Siikarla, André L. Santos, Kai Koskimies, Tarja Systä
2009 conf
EUROMICRO-SEAA
Jakub Rudzki, Kimmo Kiviluoma, Tero Poikonen, Imed Hammouda
2009 conf
OSS
Imed Hammouda, Timo Aaltonen, Andrea Capiluppi
2009 conf
OSS
Petri Sirkkala, Timo Aaltonen, Imed Hammouda
2009 ed.
SoSEA@ESEC/FSE
Imed Hammouda, Filippo Lanubile, Jan Bosch, Mehdi Jazayeri
2008 B conf
COMPSAC
Jakub Rudzki, Imed Hammouda, Tommi Mikkonen
2008 conf
ASE Workshops
Imed Hammouda, Timo Aaltonen, Petri Sirkkala
2008 A* conf
ASE
Imed Hammouda, Jan Bosch, Mehdi Jazayeri, Tommi Mikkonen
2008 conf
OSS
Heikki Orsila, Jaco Geldenhuys, Anna Ruokonen, Imed Hammouda
2007 A conf
SC
Imed Hammouda, Kai Koskimies
2007 B conf
ICALT
Imed Hammouda, Mika Jokinen, André L. Santos, Kai Koskimies
2007 A conf
ICPC
Tommi Reinikainen, Imed Hammouda, Juha Laiho, Kai Koskimies, Tarja Systä
2006 A conf
MSR
Imed Hammouda, Kai Koskimies
2006 B conf
VL/HCC
Samuel Lahtinen, Jari Peltonen, Imed Hammouda, Kai Koskimies
2005 ch.
Model-Driven Software Development
Imed Hammouda
2005 conf
EWSA
Imed Hammouda, Markku Hakala, Mika Pussinen, Mika Katara, Tommi Mikkonen
2005 B conf
FASE
Imed Hammouda, Juha Hautamäki, Mika Pussinen, Kai Koskimies
2004 A* conf
ASE
Imed Hammouda, Johannes Koskinen, Mika Pussinen, Mika Katara, Tommi Mikkonen
2004 conf
CSMR
Imed Hammouda, Maarit Harsu
2004 conf
IWPC
Imed Hammouda, Olcay Guldogan, Kai Koskimies, Tarja Systä
2002 J jnl
Nord. J. Comput.
Imed Hammouda, Kai Koskimies
2002 B conf
COMPSAC
Imed Hammouda, Kai Koskimies
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"