Vanda Luengo

70 papers A 9B 29Journal 11Unranked 20
YearRankTypeTitle / Venue / Authors
2026 A conf
LAK
Daniela Rotelli, Yves Noël, Sébastien Lallé, Vanda Luengo
2025 conf
AIED (2)
Sébastien Lallé, Sina Nikneshan, Solène Lambert, Vanda Luengo, Ali Abou-Hassan
2025 conf
AIED (1)
Badmavasan Kirouchenassamy, Amel Yessad, Sébastien Jolivet, Matthieu Branthôme, Sébastien Lallé, Vanda Luengo
2025 conf
EC-TE (1)
Léo Nebel, François Bouchet, Vanda Luengo, Mathilde Couraud
2024 J jnl
CoRR
Mélina Verger, Chunyang Fan, Sébastien Lallé, François Bouchet, Vanda Luengo
2024 conf
AIED (1)
Sébastien Lallé, François Bouchet, Mélina Verger, Vanda Luengo
2023 conf
PKDD/ECML Workshops (2)
Mélina Verger, Chunyang Fan, Sébastien Lallé, François Bouchet, Vanda Luengo
2023 B conf
EC-TEL
Daniela Rotelli, Yves Noël, Sébastien Lallé, Vanda Luengo, David Pesce
2023 B conf
EDM
Olivier Allègre, Amel Yessad, Vanda Luengo
2023 B conf
EDM
Mélina Verger, Sébastien Lallé, François Bouchet, Vanda Luengo
2023 J jnl
CoRR
Mélina Verger, Sébastien Lallé, François Bouchet, Vanda Luengo
2023 J jnl
Proc. ACM Hum. Comput. Interact.
Eleonore Ferrier-Barbut, Ignacio Avellino, Geoffroy Canlorbe, Marie-Aude Vitrani, Vanda Luengo
2022 J jnl
ACM Trans. Hum. Robot Interact.
Eleonore Ferrier-Barbut, Philippe Gauthier, Vanda Luengo, Geoffroy Canlorbe, Marie-Aude Vitrani
2021 conf
CSEDU (Selected Papers)
Camila Morais Canellas, François Bouchet, Thibaut Arribe, Vanda Luengo
2021 conf
CSEDU (2)
Camila Canellas, François Bouchet, Thibaut Arribe, Vanda Luengo
2020 B conf
EC-TEL
Iryna Nikolayeva, Amel Yessad, Bertrand Laforge, Vanda Luengo
2020 ch.
Encyclopedia of Education and Information Technologies
Vanda Luengo
2020 A conf
LAK
Fatima Harrak, François Bouchet, Vanda Luengo, Pierre Gillois
2019 B conf
EC-TEL
Mathieu Guinebert, Amel Yessad, Mathieu Muratet, Vanda Luengo
2019 B conf
EDM
Fatima Harrak, François Bouchet, Vanda Luengo, Rémi Bachelet
2019 B conf
EDM
Fatima Harrak, François Bouchet, Vanda Luengo
2019 conf
MedInfo
Marice Fourcot, Lionel Di Marco, Vanda Luengo, Pierre Gillois
2019 J jnl
J. Learn. Anal.
Fatima Harrak, François Bouchet, Vanda Luengo
2019 B conf
L@S
Fatima Harrak, Vanda Luengo, François Bouchet, Rémi Bachelet
2018 B conf
ITS
Yannick Bourrier, Francis Jambon, Catherine Garbay, Vanda Luengo
2018 conf
ITS Workshops
Hugues Labarthe, Vanda Luengo, François Bouchet
2018 A conf
LAK
Alexis Lebis, Marie Lefèvre, Vanda Luengo, Nathalie Guin
2018 conf
MIE
Sahal Houssein, Lionel Di Marco, Carole Schwebel, Vanda Luengo, Patrice Morand, Pierre Gillois
2018 B conf
EC-TEL
Iryna Nikolayeva, Bruno Martin, Amel Yessad, Françoise Chenevotot, Julia Pilet, Dominique Prévit, Brigitte Grugeon-Allys, Vanda Luengo
2018 A conf
LAK
Fatima Harrak, François Bouchet, Vanda Luengo, Pierre Gillois
2017 A conf
AIED
Yannick Bourrier, Francis Jambon, Catherine Garbay, Vanda Luengo
2017 B conf
EC-TEL
Yannick Bourrier, Francis Jambon, Catherine Garbay, Vanda Luengo
2017 conf
CSEDU (1)
Awa Diattara, Nathalie Guin, Vanda Luengo, Amélie Cordier
2017 B conf
EC-TEL
Mathieu Guinebert, Amel Yessad, Mathieu Muratet, Vanda Luengo
2017 B conf
EDM
Fatima Harrak, François Bouchet, Vanda Luengo
2017 B conf
EC-TEL
Baptiste Monterrat, Amel Yessad, François Bouchet, Élise Lavoué, Vanda Luengo
2017 conf
LASI Spain
Alejandra Martínez-Monés, Christophe Reffay, Gwénaëlle Lécuyer-Cabioch, Vanda Luengo
2016 B conf
EC-TEL
Philippe Dessus, Olivier Cosnefroy, Vanda Luengo
2016 B conf
EC-TEL
Yannick Bourrier, Francis Jambon, Catherine Garbay, Vanda Luengo
2016 B conf
EC-TEL
Alexis Lebis, Marie Lefèvre, Vanda Luengo, Nathalie Guin
2016 B conf
EC-TEL
Awa Diattara, Nathalie Guin, Vanda Luengo, Amélie Cordier
2015 A conf
LAK
Nadine Mandran, Michael Ortega, Vanda Luengo, Denis Bouhineau
2015 A conf
AIED
Ben-Manson Toussaint, Vanda Luengo, Francis Jambon, Jérôme Tonetti
2015 B conf
AIME
Ben-Manson Toussaint, Vanda Luengo
2014 J jnl
Int. J. Learn. Technol.
Sandra Michelet, Vanda Luengo, Jean-Michel Adam, Nadine Mandran
2014 B conf
EDM
Ben-Manson Toussaint, Vanda Luengo, Jérôme Tonetti
2013 A conf
AIED
Sébastien Lallé, Vanda Luengo, Nathalie Guin
2013 A conf
AIED
Sébastien Lallé, Jack Mostow, Vanda Luengo, Nathalie Guin
2013 conf
AIED Workshops
Vanda Luengo, Dima Mufti-Alchawafa
2012 B conf
ITS
Sébastien Lallé, Vanda Luengo, Nathalie Guin
2012 conf
Ergo'IHM
Francis Jambon, Vanda Luengo
2012 conf
IC
Sandra Michelet, Vanda Luengo, Jean-Michel Adam
2012 B conf
ITS
Gagan Goel, Sébastien Lallé, Vanda Luengo
2012 J jnl
Ingénierie des Systèmes d Inf.
Sandra Michelet, Vanda Luengo, Jean-Michel Adam, Nadine Mandran
2011 B conf
EC-TEL
Lemya Settouti, Nathalie Guin, Vanda Luengo, Alain Mille
2011 conf
MMVR
Vanda Luengo, Aurelie Larcher, Jerome Tonetti
2011 J jnl
Rev. d'Intelligence Artif.
Vanda Luengo, Lucile Vadcard, Jerome Tonetti, Michel Dubois
2011 conf
EGC
Sébastien Lallé, Vanda Luengo
2011 B conf
EDM
Sébastien Lallé, Vanda Luengo
2010 B conf
ICALT
Lemya Settouti, Nathalie Guin, Alain Mille, Vanda Luengo
2010 B conf
EC-TEL
Sandra Michelet, Vanda Luengo, Jean-Michel Adam, Nadine Mandran
2010 B conf
Intelligent Tutoring Systems (2)
Sandra Michelet, Vanda Luengo, Jean-Michel Adam, Nadine Mandran
2010 J jnl
Int. J. Artif. Intell. Educ.
Vu Minh Chieu, Vanda Luengo, Lucile Vadcard, Jerome Tonetti
2008 conf
ICLS (3)
Adelaide Blavier, Jan M. Zottmann, Frank Fischer, Annette Aboulafia, Lucile Vadcard, Vanda Luengo, Peter Dieckmann, Marcus Rall
2008 B conf
ICALT
Vanda Luengo
2007 J jnl
Int. J. Emerg. Technol. Learn.
Sandra Michelet, Jean-Michel Adam, Vanda Luengo
2006 conf
EGC
Vanda Luengo, Lucile Vadcard, Dima Mufti-Alchawafa
2006 conf
Actes d'IC
Vanda Luengo, Lucile Vadcard, Michel Dubois, Dima Mufti-Alchawafa
2005 J jnl
Int. J. Comput. Math. Learn.
Vanda Luengo
2004 B conf
Intelligent Tutoring Systems
Vanda Luengo, Dima Mufti-Alchawafa, Lucile Vadcard
redb/extractors/macho_extractors/macho_dylibs.py
← Index redb/extractors/macho_extractors/macho_dylibs.py python
import hashlib
import inspect
from datetime import datetime, timezone
from typing import Any

