Ijeoma Amuche Chikwendu

13 papers Journal 13
YearRankTypeTitle / Venue / Authors
2025 J jnl
Comput. Biol. Medicine
Chukwuebuka Joseph Ejiyi, Zhen Qin, Victor Kwaku Agbesi, Makuachukwu Bennedith Ejiyi, Ijeoma Amuche Chikwendu, Oluwatoyosi F. Bamisile, Favour Ezinne Onyekwere, Olusola O. Bamisile
2025 J jnl
Comput. Biol. Medicine
Chukwuebuka Joseph Ejiyi, Zhen Qin, Victor Kwaku Agbesi, Ding Yi, Abena A. Atwereboannah, Ijeoma Amuche Chikwendu, Oluwatoyosi F. Bamisile, Bakanina Kissanga Grace-Mercure, Olusola O. Bamisile
2025 J jnl
Eng. Appl. Artif. Intell.
Isaac Adjei-Mensah, Qingxian Wang, Isaac Osei Agyemang, Adu Asare Baffour, Sophyani Banaamwini Yussif, Collins Sey, Linda Delali Fiasam, Ijeoma Amuche Chikwendu, Weidong Wang
2025 J jnl
Symmetry
Ijeoma Amuche Chikwendu, Xiaoling Zhang, Chiagoziem Chima Ukwuoma, Okechukwu C. Chikwendu, Yeong Hyeon Gu, Mugahed A. Al-antari
2024 J jnl
Prog. Artif. Intell.
Chukwuebuka Joseph Ejiyi, Zhen Qin, Victor Kwaku Agbesi, Makuachukwu Bennedith Ejiyi, Ijeoma Amuche Chikwendu, Oluwatoyosi F. Bamisile, Favour Ezinne Onyekwere, Olusola Bamisile
2024 J jnl
Eng. Appl. Artif. Intell.
Isaac Adjei-Mensah, Xiaoling Zhang, Isaac Osei Agyemang, Sophyani Banaamwini Yussif, Adu Asare Baffour, Bernard Mawuli Cobbinah, Collins Sey, Linda Delali Fiasam, Ijeoma Amuche Chikwendu, Joseph Roger Arhin
2024 J jnl
Comput. Biol. Medicine
Chukwuebuka Joseph Ejiyi, Dongsheng Cai, Makuachukwu Bennedith Ejiyi, Ijeoma Amuche Chikwendu, Kenneth Coker, Ariyo Oluwasanmi, Oluwatoyosi F. Bamisile, Thomas Ugochukwu Ejiyi, Zhen Qin
2023 J jnl
J. Artif. Intell. Res.
Ijeoma Amuche Chikwendu, Xiaoling Zhang, Isaac Osei Agyemang, Isaac Adjei-Mensah, Chiagoziem Chima Ukwuoma, Chukwuebuka Joseph Ejiyi
2023 J jnl
Int. J. Interact. Multim. Artif. Intell.
Chiagoziem Chima Ukwuoma, Zhiguang Qin, Bole Wilfried Tienin, Sophyani Banaamwini Yussif, Chukwuebuka Joseph Ejiyi, Gilbert C. Urama, Chibueze D. Ukwuoma, Ijeoma Amuche Chikwendu
2022 J jnl
CoRR
Ijeoma Amuche Chikwendu, Kulevome Delanyo Kwame Bensah, Chiagoziem Chima Ukwuoma, Chukwuebuka Joseph Ejiyi
2022 J jnl
Int. J. Interact. Multim. Artif. Intell.
Chukwuebuka Joseph Ejiyi, Zhen Qin, Abdulhaq Adetunji Salako, Happy Nkanta Monday, Grace Ugochi Nneji, Chiagoziem Chima Ukwuoma, Ijeoma Amuche Chikwendu, Ji Geng
2022 J jnl
Comput. Biol. Medicine
Chiagoziem Chima Ukwuoma, Zhiguang Qin, Victor Kwaku Agbesi, Chukwuebuka Joseph Ejiyi, Olusola Bamisile, Ijeoma Amuche Chikwendu, Bole Wilfried Tienin, Md Altab Hossin
2022 J jnl
Eng. Appl. Artif. Intell.
Isaac Osei Agyemang, Xiaoling Zhang, Daniel Acheampong, Isaac Adjei-Mensah, Enoch Opanin Gyamfi, Joseph Roger Arhin, Williams Ayivi, Ijeoma Amuche Chikwendu
redb/extractors/pe_extractors/pe_imports.py
← Index redb/extractors/pe_extractors/pe_imports.py python
import inspect
from typing import Any, List, Tuple
from datetime import datetime, timezone

from redb.extractors.enum import Tag
from redb.extractors.pe_extractor import PEExtractor
from redb.models.dataclasses import PEImport


class PEImportExtractor(PEExtractor):

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

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

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

        imports_symbols = []
        imports_lib = []
        imports_total = 0
        # pe_import = None
        try:
            directory_entry_import = getattr(self.pe, "DIRECTORY_ENTRY_IMPORT", [])
            imports_total = len(directory_entry_import)
            for entry in directory_entry_import:
                symbols = []
                tmp_import = {}
                libname = entry.dll.decode() if entry.dll else ""
                imports_lib.append(libname)
                # replace . with _ to avoid issues with elastic
                # entryname = entryname.replace(".", "_")
                for symbol in entry.imports:
                    if symbol.name:
                        symbols.append(symbol.name.decode())
                # imports_symbols[entryname] = symbols
                tmp_import[libname] = symbols
                imports_symbols.append(tmp_import)
            return PEImport(
                pe_imports_total=imports_total,
                pe_import_libraryName=imports_lib if imports_lib else None,
                pe_import_functions=imports_symbols if imports_symbols else None,
            )
        except Exception as e:
            self.log.error(f"Extract imports error {self.hash.sha256} Exception: {e}")
        return pe_import

    def extract(self):
        try:
            self.log.debug(inspect.currentframe().f_code.co_name)
            return self._extract_imports()
        except Exception as e:
            self.log.error(f"Extract imports error {self.hash.sha256} Exception: {e}")
            return None

    def prepare_export_data(self, exporter_type: str) -> Any:
        if exporter_type == "ElasticsearchExporter":
            return self.extract()
        elif exporter_type == "ClickHouseExporter":
            imports = self.extract()
            if (
                imports is None
                or imports.pe_imports_total == 0
                or (
                    imports.pe_import_libraryName is None
                    and imports.pe_import_functions is None
                )
            ):
                return None

            # Flatten the data - one row per function import
            data = []
            current_time = datetime.now(timezone.utc)

            for lib_funcs in imports.pe_import_functions:
                for lib, funcs in lib_funcs.items():
                    for func in funcs:
                        data.append(
                            [
                                self.sha256,  # sha256
                                self.md5,  # md5
                                self.sha1,  # sha1
                                lib,  # library_name
                                func,  # function_name
                                current_time,  # analysis_date
                            ]
                        )

            column_names = [
                "sha256",
                "md5",
                "sha1",
                "library_name",
                "function_name",
                "analysis_date",
            ]

            column_type_names = [
                "FixedString(64)",
                "FixedString(32)",
                "FixedString(40)",
                "LowCardinality(Nullable(String))",
                "LowCardinality(Nullable(String))",
                "DateTime64(3, 'UTC')",
            ]

            if not data:
                return None

            return (data, column_names, column_type_names)

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