Manuel C. Peitsch

30 papers A 1B 2Misc 2Journal 22Unranked 3
YearRankTypeTitle / Venue / Authors
2019 J jnl
Bioinform.
Vincenzo Belcastro, Stephane Cano, Diego Marescotti, Stefano Acali, Carine Poussin, Ignacio Gonzalez-Suarez, Florian Martin, Filipe Bonjour, Nikolai V. Ivanov, Manuel C. Peitsch, Julia Hoeng
2019 J jnl
BMC Bioinform.
Florian Martin, Sylvain Gubian, Marja Talikka, Julia Hoeng, Manuel C. Peitsch
2019 Misc conf
PACBB
Florian Martin, Marja Talikka, Julia Hoeng, Manuel C. Peitsch
2017 J jnl
F1000Research
Stéphanie Boué, Thomas E. Exner, Samik Ghosh, Vincenzo Belcastro, Joh Dokler, David Page, Akash R. Boda, Filipe Bonjour, Barry J. Hardy, Patrick Vanscheeuwijck, Julia Hoeng, Manuel C. Peitsch
2016 J jnl
Database J. Biol. Databases Curation
Sumit Madan, Sven Hodapp, Philipp Senger, Sam Ansari, Justyna Szostak, Julia Hoeng, Manuel C. Peitsch, Juliane Fluck
2016 J jnl
Database J. Biol. Databases Curation
Juliane Fluck, Sumit Madan, Sam Ansari, Alpha Tom Kodamullil, Reagon Karki, Majid Rastegar-Mojarad, Natalie L. Catlett, William Hayes, Justyna Szostak, Julia Hoeng, Manuel C. Peitsch
2015 J jnl
Bioinform.
Erhan Bilal, Theodore Sakellaropoulos, Challenge Participants, Ioannis N. Melas, Dimitris E. Messinis, Vincenzo Belcastro, Kahn Rhrissorrakrai, Pablo Meyer, Raquel Norel, Anita Iskandar, Elise Blaese, John Jeremy Rice, Manuel C. Peitsch, Julia Hoeng, Gustavo Stolovitzky, Leonidas G. Alexopoulos, Carine Poussin
2015 J jnl
Database J. Biol. Databases Curation
Stéphanie Boué, Marja Talikka, Jurjen Willem Westra, William Hayes, Anselmo Di Fabio, Jennifer Park, Walter K. Schlage, Alain Sewer, Brett Fields, Sam Ansari, Florian Martin, Emilija Veljkovic, Renée Kenney, Manuel C. Peitsch, Julia Hoeng
2015 J jnl
Database J. Biol. Databases Curation
Justyna Szostak, Sam Ansari, Sumit Madan, Juliane Fluck, Marja Talikka, Anita Iskandar, Hector De Leon, Martin Hofmann-Apitius, Manuel C. Peitsch, Julia Hoeng
2015 Misc conf
Pacific Symposium on Biocomputing
Jean Binder, Stéphanie Boué, Anselmo Di Fabio, Brett Fields, William Hayes, Julia Hoeng, Jennifer Park, Manuel C. Peitsch
2015 conf
BCB
Nikolai V. Ivanov, Carine Poussin, Stéphanie Boué, Florian Martin, Alain Sewer, Bjoern Titz, Manuel C. Peitsch, Julia Hoeng
2015 J jnl
Bioinform.
Kahn Rhrissorrakrai, Vincenzo Belcastro, Erhan Bilal, Raquel Norel, Carine Poussin, Carole Mathis, Rémi H. J. Dulize, Nikolai V. Ivanov, Leonidas G. Alexopoulos, John Jeremy Rice, Manuel C. Peitsch, Gustavo Stolovitzky, Pablo Meyer, Julia Hoeng
2015 J jnl
Bioinform.
Julia Hoeng, Manuel C. Peitsch, Pablo Meyer, Igor Jurisica
2014 J jnl
J. Biomed. Semant.
Erfan Younesi, Sam Ansari, Michaela Gündel, Shiva Ahmadi, Chris Coggins, Julia Hoeng, Martin Hofmann-Apitius, Manuel C. Peitsch
2014 J jnl
BMC Bioinform.
Florian Martin, Alain Sewer, Marja Talikka, Yang Xiang, Julia Hoeng, Manuel C. Peitsch
2013 conf
BioNLP@ACL
Juliane Fluck, Alexander Klenner, Sumit Madan, Sam Ansari, Tamara Bobic, Julia Hoeng, Martin Hofmann-Apitius, Manuel C. Peitsch
2013 J jnl
Bioinform.
Adi L. Tarca, Mario Lauria, Michael Unger, Erhan Bilal, Stéphanie Boué, Kushal Kumar Dey, Julia Hoeng, Heinz Koeppl, Florian Martin, Pablo Meyer, Preetam Nandy, Raquel Norel, Manuel C. Peitsch, John Jeremy Rice, Roberto Romero, Gustavo Stolovitzky, Marja Talikka, Yang Xiang, Christoph Zechner, Improver Dsc Collaborators
2012 J jnl
BMC Syst. Biol.
Florian Martin, Ty M. Thomson, Alain Sewer, David A. Drubin, Carole Mathis, Dirk Weisensee, Dexter Pratt, Julia Hoeng, Manuel C. Peitsch
2012 J jnl
J. Cheminformatics
Elyette Martin, Aurélien Monge, Jacques-Antoine Duret, Federico Gualandi, Manuel C. Peitsch, Pavel Pospisil
2012 J jnl
Bioinform.
Pablo Meyer, Julia Hoeng, John Jeremy Rice, Raquel Norel, Jörg Sprengel, Katrin Stolle, Thomas Bonk, Stephanie Corthesy, Ajay K. Royyuru, Manuel C. Peitsch, Gustavo Stolovitzky
2011 J jnl
BMC Syst. Biol.
Walter K. Schlage, Jurjen Willem Westra, Stephan Gebel, Natalie L. Catlett, Carole Mathis, Brian P. Frushour, Arnd Hengstermann, Aaron A. Van Hooser, Carine Poussin, Ben Wong, Michael Lietz, Jennifer Park, David A. Drubin, Emilija Veljkovic, Manuel C. Peitsch, Julia Hoeng, Renee Deehan
2011 J jnl
BMC Syst. Biol.
Jurjen Willem Westra, Walter K. Schlage, Brian P. Frushour, Stephan Gebel, Natalie L. Catlett, Wan-Jiang Han, Sean F. Eddy, Arnd Hengstermann, Andrea L. Matthews, Carole Mathis, Rosemarie B. Lichtner, Carine Poussin, Marja Talikka, Emilija Veljkovic, Aaron A. Van Hooser, Benjamin Wong, Michael J. Maria, Manuel C. Peitsch, Renee Deehan, Julia Hoeng
2007 conf
HealthGrid
Dominique Zosso, Michael Podvinec, Markus Müller, Ruedi Aebersold, Manuel C. Peitsch, Torsten Schwede
2006 B conf
CCGRID
Manuel C. Peitsch
2006 B conf
e-Science
Michael Podvinec, Sergio Maffioletti, Peter Z. Kunszt, Konstantin Arnold, Lorenzo Cerutti, Bruno Nyffeler, Ralph Schlapbach, Can Türker, Heinz Stockinger, Arthur J. Thomas, Manuel C. Peitsch, Torsten Schwede
2005 J jnl
Trans. Comp. Sys. Biology
Ernest Feytmans, Denis Noble, Manuel C. Peitsch
2003 J jnl
Nucleic Acids Res.
Torsten Schwede, Jürgen Kopp, Nicolas Guex, Manuel C. Peitsch
2002 J jnl
Bioinform.
Manuel C. Peitsch
2001 J jnl
Bioinform.
Eugenia Migliavacca, Alexei A. Adzhubei, Manuel C. Peitsch
1997 A conf
ISMB
Manuel C. Peitsch
redb/extractors/elf_extractors/elf_imports.py
← Index redb/extractors/elf_extractors/elf_imports.py python
import inspect
from datetime import datetime, timezone
from typing import Any, List, Set