from redb.extractors.enum import Tag
from redb.extractors.macho_extractor import MachOExtractor
from redb.models.dataclasses import MachODylib


class MachODylibExtractor(MachOExtractor):

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

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

    def _extract_dylibs(self):
        """Extract dynamic library information from all architectures in the MachO binary."""
        self.log.debug(inspect.currentframe().f_code.co_name)
        dylibs = []

        if not self.macho:
            return dylibs

        try:
            # Get architectures using new API (already parsed in base class)
            architectures = self.macho.get_architectures()
            if not architectures:
                return dylibs

            # Process each architecture
            for arch_name in architectures:
                # Get dylib commands using new API with architecture parameter
                dylib_commands = self.macho.get_dylib_commands(arch=arch_name)
                if not dylib_commands:
                    continue

                # Extract dylib commands for this architecture
                for dylib_cmd in dylib_commands:
                    try:
                        dylib_name = dylib_cmd.get('dylib_name', 'Unknown')
                        if isinstance(dylib_name, bytes):
                            dylib_name = dylib_name.decode('utf-8', errors='replace')

                        # Create dylib dataclass with architecture info
                        macho_dylib = MachODylib(
                            dylib_name=dylib_name,
                            dylib_timestamp=dylib_cmd.get('dylib_timestamp', 0),
                            dylib_current_version=dylib_cmd.get('dylib_current_version', 0),
                            dylib_compat_version=dylib_cmd.get('dylib_compat_version', 0),
                        )
                        # Add architecture info to the dylib
                        macho_dylib.architecture = arch_name
                        dylibs.append(macho_dylib)

                    except Exception as e:
                        self.log.warning(
                            f'Unable to process dylib "{dylib_cmd.get("dylib_name", "Unknown")}" for architecture {arch_name} in {self.hash.sha256}: {e}'
                        )
                        continue

            return dylibs

        except Exception as e:
            self.log.error(f"Error extracting MachO dylibs: {e}")
            return dylibs

    def extract(self):
        self.log.debug(inspect.currentframe().f_code.co_name)
        try:
            dylibs = self._extract_dylibs()
            return dylibs
        except Exception as e:
            self.log.error(f"Error extracting MachO dylibs: {e}")
            return None

    def prepare_export_data(self, exporter_type: str) -> Any:
        if exporter_type == "ElasticsearchExporter":
            return self.extract()
        elif exporter_type == "ClickHouseExporter":
            if not self.macho:
                return None

            # Get architectures (macho is already parsed in base class)
            try:
                architectures = self.macho.get_architectures()
                is_fat = len(architectures) > 1
            except Exception as e:
                self.log.error(f"Could not get architectures: {e}")
                return None

            data = []
            current_time = datetime.now(timezone.utc)

            # Loop through each architecture (1 for single, multiple for FAT)
            for arch_name in architectures:
                # Get architecture-specific sha256
                try:
                    arch_general_info = self.macho.get_general_info(arch=arch_name)
                    arch_header_raw = self.macho.get_macho_header(arch=arch_name)
                    arch_sha256 = arch_general_info.get('SHA256', self.sha256)
                    arch_cputype_raw = arch_header_raw.get('cputype', 0) if arch_header_raw else 0
                except Exception as e:
                    self.log.warning(f"Could not get arch-specific data for {arch_name}: {e}")
                    arch_sha256 = self.sha256
                    arch_cputype_raw = 0

                # Get dylib commands for this architecture
                dylib_commands = self.macho.get_dylib_commands(arch=arch_name)
                if not dylib_commands:
                    continue

                # Process each dylib for this architecture
                for dylib_cmd in dylib_commands:
                    try:
                        dylib_name = dylib_cmd.get('dylib_name', 'Unknown')
                        if isinstance(dylib_name, bytes):
                            dylib_name = dylib_name.decode('utf-8', errors='replace')

                        data.append([
                            arch_sha256,                          # sha256 (architecture-specific)
                            dylib_name,                           # dylib_name
                            dylib_cmd.get('dylib_timestamp', 0), # dylib_timestamp
                            dylib_cmd.get('dylib_current_version', 0), # dylib_current_version
                            dylib_cmd.get('dylib_compat_version', 0),  # dylib_compat_version
                            current_time,                         # analysis_date
                        ])
                    except Exception as e:
                        self.log.warning(
                            f'Unable to process dylib "{dylib_cmd.get("dylib_name", "Unknown")}" for architecture {arch_name}: {e}'
                        )
                        continue

            column_names = [
                'sha256',
                'dylib_name', 'dylib_timestamp', 'dylib_current_version',
                'dylib_compat_version', 'analysis_date'
            ]

            if not data:
                return None

            column_type_names = [
                'FixedString(64)',
                'String', 'UInt32', 'UInt32',
                'UInt32', 'DateTime64(3, \'UTC\')'
            ]

            return (data, column_names, column_type_names)

        return None

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