Manfred Zink

58 papers C 37Journal 20Unranked 1
YearRankTypeTitle / Venue / Authors
2025 J jnl
IEEE Trans. Aerosp. Electron. Syst.
Nermine Hendy, Ferdi Kurnia, Thomas Kraus, Markus Bachmann, Marco Martorella, Robin J. Evans, Manfred Zink, Haytham M. Fayek, Akram Al-Hourani
2023 C conf
IGARSS
Alberto Moreira, Gerhard Krieger, Marwan Younis, Manfred Zink
2023 C conf
IGARSS
Markus Bachmann, Allan Bojarski, Johannes Böer, Stefan Buckreuss, Christo Grigorov, Irena Hajnsek, Ralph Kahle, Thomas Kraus, Patrick Klenk, Kay Müller, Ulrich Steinbrecher, Maximilian Schandri, Manfred Zink
2022 C conf
IGARSS
Adriana Elizabeth Nuncio Quiroz, Michael Bartusch, Samuel Stettner, Alberto Moreira, Manfred Zink
2022 C conf
IGARSS
Markus Bachmann, Carolina González, José-Luis Bueso-Bello, Paola Rizzoli, Manfred Zink
2022 C conf
IGARSS
Irena Hajnsek, Alberto Moreira, Manfred Zink, Stefan Buckreuss, Thomas Kraus, Markus Bachmann, Thomas Busche
2022 C conf
IGARSS
Marie Lachaise, Carolina González, Paola Rizzoli, Barbara Schweißhelm, Manfred Zink
2021 C conf
IGARSS
Michael Bartusch, Adriana Elizabeth Nuncio Quiroz, Samuel Stettner, Alberto Moreira, Manfred Zink
2021 J jnl
IEEE J. Sel. Top. Appl. Earth Obs. Remote. Sens.
Allan Bojarski, Markus Bachmann, Johannes Böer, Thomas Kraus, Christopher Wecklich, Ulrich Steinbrecher, Nuria Tous-Ramon, Kersten Schmidt, Patrick Klenk, Christo Grigorov, Marco Schwerdt, Manfred Zink
2021 J jnl
IEEE J. Sel. Top. Appl. Earth Obs. Remote. Sens.
Manfred Zink, Alberto Moreira, Irena Hajnsek, Paola Rizzoli, Markus Bachmann, Ralph Kahle, Thomas Fritz, Martin Huber, Gerhard Krieger, Marie Lachaise, Michele Martone, Edith Maurer, Birgit Wessel
2021 C conf
IGARSS
Irena Hajnsek, Alberto Moreira, Manfred Zink, Stefan Buckreuss, Thomas Kraus, Markus Bachmann, Thomas Busche
2021 J jnl
IEEE J. Sel. Top. Appl. Earth Obs. Remote. Sens.
Markus Bachmann, Thomas Kraus, Allan Bojarski, Maximilian Schandri, Johannes Böer, Thomas Edmund Busche, José-Luis Bueso-Bello, Christo Grigorov, Ulrich Steinbrecher, Stefan Buckreuss, Gerhard Krieger, Manfred Zink
2020 J jnl
Remote. Sens.
Carolina González, Markus Bachmann, José-Luis Bueso-Bello, Paola Rizzoli, Manfred Zink
2020 C conf
IGARSS
Irena Hajnsek, Alberto Moreira, Manfred Zink, Stefan Buckreuss, Thomas Kraus, Markus Bachmann, Thomas Busche
2019 C conf
IGARSS
Irena Hajnsek, Alberto Moreira, Manfred Zink, Stefan Buckreuss, Thomas Kraus, Markus Bachmann, Thomas Busche
2018 C conf
IGARSS
Paola Rizzoli, José-Luis Bueso-Bello, Andrea Pulella, Francescopaolo Sica, Manfred Zink
2018 J jnl
Remote. Sens.
Marco Schwerdt, Kersten Schmidt, Patrick Klenk, Nuria Tous-Ramon, Daniel Rudolf, Sebastian Raab, Klaus Weidenhaupt, Jens Reimann, Manfred Zink
2018 C conf
IGARSS
Alberto Moreira, Markus Bachmann, Wolfgang Balzer, Daniela Borla Tridon, Erhard Diedrich, Thomas Fritz, Christo Grigorov, Ralph Kahle, Gerhard Krieger, Irena Hajnsek, Sigurd Huber, Hannah Joerg, Patrick Klenk, Marie Lachaise, Martin Maier, Edith Maurer, Kostas Papathanassiou, Alessandro Parizzi, Pau Prats, Jens Reimann, Marc Rodriguez-Cassola, Birgit Schättler, Max Schwinger, Daniel Schulze, Ulrich Steinbrecher, Michelangelo Villano, Marwan Younis, Francesco De Zan, Manfred Zink, Mariantonietta Zonno
2017 J jnl
Remote. Sens.
Marco Schwerdt, Kersten Schmidt, Nuria Tous-Ramon, Patrick Klenk, Nestor Yague-Martinez, Pau Prats-Iraola, Manfred Zink, Dirk Geudtner
2017 J jnl
IEEE J. Sel. Top. Appl. Earth Obs. Remote. Sens.
José-Luis Bueso-Bello, Michele Martone, Pau Prats-Iraola, Carolina González, Thomas Kraus, Jens Reimann, Marc Jäger, Benjamin Bräutigam, Paola Rizzoli, Manfred Zink
2017 C conf
IGARSS
Manfred Zink, Alberto Moreira, Markus Bachmann, Paola Rizzoli, Thomas Fritz, Irena Hajnsek, Gerhard Krieger, Birgit Wessel
2016 J jnl
IEEE J. Sel. Top. Appl. Earth Obs. Remote. Sens.
Gerhard Krieger, Alberto Moreira, Manfred Zink, Masanobu Shimada, Scott Hensley
2016 J jnl
IEEE J. Sel. Top. Appl. Earth Obs. Remote. Sens.
Marco Schwerdt, Kersten Schmidt, Nuria Tous-Ramon, Gabriel Castellanos Alfonzo, Björn J. Döring, Manfred Zink, Pau Prats-Iraola
2016 C conf
IGARSS
Manfred Zink, Alberto Moreira, Markus Bachmann, Benjamin Bräutigam, Thomas Fritz, Irena Hajnsek, Gerhard Krieger, Birgit Wessel
2016 C conf
IGARSS
Gerhard Krieger, Alberto Moreira, Manfred Zink, Irena Hajnsek, Sigurd Huber, Michelangelo Villano, Konstantinos Papathanassiou, Marwan Younis, Paco López-Dekker, Matteo Pardini, Daniel Schulze, Markus Bachmann, Daniela Borla Tridon, Jens Reimann, Benjamin Bräutigam, Ulrich Steinbrecher, Carolina Tienda, Maria J. Sanjuan-Ferrer, Mariantonietta Zonno, Michael Eineder, Francesco De Zan, Alessandro Parizzi, Thomas Fritz, Erhard Diedrich, Edith Maurer, Ralf Munzenmayer, Bernhard Grafmueller, Rainhard Wolters, Frank te Hennepe, Robert Ernst, Charlotte Bewick
2015 J jnl
IEEE J. Sel. Top. Appl. Earth Obs. Remote. Sens.
Akira Hirose, Paul A. Rosen, Hiroyoshi Yamada, Manfred Zink
2015 C conf
IGARSS
Manfred Zink, Markus Bachmann, Benjamin Bräutigam, Thomas Fritz, Irena Hajnsek, Gerhard Krieger, Alberto Moreira, Birgit Wessel
2014 C conf
IGARSS
Marco Schwerdt, Kersten Schmidt, Nuria Tous-Ramon, Gabriel Castellanos Alfonzo, Björn Döring, Manfred Zink, Pau Prats
2014 C conf
IGARSS
Benjamin Bräutigam, Markus Bachmann, Daniel Schulze, Daniela Borla Tridon, Paola Rizzoli, Michele Martone, Carolina González, Manfred Zink, Gerhard Krieger
2014 C conf
IGARSS
Manfred Zink, Alberto Moreira
2013 J jnl
IEEE J. Sel. Top. Appl. Earth Obs. Remote. Sens.
John Mohan Walter Antony, Jaime Hueso Gonzalez, Marco Schwerdt, Markus Bachmann, Gerhard Krieger, Manfred Zink
2013 C conf
IGARSS
Manfred Zink, Alberto Moreira
2012 C conf
IGARSS
Marc Rodriguez-Cassola, Pau Prats, Ulrich Steinbrecher, Ralf Horn, Anton Nottensteiner, Daniel Schulze, Martin Keller, Muriel Pinheiro, Manfred Zink, Andreas Reigber, Gerhard Krieger, Alberto Moreira
2012 J jnl
IEEE Geosci. Remote. Sens. Lett.
Marc Rodriguez-Cassola, Pau Prats, Daniel Schulze, Nuria Tous-Ramon, Ulrich Steinbrecher, Luca Marotti, Matteo Nannini, Marwan Younis, Paco López-Dekker, Manfred Zink, Andreas Reigber, Gerhard Krieger, Alberto Moreira
2012 C conf
IGARSS
Markus Bachmann, Daniel Schulze, Carlos Ortega-Miguez, Donata Polimeni, Johannes Böer, Jaime Hueso Gonzalez, John Mohan Walter Antony, Gerhard Krieger, Benjamin Bräutigam, Marco Schwerdt, Manfred Zink
2012 C conf
IGARSS
Manfred Zink
2012 C conf
IGARSS
Jaime Hueso Gonzalez, John Mohan Walter Antony, Markus Bachmann, Gerhard Krieger, Marco Schwerdt, Manfred Zink
2012 C conf
IGARSS
Gerhard Krieger, Francesco De Zan, Markus Bachmann, Jaime Hueso Gonzalez, Marc Rodriguez-Cassola, Manfred Zink
2011 C conf
IGARSS
Marc Rodriguez-Cassola, Pau Prats, Daniel Schulze, Nuria Tous-Ramon, Ulrich Steinbrecher, Luca Marotti, Matteo Nannini, Marwan Younis, Paco López-Dekker, Manfred Zink, Andreas Reigber, Gerhard Krieger, Alberto Moreira
2011 C conf
IGARSS
Manfred Zink, Michael Bartusch, David Miller
2011 C conf
IGARSS
Birgit Schättler, Ralph Kahle, Robert Metzig, Ulrich Steinbrecher, Manfred Zink
2009 conf
IGARSS (1)
Marco Schwerdt, Benjamin Bräutigam, Björn Döring, Manfred Zink
2007 C conf
IGARSS
Thomas Börner, Konstantinos P. Papathanassiou, Nicolas Marquart, Manfred Zink, Martin Meininger, Peter J. Meadows, Anthony J. Rye, Patricia A. Wright, Betlem Rosich Tell
2007 C conf
IGARSS
Jaime Hueso Gonzalez, Markus Bachmann, Hauke Fiedler, Sigurd Huber, Gerhard Krieger, Manfred Zink
2007 C conf
IGARSS
Kais B. Khadhra, Thomas Börner, Madhu Chandra, Manfred Zink, David Hounam
2007 J jnl
IEEE Trans. Geosci. Remote. Sens.
Gerhard Krieger, Alberto Moreira, Hauke Fiedler, Irena Hajnsek, Marian Werner, Marwan Younis, Manfred Zink
2007 C conf
IGARSS
Manfred Zink, Gerhard Krieger, Hauke Fiedler, Alberto Moreira
2006 C conf
IGARSS
Manfred Zink, Hauke Fiedler, Irena Hajnsek, Gerhard Krieger, Alberto Moreira, Marian Werner
2004 C conf
IGARSS
Birgit Schättler, Thomas Fritz, Michael Eineder, Helko Breit, Manfred Zink
2004 C conf
IGARSS
Ramon Torres, Svein Lokas, Hermann Ludwig Möller, Manfred Zink, David M. Simpson
2003 C conf
IGARSS
Betlem Rosich, Manfred Zink, Ramón Torres, Josep Closa, Christopher Buck
2002 C conf
IGARSS
Manfred Zink, Ramon Torres, Christopher Buck, Betlem Rosich, Josep Closa
2002 J jnl
IEEE Trans. Geosci. Remote. Sens.
Dirk Geudtner, Manfred Zink, Christoph H. Gierull, Scott Shaffer
1995 J jnl
IEEE Trans. Geosci. Remote. Sens.
Manfred Zink, Richard Bamler
1994 J jnl
IEEE Trans. Geosci. Remote. Sens.
Anthony Freeman, Manfred Zink
1994 J jnl
IEEE Trans. Geosci. Remote. Sens.
Manfred Zink, Herwing Öttl, Anthony Freeman
1993 J jnl
IEEE Trans. Geosci. Remote. Sens.
Manfred Zink, Philippe Olivier, Anthony Freeman
1992 J jnl
IEEE Trans. Geosci. Remote. Sens.
Pedro Seifert, Harald Lentz, Manfred Zink, Franz Heel
redb/extractors/macho_extractors/macho_imports.py
← Index redb/extractors/macho_extractors/macho_imports.py python
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 MachOImport


