Carlos Eduardo Scheidegger

48 papers A 1B 4Journal 30Unranked 13
YearRankTypeTitle / Venue / Authors
2022 J jnl
CoRR
Ashkan Bashardoust, Sorelle A. Friedler, Carlos Eduardo Scheidegger, Blair D. Sullivan, Suresh Venkatasubramanian
2020 J jnl
CoRR
Hannah C. Beilinson, Nasanbayar Ulzii-Orshikh, Ashkan Bashardoust, Sorelle A. Friedler, Carlos Eduardo Scheidegger, Suresh Venkatasubramanian
2018 J jnl
IEEE Trans. Vis. Comput. Graph.
Yong Wang, Daniel Archambault, Carlos Eduardo Scheidegger, Huamin Qu
2018 B conf
ALT
Danielle Ensign, Sorelle A. Friedler, Scott Neville, Carlos Eduardo Scheidegger, Suresh Venkatasubramanian
2017 J jnl
Dagstuhl Reports
Remco Chang, Jean-Daniel Fekete, Juliana Freire, Carlos Eduardo Scheidegger
2017 J jnl
CoRR
Danielle Ensign, Sorelle A. Friedler, Scott Neville, Carlos Eduardo Scheidegger, Suresh Venkatasubramanian
2017 J jnl
Bioinform.
Asher Haug-Baltzell, Sean A. Stephens, Sean Davey, Carlos Eduardo Scheidegger, Eric Lyons
2015 conf
VAST
Stephen C. North, Carlos Eduardo Scheidegger, Simon Urbanek, Gordon Woodhull
2014 J jnl
IEEE Trans. Vis. Comput. Graph.
Gordon L. Kindlmann, Carlos Eduardo Scheidegger
2014 J jnl
IEEE Trans. Vis. Comput. Graph.
Tiago Etiene, Daniel Jönsson, Timo Ropinski, Carlos Eduardo Scheidegger, João Luiz Dihl Comba, Luis Gustavo Nonato, Robert M. Kirby, Anders Ynnerman, Cláudio T. Silva
2014 J jnl
IEEE Computer Graphics and Applications
Çagatay Demiralp, Carlos Eduardo Scheidegger, Gordon L. Kindlmann, David H. Laidlaw, Jeffrey Heer
2013 J jnl
IEEE Trans. Vis. Comput. Graph.
Lauro Didier Lins, James T. Klosowski, Carlos Eduardo Scheidegger
2013 J jnl
Comput. Graph. Forum
Nivan Ferreira, James T. Klosowski, Carlos Eduardo Scheidegger, Cláudio T. Silva
2012 conf
KDD Cup
Suhrid Balakrishnan, Rensheng Wang, Carlos Eduardo Scheidegger, Angus MacLellan, Yifan Hu, Aaron Archer, Shankar Krishnan, David L. Applegate, Guangqin Ma, S. Tom Au
2012 J jnl
Comput. Graph. Forum
Marc Khoury, Yifan Hu, Shankar Krishnan, Carlos Eduardo Scheidegger
2012 J jnl
IEEE Trans. Vis. Comput. Graph.
Tiago Etiene, Luis Gustavo Nonato, Carlos Eduardo Scheidegger, Julien Tierny, Thomas J. Peters, Valerio Pascucci, Robert M. Kirby, Cláudio T. Silva
2012 J jnl
CoRR
Nivan Ferreira, James T. Klosowski, Carlos Eduardo Scheidegger, Cláudio T. Silva
2011 J jnl
Comput. Sci. Eng.
Carlos Eduardo Scheidegger, Cláudio T. Silva, Daniel Weiskopf
2011 B conf
PacificVis
Emden R. Gansner, Yifan Hu, Stephen C. North, Carlos Eduardo Scheidegger
2010 conf
IPAW
David Koop, Carlos Eduardo Scheidegger, Juliana Freire, Cláudio T. Silva
2009 J jnl
IEEE Trans. Vis. Comput. Graph.
Hao Wang, Carlos Eduardo Scheidegger, Cláudio T. Silva
2009 J jnl
IEEE Trans. Vis. Comput. Graph.
Carlos Augusto Dietrich, Carlos Eduardo Scheidegger, John M. Schreiner, João Luiz Dihl Comba, Luciana Porcher Nedel, Cláudio T. Silva
2009 J jnl
Comput. Sci. Eng.
Carlos Augusto Dietrich, Carlos Eduardo Scheidegger, João Luiz Dihl Comba, Luciana Porcher Nedel, Cláudio T. Silva
2009 J jnl
IEEE Trans. Vis. Comput. Graph.
Tiago Etiene, Carlos Eduardo Scheidegger, Luis Gustavo Nonato, Robert M. Kirby, Cláudio T. Silva
2008 J jnl
Comput. Sci. Eng.
Steven P. Callahan, Jason H. Callahan, Carlos Eduardo Scheidegger, Cláudio T. Silva
2008 J jnl
IEEE Trans. Vis. Comput. Graph.
Carlos Augusto Dietrich, Carlos Eduardo Scheidegger, João Luiz Dihl Comba, Luciana Porcher Nedel, Cláudio T. Silva
2008 conf
eScience
Bill Howe, Peter Lawson, Renee Bellinger, Erik W. Anderson, Emanuele Santos, Juliana Freire, Carlos Eduardo Scheidegger, António M. Baptista, Cláudio T. Silva
2008 B conf
SSDBM
Lauro Didier Lins, David Koop, Erik W. Anderson, Steven P. Callahan, Emanuele Santos, Carlos Eduardo Scheidegger, Juliana Freire, Cláudio T. Silva
2008 conf
Shape Modeling International
Hao Wang, Carlos Eduardo Scheidegger, Cláudio T. Silva
2008 conf
SIGMOD Conference
Carlos Eduardo Scheidegger, Huy T. Vo, David Koop, Juliana Freire, Cláudio T. Silva
2008 J jnl
IEEE Trans. Vis. Comput. Graph.
Carlos Eduardo Scheidegger, John M. Schreiner, Brian Duffy, Hamish A. Carr, Cláudio T. Silva
2008 J jnl
Concurr. Comput. Pract. Exp.
Luc Moreau, Bertram Ludäscher, Ilkay Altintas, Roger S. Barga, Shawn Bowers, Steven P. Callahan, George Chin Jr., Ben Clifford, Shirley Cohen, Sarah Cohen Boulakia, Susan B. Davidson, Ewa Deelman, Luciano A. Digiampietri, Ian T. Foster, Juliana Freire, James Frew, Joe Futrelle, Tara Gibson, Yolanda Gil, Carole A. Goble, Jennifer Golbeck, Paul Groth, David A. Holland, Sheng Jiang, Jihie Kim, David Koop, Ales Krenek, Timothy M. McPhillips, Gaurang Mehta, Simon Miles, Dominic Metzger, Steve Munroe, Jim Myers, Beth Plale, Norbert Podhorszki, Varun Ratnakar, Emanuele Santos, Carlos Eduardo Scheidegger, Karen Schuchardt, Margo I. Seltzer, Yogesh L. Simmhan, Cláudio T. Silva, Peter Slaughter, Eric G. Stephan, Robert Stevens, Daniele Turi, Huy T. Vo, Michael Wilde, Jun Zhao, Yong Zhao
2008 J jnl
Concurr. Comput. Pract. Exp.
Carlos Eduardo Scheidegger, David Koop, Emanuele Santos, Huy T. Vo, Steven P. Callahan, Juliana Freire, Cláudio T. Silva
2008 conf
IPAW
Steven P. Callahan, Juliana Freire, Carlos Eduardo Scheidegger, Cláudio T. Silva, Huy T. Vo
2008 J jnl
IEEE Trans. Vis. Comput. Graph.
David Koop, Carlos Eduardo Scheidegger, Steven P. Callahan, Juliana Freire, Cláudio T. Silva
2007 conf
SIBGRAPI
Erik W. Anderson, Steven P. Callahan, Carlos Eduardo Scheidegger, John M. Schreiner, Cláudio T. Silva
2007 J jnl
IEEE Trans. Vis. Comput. Graph.
Carlos Eduardo Scheidegger, Huy T. Vo, David Koop, Juliana Freire, Cláudio T. Silva
2006 J jnl
Comput. Graph. Forum
John M. Schreiner, Carlos Eduardo Scheidegger, Shachar Fleishman, Cláudio T. Silva
2006 J jnl
IEEE Trans. Vis. Comput. Graph.
John M. Schreiner, Carlos Eduardo Scheidegger, Cláudio T. Silva
2006 conf
IPAW
Juliana Freire, Cláudio T. Silva, Steven P. Callahan, Emanuele Santos, Carlos Eduardo Scheidegger, Huy T. Vo
2006 conf
ICDE Workshops
Steven P. Callahan, Juliana Freire, Emanuele Santos, Carlos Eduardo Scheidegger, Cláudio T. Silva, Huy T. Vo
2006 conf
SIGMOD Conference
Steven P. Callahan, Juliana Freire, Emanuele Santos, Carlos Eduardo Scheidegger, Cláudio T. Silva, Huy T. Vo
2005 conf
SIBGRAPI
Marcus A. C. Farias, Carlos Eduardo Scheidegger, João Luiz Dihl Comba, Luiz Velho
2005 J jnl
Comput. Graph. Forum
Carlos Eduardo Scheidegger, João Luiz Dihl Comba, Rudnei Dias da Cunha
2005 B conf
Symposium on Geometry Processing
Carlos Eduardo Scheidegger, Shachar Fleishman, Cláudio T. Silva
2005 A conf
IEEE Visualization
Louis Bavoil, Steven P. Callahan, Carlos Eduardo Scheidegger, Huy T. Vo, Patricia Crossno, Cláudio T. Silva, Juliana Freire
2004 conf
SIBGRAPI
Carlos Eduardo Scheidegger, João Luiz Dihl Comba, Rudnei Dias da Cunha
2003 J jnl
RITA
João Luiz Dihl Comba, Carlos Augusto Dietrich, Christian Azambuja Pagot, Carlos Eduardo Scheidegger
redb/extractors/macho_extractor.py
← Index redb/extractors/macho_extractor.py python
import logging
from abc import ABCMeta, abstractmethod
import inspect
import sys
import os

