Jaehoon Jeong

50 papers A* 4A 3B 3Journal 20Unranked 20
YearRankTypeTitle / Venue / Authors
2025 B conf
NetSoft
Eshita Rastogi, Mukesh Kumar Maheshwari, Ayush Rastogi, Jaehoon Jeong
2025 J jnl
IEEE Netw.
Jinyong Kim, Jaehoon Jeong, Jeonghyeon Kim, Joomin Kim
2025 J jnl
IEEE Commun. Mag.
Patrick Lingga, Jaehoon Jeong, Linda Dunbar
2024 J jnl
Comput. Networks
Eshita Rastogi, Abhishek Roy, Ayush Rastogi, Jaehoon Jeong, Navrati Saxena
2024 J jnl
IEEE Trans. Veh. Technol.
Yiwen Shen, Jaehoon Jeong, Junghyun Jun, Tae (Tom) Oh, Youngmi Baek
2024 J jnl
IEEE Netw.
Yoseop Ahn, Minje Kim, Jeongah Lee, Yiwen Shen, Jaehoon Jeong
2024 J jnl
IEEE Trans. Dependable Secur. Comput.
Patrick Lingga, Jaehoon Jeong, Jinhyuk Yang, Jeonghyeon Kim
2023 J jnl
IEEE Trans. Intell. Transp. Syst.
Bien Aime Mugabarigira, Yiwen Shen, Jaehoon Jeong, Tae Tom Oh, Han-You Jeong
2022 conf
ICTC
Junhee Kwon, Jaehoon Jeong
2022 conf
ISOCC
Youngchae Jeon, Jaehoon Jeong, Yeong Min Jang, Jinho Jeong
2021 J jnl
Veh. Commun.
Jaehoon Jeong, Yiwen Shen, Tae Tom Oh, Sandra Céspedes, Nabil Benamar, Michelle Wetterwald, Jérôme Härri
2021 conf
ICTC
Hyejun Jeong, Jaeju An, Jaehoon Jeong
2021 conf
ICTC
Patrick Lingga, Jeonghyeon Kim, Jorge David Iranzo Bartolomé, Jaehoon Jeong
2021 conf
ICTC
Xiaohong Yu, Yoseop Ahn, Jaehoon Jeong
2020 J jnl
IEEE Commun. Mag.
Jinyong Tim Kim, Eunsoo Kim, Jinhyuk Yang, Jaehoon Jeong, Hyoungshick Kim, Sangwon Hyun, Hyunsik Yang, Jaewook Oh, Younghan Kim, Susan Hares, Linda Dunbar
2019 J jnl
IEEE Trans. Intell. Transp. Syst.
Jinyong Kim, Seokhwa Kim, Jaehoon Jeong, Hyoungshick Kim, Jung-Soo Park, Taeho Kim
2018 conf
ICTC
Dongjin Hong, Jinyong Kim, Jaehoon Jeong
2018 J jnl
IEEE Commun. Mag.
Sangwon Hyun, Jinyong Kim, Hyoungshick Kim, Jaehoon Jeong, Susan Hares, Linda Dunbar, Adrian Farrel
2018 J jnl
IEEE Trans. Intell. Transp. Syst.
Yiwen Shen, Jinho Lee, Hohyeon Jeong, Jaehoon Jeong, Eunseok Lee, David H. C. Du
2018 J jnl
IEEE Trans. Intell. Transp. Syst.
Jaehoon Jeong, Yiwen Shen, Sangsoo Jeong, Sejun Lee, Hwanseok (Harrison) Jeong, Tae Tom Oh, Taejoon Park, Muhammad Usman Ilyas, Sang Hyuk Son, David H. C. Du
2017 conf
AINA Workshops
Bien Aime Mugabarigira, Yiwen Chris Shen, Jaehoon Jeong, Tae (Tom) Oh, Sang Hyuk Son
2016 A conf
ICDCS
Jung Hyun Jun, Solchan Yeon, Titir Kundu, Dharma P. Agrawal, Jaehoon Jeong
2016 conf
AINA Workshops
Yiwen Shen, Jaehoon Jeong, Tae (Tom) Oh, Sang Hyuk Son
2016 conf
AINA Workshops
Jinho Lee, Jaehoon Jeong, Tae (Tom) Oh, Jung Hyun Jun, Sang Hyuk Son
2016 conf
AINA Workshops
Younghwa Jo, Jaehoon Jeong
2016 J jnl
IEEE Trans. Veh. Technol.
Jaehoon Jeong, Hohyeon Jeong, Eunseok Lee, Tae (Tom) Oh, David H. C. Du
2016 conf
AINA Workshops
Jinyong Kim, Jinho Lee, Jaehoon Jeong, Hyoungshick Kim, Jung-Soo Park, Taeho Kim
2015 conf
AINA Workshops
Jaehoon Jeong, Jihyeok Seo, Geumhwan Cho, Hyoungshick Kim, Jung-Soo Park
2015 conf
AINA Workshops
Hyunsu Jang, Jaehoon Jeong, Hyoungshick Kim, Jung-Soo Park
2015 conf
AINA Workshops
Sejun Lee, Jaehoon Jeong, Jung-Soo Park
2015 B conf
ICCCN
Munyoung Lee, Jung Hwan Song, Jaehoon Jeong, Ted Taekyoung Kwon
2015 conf
AINA Workshops
Jihyeok Seo, Jaehoon Jeong, Hyoungshick Kim, Jung-Soo Park
2014 conf
AINA Workshops
Jaehoon Jeong, Eunseok Lee
2013 J jnl
IEEE Internet Comput.
Soohong Daniel Park, Jaehoon Jeong, Choong Seon Hong
2012 J jnl
IEEE Trans. Mob. Comput.
Jaehoon Jeong, Shuo Guo, Yu (Jason) Gu, Tian He, David H. C. Du
2011 J jnl
IEEE Trans. Computers
Jaehoon Jeong, Shuo Guo, Tian He, David H. C. Du
2011 J jnl
Comput. Networks
Hyoungshick Kim, Jaehoon Jeong
2011 J jnl
IEEE Trans. Parallel Distributed Syst.
Jaehoon Jeong, Shuo Guo, Yu (Jason) Gu, Tian He, David H. C. Du
2011 A* conf
INFOCOM
Fulong Xu, Shuo Guo, Jaehoon Jeong, Yu Gu, Qing Cao, Ming Liu, Tian He
2010 A conf
ICDCS
Jaehoon Jeong, Shuo Guo, Yu Gu, Tian He, David H. C. Du
2010 J jnl
IEEE Trans. Parallel Distributed Syst.
Jaehoon Jeong, Yu Gu, Tian He, David H. C. Du
2009 A conf
ICDCS
Jaehoon Jeong, Shuo Guo, Yu Gu, Tian He, David Hung-Chang Du
2009 A* conf
INFOCOM
Jaehoon Jeong, Yu Gu, Tian He, David Hung-Chang Du
2008 A* conf
INFOCOM
Jaehoon Jeong, Shuo Guo, Tian He, David Hung-Chang Du
2007 A* conf
INFOCOM
Jaehoon Jeong, Taehyun Hwang, Tian He, David Hung-Chang Du
2004 conf
ICOIN
Jaehoon Jeong, Jung-Soo Park, Hyoungjun Kim
2003 conf
ICOIN
Jaehoon Jeong, Jung-Soo Park, Hyoungjun Kim, Kishik Park
2003 B conf
PIMRC
Jaehoon Jeong, Jung-Soo Park, Hyoungjun Kim
2002 conf
ICON
Jaehoon Jeong, Jung-Soo Park
2002 conf
ICOIN (1)
Jaehoon Jeong, Seungyun Lee, Yongjin Kim, Yanghee Choi
redb/extractors/macho_extractors/macho_dylibs.py
← Index redb/extractors/macho_extractors/macho_dylibs.py python
import hashlib
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 MachODylib


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

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

    def _extract_dylibs(self):
        """Extract dynamic library information from all architectures in the MachO binary."""
        self.log.debug(inspect.currentframe().f_code.co_name)
        dylibs = []

        if not self.macho:
            return dylibs

        try:
            # Get architectures using new API (already parsed in base class)
            architectures = self.macho.get_architectures()
            if not architectures:
                return dylibs

            # Process each architecture
            for arch_name in architectures:
                # Get dylib commands using new API with architecture parameter
                dylib_commands = self.macho.get_dylib_commands(arch=arch_name)
                if not dylib_commands:
                    continue

                # Extract dylib commands for this architecture
                for dylib_cmd in dylib_commands:
                    try:
                        dylib_name = dylib_cmd.get('dylib_name', 'Unknown')
                        if isinstance(dylib_name, bytes):
                            dylib_name = dylib_name.decode('utf-8', errors='replace')

                        # Create dylib dataclass with architecture info
                        macho_dylib = MachODylib(
                            dylib_name=dylib_name,
                            dylib_timestamp=dylib_cmd.get('dylib_timestamp', 0),
                            dylib_current_version=dylib_cmd.get('dylib_current_version', 0),
                            dylib_compat_version=dylib_cmd.get('dylib_compat_version', 0),
                        )
                        # Add architecture info to the dylib
                        macho_dylib.architecture = arch_name
                        dylibs.append(macho_dylib)

                    except Exception as e:
                        self.log.warning(
                            f'Unable to process dylib "{dylib_cmd.get("dylib_name", "Unknown")}" for architecture {arch_name} in {self.hash.sha256}: {e}'
                        )
                        continue

            return dylibs

        except Exception as e:
            self.log.error(f"Error extracting MachO dylibs: {e}")
            return dylibs

    def extract(self):
        self.log.debug(inspect.currentframe().f_code.co_name)
        try:
            dylibs = self._extract_dylibs()
            return dylibs
        except Exception as e:
            self.log.error(f"Error extracting MachO dylibs: {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 dylib commands for this architecture
                dylib_commands = self.macho.get_dylib_commands(arch=arch_name)
                if not dylib_commands:
                    continue

                # Process each dylib for this architecture
                for dylib_cmd in dylib_commands:
                    try:
                        dylib_name = dylib_cmd.get('dylib_name', 'Unknown')
                        if isinstance(dylib_name, bytes):
                            dylib_name = dylib_name.decode('utf-8', errors='replace')

                        data.append([
                            arch_sha256,                          # sha256 (architecture-specific)
                            dylib_name,                           # dylib_name
                            dylib_cmd.get('dylib_timestamp', 0), # dylib_timestamp
                            dylib_cmd.get('dylib_current_version', 0), # dylib_current_version
                            dylib_cmd.get('dylib_compat_version', 0),  # dylib_compat_version
                            current_time,                         # analysis_date
                        ])
                    except Exception as e:
                        self.log.warning(
                            f'Unable to process dylib "{dylib_cmd.get("dylib_name", "Unknown")}" for architecture {arch_name}: {e}'
                        )
                        continue

            column_names = [
                'sha256',
                'dylib_name', 'dylib_timestamp', 'dylib_current_version',
                'dylib_compat_version', 'analysis_date'
            ]

            if not data:
                return None

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

            return (data, column_names, column_type_names)

        return None

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