class MachOImportExtractor(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_imports"
        self.log.debug(inspect.currentframe().f_code.co_name)

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

    def _extract_imports(self, arch_name=None):
        """Extract import information from the MachO binary for a specific architecture.

        Handles machofile v2026.2.4+ API where get_imported_functions() returns:
        Dict[str, List[Dict]] where each dict has {'name': str, 'sources': [str, ...]}
        """
        self.log.debug(inspect.currentframe().f_code.co_name)

        if not self.macho:
            return None

        try:
            # Get imported functions using API for specific architecture
            imported_functions = self.macho.get_imported_functions(arch=arch_name)
            if not imported_functions:
                return None

            # Keep the library→functions mapping (like PE does)
            library_names = []
            imports_with_mapping = []  # List of {library: [(name, source), ...]}

            for dylib_name, functions in imported_functions.items():
                # v2026.2.4+: dylib_name is already str, but handle bytes for compatibility
                if isinstance(dylib_name, bytes):
                    dylib_name = dylib_name.decode('utf-8', errors='replace')
                library_names.append(dylib_name)

                # Process function entries
                func_list = []
                for func_entry in functions:
                    # v2026.2.4+: func_entry is {'name': str, 'sources': [str, ...]}
                    if isinstance(func_entry, dict):
                        func_name = func_entry.get('name', '')
                        # Join sources if multiple, take first if single
                        sources = func_entry.get('sources', [])
                        import_source = sources[0] if sources else None
                        func_list.append((func_name, import_source))
                    else:
                        # Legacy format: func_entry is str or bytes
                        if isinstance(func_entry, bytes):
                            func_entry = func_entry.decode('utf-8', errors='replace')
                        func_list.append((func_entry, None))

                imports_with_mapping.append({dylib_name: func_list})

            # Count total functions
            total_functions = sum(len(list(d.values())[0]) for d in imports_with_mapping)

            # Create import dataclass with mapping preserved
            macho_import = MachOImport(
                macho_imports_total=total_functions,
                macho_import_libraryName=library_names if library_names else None,
                macho_import_functions=imports_with_mapping if imports_with_mapping else None
            )

            return macho_import

        except Exception as e:
            self.log.error(f"Error extracting MachO imports for arch {arch_name}: {e}")
            return None

    def extract(self):
        self.log.debug(inspect.currentframe().f_code.co_name)
        try:
            # Get architectures (macho is already parsed in base class)
            architectures = self.macho.get_architectures()
            if len(architectures) > 1:
                # FAT binary - return list of imports for each architecture
                results = []
                for arch_name in architectures:
                    imports = self._extract_imports(arch_name)
                    if imports:
                        imports.arch_identifier = arch_name
                        results.append(imports)
                return results
            else:
                # Single architecture - return single result
                return self._extract_imports(architectures[0] if architectures else None)
        except Exception as e:
            self.log.error(f"Error extracting MachO imports: {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

            # Flatten the data - one row per function import (like PE imports)
            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 imports for this architecture
                macho_import = self._extract_imports(arch_name)
                if not macho_import or not macho_import.macho_import_functions:
                    continue

                # Flatten to one row per (library, function) pair
                for lib_funcs in macho_import.macho_import_functions:
                    for lib, funcs in lib_funcs.items():
                        for func_name, import_source in funcs:
                            data.append([
                                arch_sha256,        # sha256 (arch-specific)
                                lib,                # library_name
                                func_name,          # function_name
                                import_source,      # import_source (chained_fixups, bind_opcodes, symtab)
                                current_time,       # analysis_date
                            ])

            column_names = [
                'sha256',
                'library_name', 'function_name', 'import_source',
                'analysis_date'
            ]

            if not data:
                return None

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

            return (data, column_names, column_type_names)

        return None

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