import machofile

from redb.extractors.extractor import Extractor

logger = logging.getLogger(__name__)


@abstractmethod
class MachOExtractor(Extractor, metaclass=ABCMeta):

    def __init__(
        self,
        filepath,
        log,
        exporters=None,
        index_prefix=None,
        elastic_index=None,
        known_benign=False,
        known_malicious=False,
        macho=None,
    ):
        # Read binary and parse machofile BEFORE calling super().__init__
        # This avoids reading the file twice
        with open(filepath, "rb") as f:
            binary_data = f.read()

        # Parse machofile with binary data
        self.macho = macho if macho else self._generate_machofile_object(binary_data)

        # Extract hashes from machofile to pass to parent
        precomputed_hashes = None
        if self.macho:
            try:
                general_info = self.macho.get_general_info()
                if general_info:
                    # For FAT binaries, get_general_info() returns dict with 'fat' key
                    # For single-arch, it returns the info directly
                    if 'fat' in general_info:
                        fat_info = general_info['fat']
                        precomputed_hashes = {
                            'MD5': fat_info.get('MD5'),
                            'SHA1': fat_info.get('SHA1'),
                            'SHA256': fat_info.get('SHA256'),
                        }
                    else:
                        precomputed_hashes = {
                            'MD5': general_info.get('MD5'),
                            'SHA1': general_info.get('SHA1'),
                            'SHA256': general_info.get('SHA256'),
                        }
            except Exception as e:
                logger.debug(f"Could not get hashes from machofile: {e}")

        super().__init__(
            filepath,
            log,
            exporters,
            index_prefix,
            elastic_index,
            known_benign,
            known_malicious,
            precomputed_hashes=precomputed_hashes,
        )

        # Store binary data so base class doesn't re-read
        self._binary_data = binary_data

    @property
    def binary(self):
        """Override to use already-read binary data."""
        return self._binary_data

    def _generate_machofile_object(self, binary_data):
        """Generate and parse a machofile object from binary data."""
        macho = None
        try:
            macho = machofile.UniversalMachO(data=binary_data)
            if not macho:
                raise Exception("Empty file?")

            # Parse the MachO object once during initialization
            macho.parse()

        except Exception as e:
            logger.error(f"Format error parsing MachO: {e}")
        return macho

    # def _is_macho_file(self):
    #     """Check if the file is a valid Mach-O binary."""
    #     try:
    #         if not self.macho:
    #             return False
            
    #         # For Universal/FAT binaries, check if any architecture is valid
    #         if hasattr(self.macho, 'is_fat') and self.macho.is_fat:
    #             return len(self.macho.architectures) > 0
    #         else:
    #             # Single architecture binary
    #             return hasattr(self.macho, 'macho') and self.macho.macho is not None
    #     except Exception as e:
    #         self.log.error(f"Error checking Mach-O file: {e}")
    #         return False

    def _is_signed(self):
        """Check if the Mach-O binary is code signed using new API."""
        try:
            if not self.macho:
                return False

            # Get architectures using new API
            architectures = self.macho.get_architectures()

            # For each architecture, check if signed
            for arch in architectures:
                try:
                    signature_info = self.macho.get_code_signature_info(arch=arch)
                    if signature_info and signature_info.get('signed', False):
                        return True
                except Exception:
                    continue

            return False
        except Exception as e:
            self.log.error(f"Error checking Mach-O signature: {e}")
            return False

    def _get_architectures(self):
        """Get list of architectures in the Mach-O binary using new API."""
        try:
            if not self.macho:
                return []

            # Use new API method
            architectures = self.macho.get_architectures()
            return architectures if architectures else []
        except Exception as e:
            self.log.error(f"Error getting architectures: {e}")
            return []

    # def _get_macho_for_arch(self, arch_name=None):
    #     """Get MachO instance for specific architecture or default."""
    #     try:
    #         if not self.macho:
    #             return None
            
    #         if hasattr(self.macho, 'is_fat') and self.macho.is_fat:
    #             if arch_name:
    #                 return self.macho.architectures.get(arch_name)
    #             else:
    #                 # Return first available architecture
    #                 return next(iter(self.macho.architectures.values())) if self.macho.architectures else None
    #         else:
    #             # Single architecture binary
    #             return self.macho.macho if hasattr(self.macho, 'macho') else None
    #     except Exception as e:
    #         self.log.error(f"Error getting MachO for architecture: {e}")
    #         return None

    # def _get_formatted_header_values(self, header):
    #     """Get both raw and human-readable header values."""
    #     try:
    #         macho_instance = self._get_macho_for_arch()
    #         if not macho_instance:
    #             return None
            
    #         # Parse the MachO if not already parsed
    #         if not hasattr(macho_instance, 'header') or not macho_instance.header:
    #             macho_instance.parse()
            
    #         # Get human-readable values using machofile's formatting methods
    #         magic_str = macho_instance.format_magic_value(header.get('magic', 0))
            
    #         # Simple CPU type mapping since CPU_TYPE_MAP is not exposed
    #         cputype = header.get('cputype', 0)
    #         if cputype == 0x7:
    #             cputype_str = "x86"
    #         elif cputype == 0x1000007:
    #             cputype_str = "x86_64"
    #         elif cputype == 0xC:
    #             cputype_str = "ARM"
    #         elif cputype == 0x100000C:
    #             cputype_str = "ARM 64-bit"
    #         else:
    #             cputype_str = str(cputype)
            
    #         cpusubtype_str = macho_instance.decode_cpusubtype(header.get('cputype', 0), header.get('cpusubtype', 0))
    #         filetype_str = macho_instance.format_file_type(header.get('filetype', 0))
    #         flags_str = macho_instance.decode_flags(header.get('flags', 0))
            
    #         return {
    #             'raw': {
    #                 'magic': header.get('magic', 0),
    #                 'cputype': header.get('cputype', 0),
    #                 'cpusubtype': header.get('cpusubtype', 0),
    #                 'filetype': header.get('filetype', 0),
    #                 'flags': header.get('flags', 0),
    #             },
    #             'formatted': {
    #                 'magic_str': magic_str,
    #                 'cputype_str': cputype_str,
    #                 'cpusubtype_str': cpusubtype_str,
    #                 'filetype_str': filetype_str,
    #                 'flags_str': flags_str,
    #             }
    #         }
    #     except Exception as e:
    #         self.log.error(f"Error formatting header values: {e}")
    #         return None