I-Hong Hou

121 papers A* 18A 2B 24Misc 1Journal 61Unranked 12
YearRankTypeTitle / Venue / Authors
2026 J jnl
IEEE Trans. Netw.
I-Hong Hou
2025 A* conf
INFOCOM
I-Hong Hou
2025 J jnl
IEEE Trans. Commun.
Siqi Fan, Yuxin Zhong, I-Hong Hou, Clement Kai-Ming Kam
2025 B conf
MobiHoc
Lin Wang, I-Hong Hou
2025 J jnl
CoRR
Lin Wang, I-Hong Hou
2024 J jnl
CoRR
Daojing Guo, Khaled Nakhleh, I-Hong Hou, Sastry Kompella, Clement Kam
2024 J jnl
IEEE/ACM Trans. Netw.
Daojing Guo, Khaled Nakhleh, I-Hong Hou, Sastry Kompella, Clement Kam
2024 conf
CDC
Xin Chen, I-Hong Hou
2024 J jnl
CoRR
Xin Chen, I-Hong Hou
2024 B conf
MobiHoc
Nida Zamir, I-Hong Hou
2024 J jnl
CoRR
Nida Zamir, I-Hong Hou
2024 B conf
MobiHoc
I-Hong Hou
2024 J jnl
CoRR
I-Hong Hou
2024 J jnl
CoRR
I-Hong Hou
2024 J jnl
CoRR
Siqi Fan, Yuxin Zhong, I-Hong Hou, Clement Kai-Ming Kam
2024 conf
IEEECONF
Siqi Fan, I-Hong Hou
2024 J jnl
CoRR
Siqi Fan, I-Hong Hou
2024 J jnl
CoRR
Md Kamran Chowdhury Shisher, Yin Sun, I-Hong Hou
2024 J jnl
IEEE/ACM Trans. Netw.
Md Kamran Chowdhury Shisher, Yin Sun, I-Hong Hou
2023 A* conf
INFOCOM
Siqi Fan, I-Hong Hou, Van Sy Mai
2023 J jnl
CoRR
Siqi Fan, I-Hong Hou, Van Sy Mai
2023 J jnl
CoRR
Md Kamran Chowdhury Shisher, Bo Ji, I-Hong Hou, Yin Sun
2023 B conf
ISIT
Siqi Fan, Yuxin Zhong, I-Hong Hou, Clement Kam
2023 J jnl
CoRR
Siqi Fan, Yuxin Zhong, I-Hong Hou, Clement Kam
2022 A* conf
INFOCOM
Daojing Guo, Khaled Nakhleh, I-Hong Hou, Sastry Kompella, Clement Kam
2022 J jnl
CoRR
Daojing Guo, Khaled Nakhleh, I-Hong Hou, Sastry Kompella, Clement Kam
2022 J jnl
IEEE Trans. Netw. Sci. Eng.
Jin Xu, I-Hong Hou, Natarajan Gautam
2022 A* conf
NeurIPS
Khaled Nakhleh, I-Hong Hou
2022 J jnl
CoRR
Khaled Nakhleh, I-Hong Hou
2022 conf
ICC
Siqi Fan, I-Hong Hou, Van Sy Mai, Lotfi Benmohamed
2021 J jnl
IEEE Trans. Commun.
Yu-Pin Hsu, I-Hong Hou, Alex Sprintson
2021 A* conf
NeurIPS
Khaled Nakhleh, Santosh Ganji, Ping-Chun Hsieh, I-Hong Hou, Srinivas Shakkottai
2021 J jnl
CoRR
Khaled Nakhleh, Santosh Ganji, Ping-Chun Hsieh, I-Hong Hou, Srinivas Shakkottai
2021 J jnl
CoRR
Siqi Fan, I-Hong Hou, Van Sy Mai, Lotfi Benmohamed
2021 A* conf
INFOCOM
Daojing Guo, Ping-Chun Hsieh, I-Hong Hou
2021 J jnl
IEEE J. Sel. Areas Commun.
Daojing Guo, I-Hong Hou
2020 J jnl
CoRR
Jin Xu, I-Hong Hou, Natarajan Gautam
2020 B conf
MobiHoc
Ping-Chun Hsieh, Xi Liu, I-Hong Hou
2020 J jnl
CoRR
Yu-Pin Hsu, I-Hong Hou, Alex Sprintson
2020 A* conf
INFOCOM
I-Hong Hou, Narges Zarnaghi Naghsh, Sibendu Paul, Y. Charlie Hu, Atilla Eryilmaz
2019 B conf
WiOpt
Aria HasanzadeZonuzy, I-Hong Hou, Srinivas Shakkottai
2019 J jnl
CoRR
Aria HasanzadeZonuzy, I-Hong Hou, Srinivas Shakkottai
2019 B conf
WiOpt
Archana Sasikumar, Tao Zhao, I-Hong Hou, Srinivas Shakkottai
2019 J jnl
CoRR
Archana Sasikumar, Tao Zhao, I-Hong Hou, Srinivas Shakkottai
2019 J jnl
CoRR
Ping-Chun Hsieh, Xi Liu, I-Hong Hou
2019 J jnl
IEEE J. Sel. Areas Commun.
Marios Kountouris, Petar Popovski, I-Hong Hou, Stefano Buzzi, Andreas Müller, Stefania Sesia, Robert W. Heath Jr.
2019 B conf
RTCSA
Lin Huang, I-Hong Hou, Sachin S. Sapatnekar, Jiang Hu
2019 B conf
WiOpt
Daojing Guo, I-Hong Hou
2019 J jnl
CoRR
Daojing Guo, I-Hong Hou
2019 J jnl
IEEE/ACM Trans. Netw.
Han Deng, Tao Zhao, I-Hong Hou
2019 J jnl
CoRR
I-Hong Hou, Narges Zarnaghi Naghsh, Sibendu Paul, Y. Charlie Hu, Atilla Eryilmaz
2018 A conf
ICDCS
Ping-Chun Hsieh, I-Hong Hou
2018 J jnl
IEEE/ACM Trans. Netw.
Tao Zhao, Korok Ray, I-Hong Hou
2018 Misc conf
RTNS
Lin Huang, I-Hong Hou, Sachin S. Sapatnekar, Jiang Hu
2018 J jnl
IEEE/ACM Trans. Netw.
Ping-Chun Hsieh, I-Hong Hou
2018 J jnl
IEEE/ACM Trans. Netw.
Han Deng, I-Hong Hou
2018 B conf
MobiHoc
Simon Yau, Ping-Chun Hsieh, Rajarshi Bhattacharyya, K. R. Kartic Bhargav, Srinivas Shakkottai, I-Hong Hou, P. R. Kumar
2018 B conf
MobiHoc
Simon Yau, Ping-Chun Hsieh, Rajarshi Bhattacharyya, K. R. Kartic Bhargav, Srinivas Shakkottai, I-Hong Hou, P. R. Kumar
2018 J jnl
IEEE J. Sel. Areas Commun.
Tao Zhao, I-Hong Hou, Shiqiang Wang, Kevin Chan
2017 B conf
WiOpt
Tao Zhao, Korok Ray, I-Hong Hou
2017 J jnl
CoRR
Ping-Chun Hsieh, I-Hong Hou, Xi Liu
2017 J jnl
IEEE Trans. Wirel. Commun.
Shuai Zuo, Han Deng, I-Hong Hou
2017 J jnl
IEEE Trans. Wirel. Commun.
Shuai Zuo, I-Hong Hou, Tie Liu, Ananthram Swami, Prithwish Basu
2017 conf
SIGMETRICS (Abstracts)
Han Deng, I-Hong Hou
2017 J jnl
CoRR
Han Deng, I-Hong Hou
2017 J jnl
IEEE Trans. Wirel. Commun.
Han Deng, I-Hong Hou
2017 J jnl
Queueing Syst. Theory Appl.
I-Hong Hou, Ping-Chun Hsieh
2017 B conf
MobiHoc
Ping-Chun Hsieh, Xi Liu, Jian Jiao, I-Hong Hou, Yunlong Zhang, P. R. Kumar
2017 J jnl
CoRR
Ping-Chun Hsieh, Xi Liu, Jian Jiao, I-Hong Hou, Yunlong Zhang, P. R. Kumar
2016 conf
SPCOM
Han Deng, I-Hong Hou
2016 B conf
MobiHoc
I-Hong Hou, Tao Zhao, Shiqiang Wang, Kevin Chan
2016 A* conf
INFOCOM
Ping-Chun Hsieh, I-Hong Hou
2016 A* conf
INFOCOM
I-Hong Hou
2016 A* conf
INFOCOM
Han Deng, I-Hong Hou
2016 J jnl
IEEE Trans. Wirel. Commun.
Abhishek Jain, I-Hong Hou
2015 J jnl
IEEE/ACM Trans. Netw.
I-Hong Hou
2015 B conf
MobiHoc
Xiaohan Kang, I-Hong Hou, Lei Ying
2015 A* conf
INFOCOM
Han Deng, I-Hong Hou
2015 J jnl
IEEE Trans. Wirel. Commun.
I-Hong Hou
2015 B conf
MobiHoc
I-Hong Hou, Ping-Chun Hsieh
2015 A* conf
SIGCOMM
Simon Yau, Liang Ge, Ping-Chun Hsieh, I-Hong Hou, Shuguang Cui, P. R. Kumar, Amal Ekbal, Nikhil Kundargi
2014 A* conf
INFOCOM
Rahul Singh, I-Hong Hou, P. R. Kumar
2014 conf
Allerton
Shuai Zuo, I-Hong Hou
2014 J jnl
IEEE/ACM Trans. Netw.
I-Hong Hou, Piyush Gupta
2014 J jnl
IEEE/ACM Trans. Netw.
I-Hong Hou
2013 B conf
WiOpt
I-Hong Hou, Yao Liu, Alex Sprintson
2013 J jnl
CoRR
I-Hong Hou, Chung Shue Chen
2013 J jnl
IEEE J. Sel. Areas Commun.
I-Hong Hou, Chung Shue Chen
2013 J jnl
CoRR
I-Hong Hou, Rahul Singh
2013 conf
GLOBECOM Workshops
I-Hong Hou, Jing Zhu, Rath Vannithamby
2013 book
Packets with Deadlines
I-Hong Hou, P. R. Kumar
2013 J jnl
CoRR
Rahul Singh, I-Hong Hou, P. R. Kumar
2013 conf
CDC
Rahul Singh, I-Hong Hou, P. R. Kumar
2013 B conf
GLOBECOM
I-Hong Hou
2013 B conf
MobiHoc
I-Hong Hou, Rahul Singh
2013 B conf
ISIT
Yu-Pin Hsu, I-Hong Hou, Alex Sprintson
2013 conf
Allerton
I-Hong Hou, Yu-Pin Hsu, Alex Sprintson
2012 J jnl
CoRR
I-Hong Hou, Yao Liu, Alex Sprintson
2012 J jnl
CoRR
I-Hong Hou
2012 J jnl
Queueing Syst. Theory Appl.
I-Hong Hou, P. R. Kumar
2012 J jnl
CoRR
I-Hong Hou, Rahul Singh
2012 J jnl
IEEE Wirel. Commun.
I-Hong Hou, P. R. Kumar
2012 conf
ICC
I-Hong Hou, Chung Shue Chen
2011 B conf
MobiHoc
I-Hong Hou, P. R. Kumar
2011 J jnl
CoRR
I-Hong Hou, Piyush Gupta
2011 B conf
ISIT
I-Hong Hou, Piyush Gupta
2011 conf
CDC/ECC
I-Hong Hou, Anh Truong, Santanu Chakraborty, P. R. Kumar
2011 A conf
RTSS
I-Hong Hou, P. R. Kumar
2011
I-Hong Hou
2010 A* conf
INFOCOM
I-Hong Hou, P. R. Kumar
2010 J jnl
CoRR
I-Hong Hou, P. R. Kumar
2010 A* conf
INFOCOM
I-Hong Hou, P. R. Kumar
2010 B conf
MobiHoc
I-Hong Hou, P. R. Kumar
2009 A* conf
INFOCOM
I-Hong Hou, Vivek S. Borkar, P. R. Kumar
2009 B conf
MobiHoc
I-Hong Hou, P. R. Kumar
2009 ch.
Guide to Wireless Sensor Networks
Jennifer C. Hou, David K. Y. Yau, Chris Y. T. Ma, Yong Yang, Honghai Zhang, I-Hong Hou, Nageswara S. V. Rao, Mallikarjun Shankar
2009 J jnl
CoRR
I-Hong Hou, P. R. Kumar
2009 A* conf
INFOCOM
Yong Yang, I-Hong Hou, Jennifer C. Hou, Mallikarjun Shankar, Nageswara S. V. Rao
2009 J jnl
CoRR
I-Hong Hou, P. R. Kumar
2008 A* conf
INFOCOM
I-Hong Hou, Yu-En Tsai, Tarek F. Abdelzaher, Indranil Gupta
2007 conf
IPSN
Jren-Chit Chin, I-Hong Hou, Jennifer C. Hou, Chris Y. T. Ma, Nageswara S. V. Rao, Mohit Saxena, Mallikarjun Shankar, Yong Yang, David K. Y. Yau
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