Im Young Jung

36 papers B 4C 6Journal 12Unranked 13
YearRankTypeTitle / Venue / Authors
2022 B conf
IEEE Big Data
GeeHoon Lee, Im Young Jung
2022 B conf
IEEE Big Data
Abdulkabir Abdulraheem, Im Young Jung
2022 B conf
IEEE Big Data
Junwoo Ha, Im Young Jung
2022 C conf
BDCAT
Abdulkabir Abdulraheem, Im Young Jung
2021 J jnl
J. Inf. Process. Syst.
Keonhyeong Kim, Im Young Jung
2020 J jnl
Hum. centric Comput. Inf. Sci.
Taehyoung Kim, Im Young Jung, Yih-Chun Hu
2020 conf
VTC Spring
Keonhyeong Kim, Taehyoung Kim, Im Young Jung
2020 conf
PerCom Workshops
Keonhyeong Kim, Im Young Jung
2018 J jnl
Appl. Soft Comput.
Jaejin Jang, Im Young Jung, Jong Hyuk Park
2018 J jnl
Comput. Electr. Eng.
Jae-geun Moon, Im Young Jung, Jong Hyuk Park
2018 conf
BigDataSecurity/HPSC/IDS
Chang-O Eun, Taehyoung Kim, Im Young Jung
2017 J jnl
Int. J. Serv. Technol. Manag.
Jin Hyun Park, Im Young Jung, Soonja Kim
2017 C conf
ISI
Jin-Seong Kim, Im Young Jung
2017 conf
CSA/CUTE
Jinseong Kim, Im Young Jung
2017 conf
WISEC
Chang-O Eun, Jaegeun Moon, Im Young Jung, D. Lee, J. Park, E. Kim
2017 J jnl
Sensors
Jae-geun Moon, Im Young Jung, Jaesoo Yoo
2016 conf
IPDPS Workshops
Jin-Seong Kim, Jae J. Jang, Im Young Jung
2016 J jnl
Multim. Tools Appl.
Insoon Jo, Im Young Jung
2016 conf
CIC
Jae-geun Moon, Jin-Seong Kim, Im Young Jung, Su-an Eom
2015 C conf
PRDC
Jae J. Jang, Jaekun Moon, Im Young Jung
2015 conf
ICSC
Cheol Hong Kim, Eung-Jong Lee, Im Young Jung
2015 C conf
ISI
Jae-Jin Jang, Im Young Jung
2015 conf
HPCC/CSS/ICESS
Jae-geun Moon, Jae-Jin Jang, Im Young Jung
2015 J jnl
Int. J. Distributed Sens. Networks
Im Young Jung, Gil-Jin Jang, Jung-Min Yang, Jaesoo Yoo
2014 J jnl
Clust. Comput.
Im Young Jung, Wenfeng Cui, Hyeonsang Eom, Heon Y. Yeom
2013 J jnl
J. Inf. Process. Syst.
SeHoon Park, Im Young Jung, Hyeonsang Eom, Heon Y. Yeom
2011 C conf
APSCC
Im Young Jung, Insoon Jo, Youngjin Yu, Hyeonsang Eom, Heon Young Yeom
2011 C conf
ISPA
Im Young Jung, Hyeonsang Eom, Heon Young Yeom
2011 J jnl
J. Syst. Archit.
Im Young Jung, Heon Young Yeom
2010 ch.
Future Application and Middleware Technology on e-Science
Im Young Jung, Heon Y. Yeom
2009 J jnl
IEEE Trans. Educ.
Im Young Jung, Heon Young Yeom
2008 B conf
COMPSAC
Im Young Jung, In Soon Cho, Heon Young Yeom
2008 conf
CLADE
Im Young Jung, Heon Young Yeom
2007 conf
eScience
Im Young Jung, In Soon Cho, Heon Young Yeom, Hee S. Kweon, Dong H. Choi
2006 conf
GCCB
Im Young Jung, In Soon Cho, Heon Young Yeom, Hee S. Kweon, Jysoo Lee
2001 conf
ICOIN
Im Young Jung, Heon Young Yeom
redb/extractors/elf_extractors/elf_dependencies.py
← Index redb/extractors/elf_extractors/elf_dependencies.py python
import inspect
from datetime import datetime, timezone
from typing import Any, List, Dict

from elftools.elf.elffile import ELFFile
from elftools.common.exceptions import ELFError

from redb.extractors.enum import Tag
from redb.extractors.elf_extractor import ELFExtractor
from redb.models.dataclasses import ELFDependency


