Kamal Mansur Jambi

39 papers A 1B 1C 4Journal 27Unranked 6
YearRankTypeTitle / Venue / Authors
2025 J jnl
IEEE Access
Junaid M. Qurashi, Kamal Mansur Jambi, Fathy E. Eassa, Maher Khemakhem, Fawaz Alsolami, Reem Alnanih
2025 J jnl
J. Adv. Comput. Intell. Intell. Informatics
Muhammad Alkaff, Abdullah Basuhail, Yuslena Sari, Kamal Mansur Jambi
2024 J jnl
IEEE Access
Asma A. Alhussayen, Kamal Mansur Jambi, Maher Khemakhem, Fathy E. Eassa
2024 J jnl
Syst.
Osama Younis, Kamal Mansur Jambi, Fathy Elbouraey Eassa, Lamiaa A. Elrefaei
2024 J jnl
Sensors
Hend Alshede, Kamal Mansur Jambi, Laila Nassef, Nahed Alowidi, Etimad A. Fadel
2024 J jnl
Computing
Asma A. Alhussayen, Kamal Mansur Jambi, Fathy Eassa, Maher Khemakhem
2023 J jnl
Sensors
Lutfieh S. Al-homed, Kamal Mansur Jambi, Hassanin M. Al-Barhamtoshy
2023 J jnl
ACM Trans. Asian Low Resour. Lang. Inf. Process.
Hassanin M. Al-Barhamtoshy, Kamal Mansur Jambi, Mohsen A. Rashwan, Sherif M. Abdou
2023 J jnl
Sensors
Zaakki Ahamed, Maher Khemakhem, Fathy Elbouraey Eassa, Fawaz Alsolami, Abdullah Basuhail, Kamal Mansur Jambi
2023 J jnl
Sensors
Ulaa AlHaddad, Abdullah Basuhail, Maher Khemakhem, Fathy Elbouraey Eassa, Kamal Mansur Jambi
2023 J jnl
IEEE Trans. Intell. Transp. Syst.
Junaid M. Qurashi, Kamal Mansur Jambi, Fawaz Alsolami, Fathy E. Eassa, Maher Khemakhem, Abdullah Ahmad Basuhail
2023 J jnl
IEEE Access
Junaid M. Qurashi, Kamal Mansur Jambi, Fathy E. Eassa, Maher Khemakhem, Fawaz Alsolami, Abdullah Ahmad Basuhail
2022 J jnl
Intell. Autom. Soft Comput.
Fatmah Alanazi, Kamal Mansur Jambi, Fathy Elbouraey Eassa, Maher Khemakhem, Abdullah Basuhail, Khalid Alsubhi
2022 J jnl
Comput. Syst. Sci. Eng.
Kamal Mansur Jambi, Hassanin M. Al-Barhamtoshy, Wajdi Al Jedaibi, Mohsen A. Rashwan, Sherif M. Abdou
2021 J jnl
Comput. Intell. Neurosci.
Muhammad Asif, Sibgha Mairaj, Zafar Saeed, Muhammad Usman Ashraf, Kamal Mansur Jambi, Rana Muhammad Zulqarnain
2021 J jnl
Symmetry
Khalil Ahmad Alsulbi, Maher Ali Khamakhem, Abdullah Ahmad Basuhail, Fathy E. Eassa, Kamal Mansur Jambi, Khalid Ali Almarhabi
2021 J jnl
IEEE Access
Hassanin M. Al-Barhamtoshy, Kamal Mansur Jambi, Sherif M. Abdou, Mohsen A. Rashwan
2021 J jnl
Future Gener. Comput. Syst.
Wadee Alhalabi, Jari Jussila, Kamal Mansur Jambi, Anna Visvizi, Hafsa Qureshi, Miltiadis D. Lytras, Areej Malibari, Raniah Samir Adham
2021 J jnl
IEEE Access
Kamal Mansur Jambi, Imtiaz Hussain Khan, Muazzam Ahmed Siddiqui, Salma Omar Alhaj
2020 J jnl
ISPRS Int. J. Geo Inf.
Hosam Alrahhal, Mohamad Shady Alrahhal, Razan Jamous, Kamal Mansur Jambi
2020 J jnl
Symmetry
Adam Ibrahim Abdi, Fathy Elbouraey Eassa, Kamal Mansur Jambi, Khalid Ali Almarhabi, Abdullah Saad Al-Malaise Al-Ghamdi
2019 conf
ICICT (1)
Omar A. Abdulkader, Alwi M. Bamhdi, Vijey Thayananthan, Kamal Mansur Jambi, Bandar Al-Ghamdi, Ahmed Patel
2019 C conf
AICCSA
Khalid Alsubhi, Fawaz Alsolami, Abdullah M. Algarni, Emad Albassam, Maher Khemakhem, Fathy Alburaei Eassa, Kamal Mansur Jambi, Muhammad Usman Ashraf
2019 J jnl
Swarm Evol. Comput.
Ali Wagdy Mohamed, Anas A. Hadi, Kamal Mansur Jambi
2019 J jnl
Int. J. Inf. Retr. Res.
Imtiaz Hussain Khan, Muazzam Ahmed Siddiqui, Kamal Mansur Jambi
2018 conf
ICISDM
Khalid Alsubhi, Fawaz Alsolami, Abdullah M. Algarni, Kamal Mansur Jambi, Fathy E. Eassa, Maher Khemakhem
2018 J jnl
Wirel. Commun. Mob. Comput.
Adnan Ahmed Abi Sen, Fathy B. Eassa, Mohammad Yamin, Kamal Mansur Jambi
2017 C conf
AICCSA
Abdullah M. Algarni, Fawaz Alsolami, Fathy Elbouraey Eassa, Khalid Alsubhi, Kamal Mansur Jambi, Maher Khemakhem
2017 conf
CSCloud
Vijey Thayananthan, Omar A. Abdulkader, Kamal Mansur Jambi, Alwi M. Bamhdi
2017 B conf
CEC
Ali Wagdy Mohamed, Anas A. Hadi, Anas M. Fattouh, Kamal Mansur Jambi
2016 C conf
AICCSA
F. Essa, Kamal Mansur Jambi, Anas M. Fattouh, Hassanin M. Al-Barhamtoshy, Maher Khemakhem, A. Al-Ghamdi
2016 C conf
AICCSA
Hassanin M. Al-Barhamtoshy, Maher Khemakhem, Kamal Mansur Jambi, F. Essa, Anas M. Fattouh, A. Al-Ghamdi
2015 A conf
ICDAR
Mohamed Fawzi, Mohsen A. Rashwan, Hany Ahmed, Shaimaa Samir, Sherif M. Abdou, Hassanin M. Al-Barhamtoshy, Kamal Mansur Jambi
2007 conf
SIP
Kamal Mansur Jambi, S. Alnahdi
2005 J jnl
Egypt. Comput. Sci. J.
Kamal Mansur Jambi, Khalid Fakeeh, Fathy Eissa, Ahmed Azz
2005 J jnl
Egypt. Comput. Sci. J.
Kamal Mansur Jambi, Ahmed Azz, Khalid Fakeeh, Fathy Eissa
2005 J jnl
Egypt. Comput. Sci. J.
Kamal Mansur Jambi
2004 conf
Circuits, Signals, and Systems
Kamal Mansur Jambi, Mustaf Saleh, Hasanain Al-Barhamtooshi
2001 conf
SIP
Kamal Mansur Jambi
redb/extractors/detectiteasy.py
← Index redb/extractors/detectiteasy.py python
import inspect
from pprint import pprint
import subprocess
import json
from typing import Any
from datetime import datetime, timezone
import os
from dotenv import load_dotenv

