Vijender Kumar Solanki

42 papers Journal 23Unranked 10
YearRankTypeTitle / Venue / Authors
2024 conf
RICE
Sivadi Balakrishna, Shivani Yadao, Vijender Kumar Solanki
2024 conf
RICE
Cu Kim Long, Bao Ngoc Le, Vijender Kumar Solanki, Viet Anh Nguyen, Luu Hoang Bach, Cu Ngoc Son
2024 J jnl
Appl. Intell.
Thi Ngoc Anh Nguyen, Nguyen Nhat Anh, Tran Ngoc Thang, Vijender Kumar Solanki, Rubén González Crespo, Nguyen Quang Dat
2024 J jnl
Appl. Ontology
Tuan Anh Chi, Dang Minh Tuan, Hai Nam Do, Vijender Kumar Solanki, Jorge Torres, Rubén González Crespo, Thi Ngoc Anh Nguyen
2024 ed.
RICE
Vijender Kumar Solanki, Tran Duc-Tan, Pradeep Kumar, Manuel Cardona
2023 J jnl
Int. J. Interact. Multim. Artif. Intell.
Hariom Sharan Sinha, Saket Kumar Choudhary, Vijender Kumar Solanki
2023 conf
RICE
M. Hanefi Calp, Vijender Kumar Solanki
2023 ed.
RICE
Pradeep Kumar, Manuel Cardona, Vijender Kumar Solanki, Tran Duc-Tan, Abdul Wahid
2023 J jnl
Evol. Intell.
Thi Ngoc Anh Nguyen, Tien Dat Dang, Elena Verdú, Vijender Kumar Solanki
2023 conf
RICE
Nareddy Vinaya, Vijender Kumar Solanki, L. Arokia Jesu Prabhu, Sivadi Balakrishna
2022 J jnl
J. Intell. Fuzzy Syst.
Thi Ngoc Anh Nguyen, Pham Ngoc Quang Anh, Vu Hoai Thu, Doan Van Thai, Vijender Kumar Solanki, Dang Minh Tuan
2022 J jnl
J. Intell. Fuzzy Syst.
Duc-Nghia Tran, Phung Cong Phi Khanh, Vijender Kumar Solanki, Duc-Tan Tran
2022 J jnl
Int. J. Inf. Retr. Res.
Quang-Huy Tran, Tuan-Khai Nguyen, Vijender Kumar Solanki, Duc-Tan Tran
2022 conf
ICRMAT
Shivani Agarwal, Vijender Kumar Solanki
2022 ed.
ICRMAT
Viet Ha Hoang, Shivani Agarwal, Nguyen Thi Hong Nga, Vijender Kumar Solanki
2022 ed.
RICE
Vijender Kumar Solanki, Bui Trung Thanh
2022 J jnl
Int. J. Inf. Technol. Web Eng.
Anh Hoang, Kha Van Phan, Vijender Kumar Solanki
2021 J jnl
J. Intell. Fuzzy Syst.
Nguyen Quang Dat, Thi Ngoc Anh Nguyen, Nguyen Nhat Anh, Vijender Kumar Solanki
2021 J jnl
Int. J. Parallel Emergent Distributed Syst.
Luong Thi Theu, Quang-Huy Tran, Vijender Kumar Solanki, Tatiana R. Shemeleva, Duc-Tan Tran
2021 ed.
ICRMAT
Vu Dinh Khoa, Shivani Agarwal, Gloria Jeanette Rincon Aponte, Nguyen Thi Hong Nga, Vijender Kumar Solanki, Ewa Ziemba
2021 ed.
RICE
Vijender Kumar Solanki, Nguyen Ho Quang
2020 J jnl
J. Intell. Fuzzy Syst.
Tran Ngoc Thang, Vijender Kumar Solanki, Tuan Anh Dao, Thi Ngoc Anh Nguyen, Pham Van Hai
2020 J jnl
Peer-to-Peer Netw. Appl.
Sivadi Balakrishna, M. Thirumaran, R. Padmanaban, Vijender Kumar Solanki
2020 J jnl
Int. J. Interact. Multim. Artif. Intell.
Sumit Kumar, Vijender Kumar Solanki, Saket Kumar Choudhary, Ali Selamat, Rubén González Crespo
2020 J jnl
Int. J. Interact. Multim. Artif. Intell.
Edward Rolando Núñez-Valdéz, Vijender Kumar Solanki, Sivadi Balakrishna, M. Thirumaran
2020 J jnl
Int. J. Inf. Retr. Res.
Nguyen Quang Dat, Thi Ngoc Anh Nguyen, Vijender Kumar Solanki, Le An Ngô
2020 ed.
ICRMAT
Shivani Agarwal, Darrell Norman Burrell, Vijender Kumar Solanki
2019 J jnl
Int. J. Interact. Multim. Artif. Intell.
Sudan Jha, Anirban Dey, Raghvendra Kumar, Vijender Kumar Solanki
2019 J jnl
Int. J. Inf. Retr. Res.
Van Nghia Luong, Vijender Kumar Solanki, Nguyen Ha Huy Cuong
2019 J jnl
Sci. Program.
Vicente García-Díaz, Edward Rolando Núñez-Valdéz, Vijender Kumar Solanki, Carlos Enrique Montenegro-Marín
2018 conf
RICE
Nguyen Thi Hoang Yen, Nho Van Cong, Phung Cong Phi Khanh, Nguyen Ha Huy Cuong, Vijender Kumar Solanki, Duc-Tan Tran
2018 J jnl
Netw. Protoc. Algorithms
Anchit Bijalwan, Vijender Kumar Solanki, Emmanuel S. Pilli
2017 conf
RICE
Sachin Kumar, Vijay Bhaskar Semwal, Vijender Kumar Solanki, Prayag Tiwari, Denis Kalitin
2017 J jnl
Int. J. Interact. Multim. Artif. Intell.
Rohit Dhall, Vijender Kumar Solanki
2017 conf
RICE
Meenu Gupta, Vijender Kumar Solanki, Vijay Kumar Singh
2017 J jnl
Int. J. Interact. Multim. Artif. Intell.
Vijender Kumar Solanki, M. Venkatesan, Somesh Katiyar
2017 ed.
ICITKM
Ajay Jaiswal, Vijender Kumar Solanki, Zhongyu (Joan) Lu, Nikhil Rajput
2017 ed.
RICE
Vijender Kumar Solanki, Vijay Bhaskar Semwal, Rubén González Crespo, Vishwanath Bijalwan
2017 J jnl
Netw. Protoc. Algorithms
Ha Huy Cuong Nguyen, Vijender Kumar Solanki, Doan Van Thang, Thanh Thuy Nguyen
2017 conf
RICE
Durga Devi TJB, A. Subramani, Vijender Kumar Solanki
2016 J jnl
Int. J. Interact. Multim. Artif. Intell.
Saket Kumar Choudhary, Karan Singh, Vijender Kumar Solanki
2013 conf
ICACNI
Vijender Kumar Solanki, Kumar Pal Singh, M. Venkatesan, Sudhanshu Raghuwanshi
redb/extractors/macho_extractors/macho_exports.py
← Index redb/extractors/macho_extractors/macho_exports.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
from redb.models.dataclasses import MachOExport


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

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

    def _extract_exports(self, arch_name=None):
        """Extract export information from the MachO binary for a specific architecture."""
        self.log.debug(inspect.currentframe().f_code.co_name)

        if not self.macho:
            return None

        try:
            # Get exported symbols using new API for specific architecture
            exported_symbols = self.macho.get_exported_symbols(arch=arch_name)

            # Extract all exported symbols (may be empty for some binaries)
            # Handle None or empty dict
            if not exported_symbols:
                exported_symbols = {}
            all_symbols = []
            for dylib_name, symbols in exported_symbols.items():
                # Process symbol names
                for symbol in symbols:
                    if isinstance(symbol, bytes):
                        symbol = symbol.decode('utf-8', errors='replace')
                    all_symbols.append(symbol)

            # Create export dataclass
            macho_export = MachOExport(
                macho_exports_total=len(all_symbols),
                macho_export_symbols=all_symbols  # Empty list is fine, but None is not allowed for Array type
            )

            return macho_export

        except Exception as e:
            self.log.error(f"Error extracting MachO exports for arch {arch_name}: {e}")
            return None

    def extract(self):
        self.log.debug(inspect.currentframe().f_code.co_name)
        try:
            # Get architectures (macho is already parsed in base class)
            architectures = self.macho.get_architectures()
            if len(architectures) > 1:
                # FAT binary - return list of exports for each architecture
                results = []
                for arch_name in architectures:
                    exports = self._extract_exports(arch_name)
                    if exports:
                        exports.arch_identifier = arch_name
                        results.append(exports)
                return results
            else:
                # Single architecture - return single result
                return self._extract_exports(architectures[0] if architectures else None)
        except Exception as e:
            self.log.error(f"Error extracting MachO exports: {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 exports for this architecture
                macho_export = self._extract_exports(arch_name)
                if not macho_export:
                    continue

                data.append([
                    arch_sha256,                          # sha256 (arch-specific)
                    macho_export.macho_exports_total,     # macho_exports_total
                    macho_export.macho_export_symbols,    # macho_export_symbols (keep as array!)
                    current_time,                         # analysis_date
                ])

            column_names = [
                'sha256',
                'macho_exports_total', 'macho_export_symbols',
                'analysis_date'
            ]

            if not data:
                return None

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

            return (data, column_names, column_type_names)

        return None

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