class ELFDependencyExtractor(ELFExtractor):

    def __init__(
        self,
        filepath,
        log,
        exporters=None,
        index_prefix=None,
        elastic_index=None,
        known_benign=False,
        known_malicious=False,
        elf=None,
    ):
        super().__init__(
            filepath,
            log,
            exporters,
            index_prefix,
            elastic_index,
            known_benign,
            known_malicious,
            elf,
        )
        self.elf_dependencies = []
        self.elastic_index = self.index_prefix + "-elf_dependencies"
        self.log.debug(inspect.currentframe().f_code.co_name)

    def _map_dependency_type(self, dt_tag_str: str) -> int:
        """Map dynamic tag string to enum value."""
        type_map = {
            'DT_NEEDED': 1,
            'DT_SONAME': 14,
            'DT_RPATH': 15,
            'DT_RUNPATH': 29
        }
        return type_map.get(dt_tag_str, 0)

    def _extract_dynamic_dependencies(self, elf) -> List[Dict]:
        """Extract dependencies from the dynamic section."""
        dependencies = []

        try:
            # Get the dynamic section
            dynamic_section = elf.get_section_by_name('.dynamic')
            if not dynamic_section:
                self.log.debug("No .dynamic section found")
                return dependencies

            # Iterate through dynamic tags
            for tag in dynamic_section.iter_tags():
                dt_tag = tag.entry.d_tag

                # Handle different dependency types
                if dt_tag == 'DT_NEEDED':
                    # Required library
                    dependency_name = tag.needed
                    dependencies.append(ELFDependency(
                        dependency_name=dependency_name,
                        dependency_type=self._map_dependency_type('DT_NEEDED'),
                        dependency_type_str='NEEDED'
                    ))

                elif dt_tag == 'DT_SONAME':
                    # Shared object name
                    dependency_name = tag.soname
                    dependencies.append(ELFDependency(
                        dependency_name=dependency_name,
                        dependency_type=self._map_dependency_type('DT_SONAME'),
                        dependency_type_str='SONAME'
                    ))

                elif dt_tag == 'DT_RPATH':
                    # Runtime library search path
                    dependency_name = tag.rpath
                    dependencies.append(ELFDependency(
                        dependency_name=dependency_name,
                        dependency_type=self._map_dependency_type('DT_RPATH'),
                        dependency_type_str='RPATH'
                    ))

                elif dt_tag == 'DT_RUNPATH':
                    # Runtime library search path (newer)
                    dependency_name = tag.runpath
                    dependencies.append(ELFDependency(
                        dependency_name=dependency_name,
                        dependency_type=self._map_dependency_type('DT_RUNPATH'),
                        dependency_type_str='RUNPATH'
                    ))

        except Exception as e:
            self.log.error(f"Error extracting dynamic dependencies: {e}")

        return dependencies

    def tag(self):
        return Tag.ELF_DEPENDENCIES.value if hasattr(Tag, 'ELF_DEPENDENCIES') else "elf_dependencies"

    def extract(self):
        try:
            self.log.debug(inspect.currentframe().f_code.co_name)

            def extract_data(elf):
                # Extract dependencies - returns list of ELFDependency dataclasses
                dependencies = self._extract_dynamic_dependencies(elf)
                return dependencies

            if not self._is_elf_file():
                return None

            result = self._with_elf_file(extract_data)
            if result is None:
                return None

            self.elf_dependencies = result
            return self.elf_dependencies

        except Exception as e:
            self.log.error(f"Error extracting ELF dependencies {self.hash.sha256}: {e}")
            return None

    def prepare_export_data(self, exporter_type: str) -> Any:
        self.log.debug(inspect.currentframe().f_code.co_name)

        if exporter_type == "ElasticsearchExporter":
            return self.elf_dependencies
        elif exporter_type == "ClickHouseExporter":
            try:
                # Return valid empty structure if no dependencies (e.g., statically linked binary)
                # None is reserved for actual errors

                # Prepare data arrays for all dependencies
                data = []
                current_time = datetime.now(timezone.utc)
                for dep in self.elf_dependencies:
                    row = [
                        self.sha256,
                        self.md5,
                        self.sha1,
                        dep.dependency_name,
                        dep.dependency_type,
                        dep.dependency_type_str,
                        current_time
                    ]
                    data.append(row)

                column_names = [
                    'sha256', 'md5', 'sha1',
                    'dependency_name', 'dependency_type', 'dependency_type_str',
                    'analysis_date'
                ]

                if not data:
                    return None

                column_type_names = [
                    'FixedString(64)', 'FixedString(32)', 'FixedString(40)',
                    'LowCardinality(String)',
                    "Enum8('NEEDED'=1, 'SONAME'=14, 'RPATH'=15, 'RUNPATH'=29)",
                    'LowCardinality(String)',
                    'DateTime64(3, \'UTC\')'
                ]

                return (data, column_names, column_type_names)

            except Exception as e:
                self.log.error(f"Error preparing export data: {e}")
                raise

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