from redb.extractors.enum import Tag
from redb.models.dataclasses import DIEinfo
from redb.extractors.extractor import Extractor

load_dotenv(override=True)

class DIEExtractor(Extractor):

    def __init__(
        self,
        filepath,
        log,
        exporters=None,
        index_prefix=None,
        elastic_index=None,
        known_benign=False,
        known_malicious=False,
        precomputed_hashes=None,
    ):
        super().__init__(
            filepath, log, exporters, index_prefix, elastic_index, known_benign, known_malicious,
            precomputed_hashes=precomputed_hashes
        )
        self.log.debug(inspect.currentframe().f_code.co_name)
        self.die_info = None
        self.die_info_dict = {}
        self.elastic_index = self.index_prefix + "-die"

    def _recursive_entry(self, die_dict, master_key):
        self.log.debug(inspect.currentframe().f_code.co_name)
        if master_key:
            self.die_info_dict[master_key] = {}
        else:
            self.die_info_dict = {}
        for value in die_dict:
            if "type" in value:
                type_key = value["type"].lower().replace(" ", "_")
                name = value.get("name", "")
                version = f"({value.get('version')})" if value.get("version") else ""
                info = f"[{value.get('info')}]" if value.get("info") else ""

                if master_key:
                    self.die_info_dict[master_key][type_key] = f"{name}"
                    self.die_info_dict[master_key][f'{type_key}(full)'] = f"{name}{version}{info}"
                else:
                    self.die_info_dict[type_key] = f"{name}"
                    self.die_info_dict[f'{type_key}(full)'] = f"{name}{version}{info}"

            elif "parentfilepart" in value:
                child_key = (
                    value["parentfilepart"].lower().replace(" ", "_")
                    + "."
                    + value["filetype"].lower().replace(" ", "_")
                )
                if master_key:
                    self._recursive_entry(value["values"], f"{master_key}.{child_key}")
                else:
                    self._recursive_entry(value["values"], f"{child_key}")

    def _extract_dieinfo(self):
        """
        Execute a command-line binary with arguments and parse its JSON output.

        :param command: The command or path to the binary to execute
        :param args: Additional arguments to pass to the command
        :return: Parsed JSON output as a Python object
        """
        self.log.debug(inspect.currentframe().f_code.co_name)

        # Construct the full command
        # command = "nfdc" # UNCOMMENT FOR PROD
        # command = "/Users/p4c0/_tools/NFD.app/Contents/MacOS/nfdc" # COMMENT FOR TESTING ON MAC
        command = os.getenv("DIE_PATH")
        args = ["-durj", self.filepath]
        full_command = [command] + list(args)
        TIMEOUT = int(os.getenv("DIE_TIMEOUT", "180"))

        try:
            # Execute the command and capture its output
            result = subprocess.run(
                full_command,
                capture_output=True,
                text=True,
                check=True,
                timeout=TIMEOUT,
            )

            # Parse the JSON output
            nfdc_output = json.loads(result.stdout)

            # Extract the DIE information from the json output
            for die_entry in nfdc_output["detects"]:
                if die_entry["parentfilepart"] == "Header":
                    master_key = (
                        die_entry["parentfilepart"].lower().replace(" ", "_")
                        + "."
                        + die_entry["filetype"].lower().replace(" ", "_")
                    )
                    self._recursive_entry(die_entry["values"], None)

            # pprint(json.dumps(self.die_info_dict, indent=2)) #debug
            self.die_info = DIEinfo(result.stdout, self.die_info_dict)
            self.log.debug(f"NFDC-DIE JSON dump: todo")
        except subprocess.TimeoutExpired:
            self.log.error(f"The DIE command timed out after {TIMEOUT} seconds")
            return None
        except subprocess.CalledProcessError as e:
            self.log.error(f"Error executing DIE command: {e}")
            self.log.error(f"Command output (stderr): {e.stderr}")
            return None
        except json.JSONDecodeError as e:
            self.log.error(f"Error parsing DIE JSON output: {e}")
            self.log.error(f"Raw output: {result.stdout}")
            return None

    def prepare_export_data(self, exporter_type: str) -> Any:
        if exporter_type == "ElasticsearchExporter":
            return self.die_info
        elif exporter_type == "ClickHouseExporter":
            # Convert DIE info to JSON string
            die_info_json = json.dumps(self.die_info_dict)
            
            data = [[
                self.sha256,
                self.md5,
                self.sha1,
                die_info_json,
                datetime.now(timezone.utc)
            ]]
            
            column_names = [
                'sha256', 'md5', 'sha1', 'die_info', 'analysis_date'
            ]
            
            column_type_names = [
                'String', 'String', 'String', 'JSON', 'DateTime64(3, \'UTC\')'
            ]
            
            return (data, column_names, column_type_names)

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

    def extract(self):
        self.log.debug(inspect.currentframe().f_code.co_name)
        try:
            self._extract_dieinfo()
            
            # Check if there's a packer in the DIE results
            is_packed = False
            if self.die_info_dict:
                # Check if 'packer' exists in the DIE results
                is_packed = bool(self.die_info_dict.get('packer'))
            
            return self.die_info  # Return the extracted data instead of exporting directly
        except Exception as e:
            self.log.error(f"Error extracting DIE information: {e}")
            return None

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