Octav Chipara

46 papers A* 2A 5B 6Misc 6Journal 13Unranked 14
YearRankTypeTitle / Venue / Authors
2023 J jnl
Frontiers Digit. Health
Erik Jorgensen, Jingjing Xu, Octav Chipara, Yu-Hsiang Wu
2022 conf
ICHI
Yumna Anwar, Sean M. Mullan, Octav Chipara, Alberto M. Segre, Philip Polgreen
2022 J jnl
CoRR
Dhruv Vyas, Erik Jorgensen, Yu-Hsiang Wu, Octav Chipara
2021 conf
NSysS
Md Kowsar Hossain, Ryan Brummet, Octav Chipara, Ted Herman, Steve Goddard
2021 J jnl
Pervasive Mob. Comput.
Daniela Nicklas, Octav Chipara, Salil S. Kanhere, Delphine Reinhardt
2021 J jnl
ACM Trans. Sens. Networks
Ryan Brummet, Md Kowsar Hossain, Octav Chipara, Ted Herman, David E. Stewart
2021 conf
IPSN
Ryan Brummet, Md Kowsar Hossain, Octav Chipara, Ted Herman, Steve Goddard
2020 conf
IoTDI
Ryan Brummet, Octav Chipara, Ted Herman
2020 J jnl
CoRR
Ryan Brummet, Md Kowsar Hossain, Octav Chipara, Ted Herman, David E. Steward
2018 conf
ICII
Ryan Brummet, Dolvara Gunatilaka, Dhruv Vyas, Octav Chipara, Chenyang Lu
2018 conf
IoTDI
Farley Lai, Marjan Radi, Octav Chipara, William G. Griswold
2017 conf
INFOCOM Workshops
Syed Shabih Hasan, Ryan Brummet, Octav Chipara, Yu-Hsiang Wu
2017 B conf
EWSN
Leo Selavo, Octav Chipara
2017 B conf
DCOSS
Leo Selavo, Dhruv Vyas, Moosa Yahyazadeh, Octav Chipara
2017 J jnl
ACM Trans. Sens. Networks
Behnam Dezfouli, Marjan Radi, Octav Chipara
2016 A* conf
INFOCOM
Behnam Dezfouli, Marjan Radi, Octav Chipara
2016 conf
CCNC
Behnam Dezfouli, Marjan Radi, Octav Chipara
2015 conf
ICHI
Syed Shabih Hasan, Ryan Brummet, Octav Chipara, Yu-Hsiang Wu, Tianbao Yang
2015 A conf
Middleware
Nima Nikzad, Marjan Radi, Octav Chipara, William G. Griswold
2015 J jnl
CoRR
Henry E. Baidoo-Williams, Octav Chipara, Raghuraman Mudumbai, Soura Dasgupta
2015 Misc conf
EMSOFT
Farley Lai, Daniel Schmidt, Octav Chipara
2014 A* conf
ICSE
Nima Nikzad, Octav Chipara, William G. Griswold
2014 conf
IPSN
Farley Lai, Syed Shabih Hasan, Austin Laugesen, Octav Chipara
2014 conf
PervasiveHealth
Syed Shabih Hasan, Octav Chipara, Yu-Hsiang Wu, Nazan Aksan
2013 B conf
CBMS
Syed Shabih Hasan, Farley Lai, Octav Chipara, Yu-Hsiang Wu
2013 J jnl
ACM SIGMOBILE Mob. Comput. Commun. Rev.
Anders Nilsson Plymoth, Per Johansson, Rene L. Cruz, Octav Chipara, William G. Griswold
2013 J jnl
IEEE Trans. Computers
Octav Chipara, Chenyang Lu, Gruia-Catalin Roman
2012 A conf
MobiSys
Octav Chipara, William G. Griswold, Anders Nilsson Plymoth, Ricky Huang, Fang Liu, Per Johansson, Ramesh R. Rao, Theodore C. Chan, Colleen Buono
2011 J jnl
IEEE Trans. Mob. Comput.
Octav Chipara, Chenyang Lu, John A. Stankovic, Gruia-Catalin Roman
2011 B conf
ECRTS
Octav Chipara, Chengjie Wu, Chenyang Lu, William G. Griswold
2010 conf
IPSN
Octav Chipara, Gregory Hackmann, Chenyang Lu, William D. Smart, Gruia-Catalin Roman
2010 Misc conf
SenSys
Octav Chipara, Chenyang Lu, Thomas C. Bailey, Gruia-Catalin Roman
2009 conf
IPSN
Octav Chipara, Christopher Brooks, Sangeeta Bhattacharya, Chenyang Lu, Roger D. Chamberlain, Gruia-Catalin Roman, Thomas C. Bailey
2009 Misc conf
AMIA
Octav Chipara, Christopher Brooks, Sangeeta Bhattacharya, Chenyang Lu, Roger D. Chamberlain, Gruia-Catalin Roman, Thomas C. Bailey
2009 J jnl
Wirel. Commun. Mob. Comput.
Guoliang Xing, Mo Sha, Gregory Hackmann, Kevin Klues, Octav Chipara, Chenyang Lu
2008 Misc conf
SenSys
Gregory Hackmann, Octav Chipara, Chenyang Lu
2008 J jnl
SIGBED Rev.
Octav Chipara, Chenyang Lu
2007 Misc conf
SenSys
Kevin Klues, Gregory Hackmann, Octav Chipara, Chenyang Lu
2007 A conf
RTSS
Octav Chipara, Chenyang Lu, Gruia-Catalin Roman
2006 B conf
ICNP
Octav Chipara, Chenyang Lu, John A. Stankovic
2006 B conf
IWQoS
Octav Chipara, Zhimin He, Guoliang Xing, Qin Chen, Xiaorui Wang, Chenyang Lu, John A. Stankovic, Tarek F. Abdelzaher
2005 A conf
ICDCS
Chenyang Lu, Guoliang Xing, Octav Chipara, Chien-Liang Fok, Sangeeta Bhattacharya
2005 J jnl
Proc. IEEE
Dennis Gannon, Jay Alameda, Octav Chipara, Marcus Christie, Vinayak Dukle, Liang Fang, Matthew Farrellee, Gopi Kandaswamy, Deepti Kodeboyina, Sriram Krishnan, Charles W. Moad, Marlon E. Pierce, Beth Plale, Al Rossi, Yogesh Simmhan, Anuraag Sarangi, Aleksander Slominski, Satoshi Shirasuna, Thomas Thomas
2005 conf
IPSN
Sangeeta Bhattacharya, Guoliang Xing, Chenyang Lu, Gruia-Catalin Roman, Octav Chipara, Brandon Harris
2005 A conf
ICDCS
Octav Chipara, Chenyang Lu, Gruia-Catalin Roman
2004 Misc conf
SenSys
Sangeeta Bhattacharya, Octav Chipara, Brandon Harris, Chenyang Lu, Guoliang Xing, Chien-Liang Fok
redb/extractors/macho_extractors/macho_exports.py
← Index redb/extractors/macho_extractors/macho_exports.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 MachOExport


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

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

    def _extract_exports(self, arch_name=None):
        """Extract export information from the MachO binary for a specific architecture."""
        self.log.debug(inspect.currentframe().f_code.co_name)

        if not self.macho:
            return None

        try:
            # Get exported symbols using new API for specific architecture
            exported_symbols = self.macho.get_exported_symbols(arch=arch_name)

            # Extract all exported symbols (may be empty for some binaries)
            # Handle None or empty dict
            if not exported_symbols:
                exported_symbols = {}
            all_symbols = []
            for dylib_name, symbols in exported_symbols.items():
                # Process symbol names
                for symbol in symbols:
                    if isinstance(symbol, bytes):
                        symbol = symbol.decode('utf-8', errors='replace')
                    all_symbols.append(symbol)

            # Create export dataclass
            macho_export = MachOExport(
                macho_exports_total=len(all_symbols),
                macho_export_symbols=all_symbols  # Empty list is fine, but None is not allowed for Array type
            )

            return macho_export

        except Exception as e:
            self.log.error(f"Error extracting MachO exports 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 exports for each architecture
                results = []
                for arch_name in architectures:
                    exports = self._extract_exports(arch_name)
                    if exports:
                        exports.arch_identifier = arch_name
                        results.append(exports)
                return results
            else:
                # Single architecture - return single result
                return self._extract_exports(architectures[0] if architectures else None)
        except Exception as e:
            self.log.error(f"Error extracting MachO exports: {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 exports for this architecture
                macho_export = self._extract_exports(arch_name)
                if not macho_export:
                    continue

                data.append([
                    arch_sha256,                          # sha256 (arch-specific)
                    macho_export.macho_exports_total,     # macho_exports_total
                    macho_export.macho_export_symbols,    # macho_export_symbols (keep as array!)
                    current_time,                         # analysis_date
                ])

            column_names = [
                'sha256',
                'macho_exports_total', 'macho_export_symbols',
                'analysis_date'
            ]

            if not data:
                return None

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

            return (data, column_names, column_type_names)

        return None

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