Nancy Victor

29 papers B 2Journal 23Unranked 4
YearRankTypeTitle / Venue / Authors
2025 J jnl
IEEE Open J. Comput. Soc.
Prabadevi Boopathy, Natarajan Deepa, Praveen Kumar Reddy Maddikunta, Nancy Victor, Thippa Reddy Gadekallu, Gokul Yenduri, Wei Wang, Quoc-Viet Pham, Thien Huynh-The, Madhusanka Liyanage
2025 J jnl
IEEE Open J. Commun. Soc.
Thippa Reddy Gadekallu, Praveen Kumar Reddy Maddikunta, Prabadevi Boopathy, Natarajan Deepa, Rajeswari Chengoden, Nancy Victor, Wei Wang, Weizheng Wang, Yaodong Zhu, Kapal Dev
2024 J jnl
IEEE Trans. Consumer Electron.
Jintao Wu, Jingyi Zhang, Muhammad Bilal, Feng Han, Nancy Victor, Xiaolong Xu
2024 J jnl
IEEE Trans. Consumer Electron.
Sidra Abbas, Wadii Boulila, Maha Driss, Nancy Victor, Gabriel Avelino R. Sampedro, Mideth B. Abisado, Thippa Reddy Gadekallu
2024 J jnl
IEEE Internet Things J.
Jing Gao, Meng Liu, Peng Li, Asif Ali Laghari, Abdul Rehman Javed, Nancy Victor, Thippa Reddy Gadekallu
2024 J jnl
IEEE Trans. Consumer Electron.
Yue Zhuang, Chen Wang, Wenying Zheng, Nancy Victor, Thippa Reddy Gadekallu
2024 J jnl
IEEE Trans. Consumer Electron.
Ali Akbar Siddique, Wadii Boulila, Mohammed S. Alshehri, Fawad Ahmed, Thippa Reddy Gadekallu, Nancy Victor, Muhammed Tahir Qadri, Jawad Ahmad
2024 J jnl
IEEE J. Sel. Top. Appl. Earth Obs. Remote. Sens.
Nancy Victor, Praveen Kumar Reddy Maddikunta, Delphin Raj Kesari Mary, Ramalingam Murugan, Rajeswari Chengoden, Thippa Reddy Gadekallu, Nitin Rakesh, Yaodong Zhu, Jeongyeup Paek
2024 J jnl
IEEE Consumer Electron. Mag.
Swarna Priya Ramu, Gautam Srivastava, Rajeswari Chengoden, Nancy Victor, Praveen Kumar Reddy Maddikunta, Thippa Reddy Gadekallu
2023 J jnl
IEEE Access
Ramalingam M, Chemmalar Selvi G., Nancy Victor, Rajeswari Chengoden, Sweta Bhattacharya, Praveen Kumar Reddy Maddikunta, Duehee Lee, Md. Jalil Piran, Neelu Khare, Gokul Yenduri, Thippa Reddy Gadekallu
2023 J jnl
CoRR
Ramalingam M, Chemmalar Selvi, Nancy Victor, Rajeswari Chengoden, Sweta Bhattacharya, Praveen Kumar Reddy Maddikunta, Duehee Lee, Md. Jalil Piran, Neelu Khare, Gokul Yenduri, Thippa Reddy Gadekallu
2023 B conf
GLOBECOM
Delphin Raj Kesari Mary, Supriya Yarradoddi, Nancy Victor, Thippa Reddy Gadekallu, Jeongyeup Paek
2023 J jnl
IEEE Syst. J.
Jacob Sakhnini, Hadis Karimipour, Ali Dehghantanha, Abbas Yazdinejad, Thippa Reddy Gadekallu, Nancy Victor, Anik Islam
2023 conf
ICC Workshops
Supriya Y, Nancy Victor, Gautam Srivastava, Thippa Reddy Gadekallu
2023 J jnl
CoRR
Ali Kashif Bashir, Nancy Victor, Sweta Bhattacharya, Thien Huynh-The, Rajeswari Chengoden, Gokul Yenduri, Praveen Kumar Reddy Maddikunta, Quoc-Viet Pham, Thippa Reddy Gadekallu, Madhusanka Liyanage
2023 conf
CCGridW
Nancy Victor, Sweta Bhattacharya, Praveen Kumar Reddy Maddikunta, Fasial Mohammed Alotaibi, Thippa Reddy Gadekallu, Rutvij H. Jhaveri
2023 conf
ICONIP (8)
Dasaradharami Reddy K, Gautam Srivastava, Yaodong Zhu, Supriya Y, Gokul Yenduri, Nancy Victor, S. Anusha, Thippa Reddy Gadekallu
2023 J jnl
IEEE Internet Things J.
Ali Kashif Bashir, Nancy Victor, Sweta Bhattacharya, Thien Huynh-The, Rajeswari Chengoden, Gokul Yenduri, Praveen Kumar Reddy Maddikunta, Quoc-Viet Pham, Thippa Reddy Gadekallu, Madhusanka Liyanage
2023 J jnl
IEEE Access
Rajeswari Chengoden, Nancy Victor, Thien Huynh-The, Gokul Yenduri, Rutvij H. Jhaveri, Mamoun Alazab, Sweta Bhattacharya, Pawan Hegde, Praveen Kumar Reddy Maddikunta, Thippa Reddy Gadekallu
2023 J jnl
CoRR
B. Prabadevi, Natarajan Deepa, Nancy Victor, Thippa Reddy Gadekallu, Praveen Kumar Reddy Maddikunta, Gokul Yenduri, Wei Wang, Quoc-Viet Pham, Thien Huynh-The, Madhusanka Liyanage
2023 conf
ICONIP (8)
Supriya Y, Gautam Srivastava, Dasaradharami Reddy K, Gokul Yenduri, Nancy Victor, S. Anusha, Thippa Reddy Gadekallu
2023 B conf
GLOBECOM
Mengyan Huang, Fengkui Gong, Guo Li, Thippa Reddy Gadekallu, Nancy Victor
2022 J jnl
IEEE Internet Things Mag.
Nancy Victor, Rajeswari Chengoden, Mamoun Alazab, Sweta Bhattacharya, Sindri Magnússon, Praveen Kumar Reddy Maddikunta, Kadiyala Ramana, Thippa Reddy Gadekallu
2022 J jnl
CoRR
Nancy Victor, Rajeswari, Mamoun Alazab, Sweta Bhattacharya, Sindri Magnússon, Praveen Kumar Reddy Maddikunta, Kadiyala Ramana, Thippa Reddy Gadekallu
2022 J jnl
Big Data Cogn. Comput.
Sweta Bhattacharya, Rajeswari Chengoden, Gautam Srivastava, Mamoun Alazab, Abdul Rehman Javed, Nancy Victor, Praveen Kumar Reddy Maddikunta, Thippa Reddy Gadekallu
2022 J jnl
Comput. Commun.
Ninni Singh, Vinit Kumar Gunjan, Gopal Chaudhary, Rajesh Kaluri, Nancy Victor, Kuruva Lakshmanna
2022 J jnl
CoRR
Rajeswari Chengoden, Nancy Victor, Thien Huynh-The, Gokul Yenduri, Rutvij H. Jhaveri, Mamoun Alazab, Sweta Bhattacharya, Pawan Hegde, Praveen Kumar Reddy Maddikunta, Thippa Reddy Gadekallu
2020 J jnl
Int. J. Grid High Perform. Comput.
Nancy Victor, Daphne Lopez
2016 J jnl
Int. J. Big Data Intell.
Nancy Victor, Daphne Lopez, Jemal H. Abawajy
redb/extractors/macho_extractors/macho_similarity_hashes.py
← Index redb/extractors/macho_extractors/macho_similarity_hashes.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