from elftools.elf.elffile import ELFFile
from elftools.common.exceptions import ELFError

from redb.extractors.enum import Tag
from redb.extractors.elf_extractor import ELFExtractor
from redb.models.dataclasses import ELFImport


class ELFImportExtractor(ELFExtractor):

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

    def _get_import_libraries(self, elf) -> List[str]:
        """Extract imported libraries from dynamic section."""
        libraries = []

        try:
            # Get the dynamic section
            dynamic_section = elf.get_section_by_name('.dynamic')
            if not dynamic_section:
                return libraries

            # Extract DT_NEEDED entries (required libraries)
            for tag in dynamic_section.iter_tags():
                if tag.entry.d_tag == 'DT_NEEDED':
                    libraries.append(tag.needed)

        except Exception as e:
            self.log.error(f"Error extracting import libraries: {e}")

        return libraries

    def _get_imported_functions_from_symbols(self, elf) -> Set[str]:
        """Extract imported functions from dynamic symbol table."""
        imported_functions = set()

        try:
            # Get the dynamic symbol table
            dynsym_section = elf.get_section_by_name('.dynsym')
            if not dynsym_section or not hasattr(dynsym_section, 'iter_symbols'):
                return imported_functions

            # Look for undefined symbols (imports)
            for symbol in dynsym_section.iter_symbols():
                # Check if symbol is undefined (imported)
                if (symbol.entry.get('st_shndx', 0) == 'SHN_UNDEF' and
                    symbol.name and
                    symbol.entry.get('st_info', {}).get('bind') in ['STB_GLOBAL', 'STB_WEAK']):
                    imported_functions.add(symbol.name)

        except Exception as e:
            self.log.error(f"Error extracting imported functions from symbols: {e}")

        return imported_functions

    def _get_imported_functions_from_relocations(self, elf) -> Set[str]:
        """Extract imported functions from relocation sections."""
        imported_functions = set()

        try:
            # Look through relocation sections
            for section in elf.iter_sections():
                if hasattr(section, 'iter_relocations'):
                    try:
                        for relocation in section.iter_relocations():
                            # Get symbol associated with relocation
                            if hasattr(relocation, 'symbol') and relocation.symbol:
                                symbol_name = relocation.symbol.name
                                if symbol_name:
                                    imported_functions.add(symbol_name)
                    except Exception as e:
                        self.log.debug(f"Could not process relocations in section {section.name}: {e}")

        except Exception as e:
            self.log.error(f"Error extracting imported functions from relocations: {e}")

        return imported_functions

    def _get_plt_functions(self, elf) -> Set[str]:
        """Extract functions from PLT (Procedure Linkage Table) sections."""
        plt_functions = set()

        try:
            # Look for PLT-related sections
            plt_sections = ['.plt', '.plt.got', '.plt.sec']

            for section_name in plt_sections:
                section = elf.get_section_by_name(section_name)
                if section:
                    # PLT functions are typically associated with relocations
                    # We'll get them from the relocation analysis
                    pass

        except Exception as e:
            self.log.error(f"Error extracting PLT functions: {e}")

        return plt_functions

    def tag(self):
        return Tag.ELF_IMPORTS.value if hasattr(Tag, 'ELF_IMPORTS') else "elf_imports"

    def extract(self):
        try:
            self.log.debug(inspect.currentframe().f_code.co_name)

            def extract_data(elf):
                # Extract import libraries
                import_libraries = self._get_import_libraries(elf)

                # Extract imported functions from multiple sources
                imported_functions = set()

                # From dynamic symbols
                symbol_imports = self._get_imported_functions_from_symbols(elf)
                imported_functions.update(symbol_imports)

                # From relocations
                relocation_imports = self._get_imported_functions_from_relocations(elf)
                imported_functions.update(relocation_imports)

                # From PLT
                plt_imports = self._get_plt_functions(elf)
                imported_functions.update(plt_imports)

                # Convert to sorted lists for consistent output
                import_libraries_list = sorted(list(set(import_libraries)))
                import_functions_list = sorted(list(imported_functions))

                # Return ELFImport dataclass
                return ELFImport(
                    elf_imports_total=len(import_functions_list),
                    elf_import_libraries=import_libraries_list,
                    elf_import_functions=import_functions_list,
                )

            if not self._is_elf_file():
                return None

            result = self._with_elf_file(extract_data)
            if result is None:
                return None

            self.elf_imports = result
            return self.elf_imports

        except Exception as e:
            self.log.error(f"Error extracting ELF imports {self.hash.sha256}: {e}")
            return None

    def prepare_export_data(self, exporter_type: str) -> Any:
        self.log.debug(inspect.currentframe().f_code.co_name)

        if exporter_type == "ElasticsearchExporter":
            return self.elf_imports
        elif exporter_type == "ClickHouseExporter":
            try:
                if not self.elf_imports:
                    return None

                # Prepare data array
                data = [[
                    self.sha256,
                    self.md5,
                    self.sha1,
                    self.elf_imports.elf_imports_total,
                    self.elf_imports.elf_import_libraries,
                    self.elf_imports.elf_import_functions,
                    datetime.now(timezone.utc)
                ]]

                column_names = [
                    'sha256', 'md5', 'sha1',
                    'elf_imports_total',
                    'elf_import_libraries',
                    'elf_import_functions',
                    'analysis_date'
                ]

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

                if not data:
                    return None

                return (data, column_names, column_type_names)

            except Exception as e:
                self.log.error(f"Error preparing export data: {e}")
                raise

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