Nazar Khan

53 papers B 4C 2Journal 43Unranked 4
YearRankTypeTitle / Venue / Authors
2026 J jnl
CoRR
Arbish Akram, Nazar Khan, Arif Mahmood
2026 J jnl
Multim. Tools Appl.
Arbish Akram, Nazar Khan, Arif Mahmood
2024 J jnl
Int. J. Document Anal. Recognit.
Tauseef Iftikhar, Nazar Khan
2024 J jnl
Comput. J.
Naila Hamid, Nazar Khan, Arbish Akram
2024 J jnl
Axioms
Huo Tang, Zeeshan Mujahid, Nazar Khan, Fairouz Tchier, Muhammad Ghaffar Khan
2024 J jnl
Int. J. Document Anal. Recognit.
Tauseef Iftikhar, Nazar Khan
2024 J jnl
Multim. Tools Appl.
Arbish Akram, Nazar Khan
2024 J jnl
Multim. Tools Appl.
Arbish Akram, Nazar Khan
2023 J jnl
Axioms
Shahid Khan, Jong-Suk Ro, Fairouz Tchier, Nazar Khan
2023 J jnl
Neural Process. Lett.
Tayaba Anjum, Nazar Khan
2023 J jnl
J. Comput. Inf. Sci. Eng.
Rabia Sirhindi, Nazar Khan
2023 J jnl
Axioms
Isra Al-Shbeil, Nazar Khan, Fairouz Tchier, Qin Xin, Sarfraz Nawaz Malik, Shahid Khan
2023 J jnl
Axioms
Majid Khan, Nazar Khan, Ferdous M. O. Tawfiq, Jong-Suk Ro
2023 J jnl
Symmetry
Shahid Khan, Sahsene Altinkaya, Qin Xin, Fairouz Tchier, Sarfraz Nawaz Malik, Nazar Khan
2023 J jnl
Int. J. Document Anal. Recognit.
Adeela Islam, Tayaba Anjum, Nazar Khan
2023 J jnl
IEEE Trans. Circuits Syst. Video Technol.
Arbish Akram, Nazar Khan
2023 J jnl
CoRR
Arbish Akram, Nazar Khan
2023 J jnl
Symmetry
Ayman Alahmade, Zeeshan Mujahid, Ferdous Tawfiq, Bilal Khan, Nazar Khan, Fairouz Tchier
2022 J jnl
Symmetry
Shahid Khan, Nazar Khan, Aftab Hussain, Serkan Araci, Bilal Khan, Hamed H. Al-Sulami
2022 J jnl
Symmetry
Mohammad Faisal Khan, Isra Al-Shbeil, Najla Aloraini, Nazar Khan, Shahid Khan
2022 J jnl
Symmetry
Mohammad Faisal Khan, Isra Al-Shbeil, Shahid Khan, Nazar Khan, Wasim Ul-Haq, Jianhua Gong
2022 J jnl
Symmetry
Huo Tang, Muhammad Arif, Mirajul Haq, Nazar Khan, Mustaqeem Khan, Khurshid Ahmad, Bilal Khan
2022 J jnl
ACM Comput. Surv.
M. G. Sarwar Murshed, Christopher Murphy, Daqing Hou, Nazar Khan, Ganesh Ananthanarayanan, Faraz Hussain
2022 J jnl
Symmetry
Isra Al-Shbeil, Hari Mohan Srivastava, Muhammad Arif, Mirajul Haq, Nazar Khan, Bilal Khan
2021 J jnl
Symmetry
Qiuxia Hu, Hari M. Srivastava, Bakhtiar Ahmad, Nazar Khan, Muhammad Ghaffar Khan, Wali Khan Mashwani, Bilal Khan
2021 J jnl
Symmetry
Bilal Khan, Hari Mohan Srivastava, Nazar Khan, Maslina Darus, Qazi Zahoor Ahmad, Muhammad Tahir
2021 J jnl
CoRR
Tayaba Anjum, Nazar Khan
2021 J jnl
Axioms
Lei Shi, Hari M. Srivastava, Muhammad Ghaffar Khan, Nazar Khan, Bakhtiar Ahmad, Bilal Khan, Wali Khan Mashwani
2021 J jnl
Symmetry
Lei Shi, Bakhtiar Ahmad, Nazar Khan, Muhammad Ghaffar Khan, Serkan Araci, Wali Khan Mashwani, Bilal Khan
2021 J jnl
CoRR
Edward Verenich, Tobias Martin, Alvaro Velasquez, Nazar Khan, Faraz Hussain
2021 J jnl
Symmetry
Caihuan Zhang, Mirajul Haq, Nazar Khan, Muhammad Arif, Khurshid Ahmad, Bilal Khan
2021 J jnl
CoRR
Arbish Akram, Nazar Khan
2020 J jnl
Symmetry
Muhammad Shafiq, Hari M. Srivastava, Nazar Khan, Qazi Zahoor Ahmad, Maslina Darus, Samiha Kiran
2020 B conf
ICFHR
Tayaba Anjum, Nazar Khan
2020 J jnl
Clust. Comput.
Bilal Iqbal, Waheed Iqbal, Nazar Khan, Arif Mahmood, Abdelkarim Erradi
2020 J jnl
CoRR
M. G. Sarwar Murshed, Edward Verenich, James J. Carroll, Nazar Khan, Faraz Hussain
2020 C conf
ICMLA
Edward Verenich, Alvaro Velasquez, Nazar Khan, Faraz Hussain
2020 J jnl
CoRR
Edward Verenich, Alvaro Velasquez, Nazar Khan, Faraz Hussain
2020 J jnl
CoRR
Nazar Khan, Arbish Akram, Arif Mahmood, Sania Ashraf, Kashif Murtaza
2020 J jnl
Int. J. Comput. Vis.
Nazar Khan, Arbish Akram, Arif Mahmood, Sania Ashraf, Kashif Murtaza
2020 B conf
ICPR
Arbish Akram, Nazar Khan
2020 J jnl
CoRR
Arbish Akram, Nazar Khan
2020 C conf
ICMLA
M. G. Sarwar Murshed, James J. Carroll, Nazar Khan, Faraz Hussain
2019 conf
ICACS
Ayesha Rafique, Tauseef Iftikhar, Nazar Khan
2019 J jnl
CoRR
M. G. Sarwar Murshed, Christopher Murphy, Daqing Hou, Nazar Khan, Ganesh Ananthanarayanan, Faraz Hussain
2019 J jnl
Symmetry
Hari M. Srivastava, Muhammad Tahir, Bilal Khan, Qazi Zahoor Ahmad, Nazar Khan
2019 J jnl
Symmetry
Shahid Mahmood, Hari M. Srivastava, Nazar Khan, Qazi Zahoor Ahmad, Bilal Khan, Irfan Ali
2017 conf
WML@ICDAR
Nazar Khan, Asma Shaukat
2016 J jnl
J. Electronic Imaging
Naila Hamid, Nazar Khan
2013 B conf
ICIP
Nazar Khan, Marshall F. Tappen
2012 B conf
ICPR
Nazar Khan, Marshall F. Tappen
2011 conf
ICCV Workshops
Syed Zain Masood, Adarsh Nagaraja, Nazar Khan, Jiejie Zhu, Marshall F. Tappen
2009 conf
ICCV Workshops
Nazar Khan, Lam Tran, Marshall F. Tappen
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