class MachOSimilarityHashExtractor(MachOExtractor):
    """Extract Mach-O similarity hashes using machofile API.

    Similarity hashes are MD5 fingerprints of sorted, deduplicated binary components:
    - dylib_hash: MD5 of dynamic library names
    - import_hash: MD5 of imported function names
    - export_hash: MD5 of exported symbol names
    - entitlement_hash: MD5 of entitlement names and array values
    - symhash: MD5 of external undefined symbols

    For FAT binaries:
    - Inserts one row per architecture slice with per-slice hashes
    - Inserts one row for the FAT container with combined hashes

    For single-arch binaries:
    - Inserts one row with that architecture's hashes

    Note: parent_sha256 and architecture relationships are tracked in redb_basic_properties,
    not duplicated here. Use JOIN with redb_basic_properties when needed.
    """

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

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

    def _extract_similarity_hashes(self, arch_name=None):
        """Extract similarity hashes for a specific architecture."""
        self.log.debug(inspect.currentframe().f_code.co_name)

        if not self.macho:
            return None

        try:
            similarity_hashes = self.macho.get_similarity_hashes(arch=arch_name)
            return similarity_hashes if similarity_hashes else None
        except Exception as e:
            self.log.error(f"Error extracting similarity hashes for arch {arch_name}: {e}")
            return None

    def extract(self):
        self.log.debug(inspect.currentframe().f_code.co_name)
        try:
            if not self.macho:
                return None

            architectures = self.macho.get_architectures()
            if not architectures:
                return None

            if len(architectures) > 1:
                # FAT binary - return combined hashes + per-arch hashes
                results = []

                # First add combined hashes for the FAT container
                all_hashes = self.macho.get_similarity_hashes()
                combined_hashes = all_hashes.get('combined', {}) if all_hashes else {}
                if combined_hashes:
                    combined_hashes['arch_identifier'] = 'fat'
                    results.append(combined_hashes)

                # Then add per-arch hashes
                for arch_name in architectures:
                    hashes = self._extract_similarity_hashes(arch_name)
                    if hashes:
                        hashes['arch_identifier'] = arch_name
                        results.append(hashes)
                return results
            else:
                # Single architecture - return single result
                return self._extract_similarity_hashes(architectures[0])
        except Exception as e:
            self.log.error(f"Error extracting similarity hashes: {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

            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)

            # For FAT binaries, first insert a row for the container with combined hashes
            if is_fat:
                all_hashes = self.macho.get_similarity_hashes()  # Without arch returns all including 'combined'
                combined_hashes = all_hashes.get('combined', {}) if all_hashes else {}
                if combined_hashes:
                    data.append([
                        self.sha256,                                    # sha256 (FAT container)
                        combined_hashes.get('dylib_hash'),              # dylib_hash
                        combined_hashes.get('import_hash'),             # import_hash
                        combined_hashes.get('export_hash'),             # export_hash
                        combined_hashes.get('entitlement_hash'),        # entitlement_hash
                        combined_hashes.get('symhash'),                 # symhash
                        current_time,                                   # analysis_date
                    ])

            # Insert rows for each architecture slice
            for arch_name in architectures:
                # Get architecture-specific sha256
                try:
                    arch_general_info = self.macho.get_general_info(arch=arch_name)
                    arch_sha256 = arch_general_info.get('SHA256', self.sha256)
                except Exception as e:
                    self.log.warning(f"Could not get arch-specific sha256 for {arch_name}: {e}")
                    arch_sha256 = self.sha256

                # Get similarity hashes for this architecture
                similarity_hashes = self._extract_similarity_hashes(arch_name)
                if not similarity_hashes:
                    continue

                data.append([
                    arch_sha256,                                    # sha256 (arch-specific)
                    similarity_hashes.get('dylib_hash'),            # dylib_hash
                    similarity_hashes.get('import_hash'),           # import_hash
                    similarity_hashes.get('export_hash'),           # export_hash
                    similarity_hashes.get('entitlement_hash'),      # entitlement_hash
                    similarity_hashes.get('symhash'),               # symhash
                    current_time,                                   # analysis_date
                ])

            if not data:
                return None

            column_names = [
                'sha256',
                'macho_dylib_hash', 'macho_import_hash', 'macho_export_hash',
                'macho_entitlement_hash', 'macho_symhash',
                'analysis_date'
            ]

            column_type_names = [
                'FixedString(64)',
                'Nullable(FixedString(32))', 'Nullable(FixedString(32))', 'Nullable(FixedString(32))',
                'Nullable(FixedString(32))', 'Nullable(FixedString(32))',
                'DateTime64(3, \'UTC\')'
            ]

            return (data, column_names, column_type_names)

        return None

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