Majid Safari

168 papers B 39Journal 87Unranked 41
YearRankTypeTitle / Venue / Authors
2025 J jnl
IEEE Trans. Commun.
Hossein Kazemi, Elham Sarbazi, Michael J. Crisp, Taisir E. H. El-Gorashi, Jaafar M. H. Elmirghani, Richard V. Penty, Ian H. White, Majid Safari, Harald Haas
2025 J jnl
IEEE Trans. Commun.
Ahmad Adnan Qidan, Khulood D. Alazwary, Taisir E. H. El-Gorashi, Majid Safari, Harald Haas, Richard V. Penty, Ian H. White, Jaafar M. H. Elmirghani
2025 J jnl
CoRR
Ahmad Adnan Qidan, Khulood D. Alazwary, Taisir E. H. El-Gorashi, Majid Safari, Harald Haas, Richard V. Penty, Ian H. White, Jaafar M. H. Elmirghani
2025 conf
ICC
Hossein Kazemi, Elham Sarbazi, Majid Safari, Harald Haas
2025 J jnl
CoRR
Ahmad Adnan Qidan, Taisir E. H. El-Gorashi, Majid Safari, Harald Haas, Richard V. Penty, Ian H. White, Jaafar M. H. Elmirghani
2025 B conf
WCNC
Juncheng Li, Shenjie Huang, Iman Tavakkolnia, Harald Haas, Majid Safari
2025 conf
ICC
Yifan Huang, Vasilis K. Papanikolaou, Hedieh Ajam, Majid Safari, Robert Schober, Harald Haas, Iman Tavakkolnia
2025 conf
CommNet
Mohamad Hijazi, Mohammad Dehghani Soltani, Harald Haas, Majid Safari
2025 B conf
WCNC
Muhammad Nafees, Mohammadamin Baniasadi, James R. Hopgood, Majid Safari, John S. Thompson
2025 B conf
PIMRC
Muhammad Nafees, Mohammadamin Baniasadi, James R. Hopgood, Majid Safari, John S. Thompson
2025 J jnl
IEEE Trans. Commun.
Mohammadamin Baniasadi, Yu Chen, Majid Safari
2025 conf
MeditCom
Nurul Aini Amran, Mohammad Dehghani Soltani, Majid Safari
2025 J jnl
IEEE Trans. Commun.
Jinzhe Che, Shenjie Huang, Majid Safari
2024 J jnl
IEEE Open J. Commun. Soc.
Muhammad Nafees, Shenjie Huang, John S. Thompson, Majid Safari
2024 J jnl
IEEE Trans. Commun.
Elham Sarbazi, Hossein Kazemi, Michael J. Crisp, Taisir E. H. El-Gorashi, Jaafar M. H. Elmirghani, Richard V. Penty, Ian H. White, Majid Safari, Harald Haas
2024 conf
GLOBECOM (Workshops)
Mingqing Liu, Hossein Kazemi, Majid Safari, Iman Tavakkolnia, Harald Haas
2024 J jnl
IEEE Trans. Wirel. Commun.
Shuai Ma, Haihong Sheng, Junchang Sun, Hang Li, Xiaodong Liu, Chen Qiu, Majid Safari, Naofal Al-Dhahir, Shiyin Li
2024 conf
VTC Spring
Jinzhe Che, Shenjie Huang, Majid Safari
2024 B conf
WCNC
Juncheng Li, Yifan Huang, Shenjie Huang, Iman Tavakkolnia, Harald Haas, Majid Safari
2024 J jnl
IEEE Open J. Commun. Soc.
Juncheng Li, Shenjie Huang, Mohammad Dehghani Soltani, Harald Haas, Majid Safari
2024 J jnl
IEEE Open J. Commun. Soc.
Yifan Huang, Majid Safari, Harald Haas, Iman Tavakkolnia
2024 J jnl
IEEE Commun. Mag.
Shenjie Huang, Danial Chitnis, Cheng Chen, Harald Haas, Mohammad Ali Khalighi, Robert K. Henderson, Majid Safari
2024 J jnl
CoRR
Jinzhe Che, Shenjie Huang, Majid Safari
2024 J jnl
IEEE Access
Cheng Chen, Shenjie Huang, Iman Tavakkolnia, Majid Safari, Harald Haas
2023 B conf
GLOBECOM
Mohammadamin Baniasadi, Yu Chen, Alex Dytso, Luca Barletta, Majid Safari
2023 conf
ICC Workshops
Elham Sarbazi, Hossein Kazemi, Majid Safari, Harald Haas
2023 J jnl
CoRR
Zabih Ghassemlooy, Mohammad Ali Khalighi, Stanislav Zvanovec, A. Shrestha, Beatriz Ortega, Milica I. Petkovic, X. Pang, Carlo Sirtori, Davide Orsucci, Florian Moll, Giulio Cossu, Veronica Spirito, Michalis P. Ninos, Ernesto Ciaramella, J. Bas, M. Amay, S. Huang, Majid Safari, Tilahun Zerihun Gutema, Wasiu O. Popoola, Vicente Matus, José Rabadán, Rafael Pérez Jiménez, Erdal Panayirci, Panagiotis D. Diamantoulakis, Harald Haas, Ikenna Chinazaekpere Ijeh
2023 J jnl
CoRR
Shuai Ma, Haihong Sheng, Junchang Sun, Hang Li, Xiaodong Liu, Chen Qiu, Majid Safari, Naofal Al-Dhahir, Shiyin Li
2023 J jnl
IEEE Trans. Commun.
Mohammad Dehghani Soltani, Hossein Kazemi, Elham Sarbazi, Taisir E. H. El-Gorashi, Jaafar M. H. Elmirghani, Richard V. Penty, Ian H. White, Harald Haas, Majid Safari
2023 J jnl
Sensors
Mohamad Hijazi, Shenjie Huang, Majid Safari
2023 B conf
GLOBECOM
Elham Sarbazi, Hossein Kazemi, Majid Safari, Harald Haas
2023 conf
ICC
Juncheng Li, Mohammad Dehghani Soltani, Harald Haas, Majid Safari
2023 B conf
GLOBECOM
Nurul Aini Amran, Mohammad Dehghani Soltani, Majid Safari
2023 B conf
GLOBECOM
Hossein Kazemi, Elham Sarbazi, Majid Safari, Harald Haas
2023 J jnl
IEEE Trans. Commun.
Yu Chen, Mohammadamin Baniasadi, Majid Safari
2023 J jnl
IEEE Commun. Lett.
Shenjie Huang, Cheng Chen, Mohammad Dehghani Soltani, Robert K. Henderson, Harald Haas, Majid Safari
2023 J jnl
JOCN
Shenjie Huang, Yichen Li, Cheng Chen, Mohammad Dehghani Soltani, Robert K. Henderson, Majid Safari, Harald Haas
2023 J jnl
CoRR
Shenjie Huang, Danial Chitnis, Cheng Chen, Harald Haas, Mohammad Ali Khalighi, Robert K. Henderson, Majid Safari
2023 J jnl
IEEE Wirel. Commun.
Mohammad Dehghani Soltani, Ahmad Adnan Qidan, Shenjie Huang, Barzan A. Yosuf, Sanaa H. Mohamed, Ravinder Singh, Yi Liu, Wajahat Ali, Rui Chen, Hossein Kazemi, Elham Sarbazi, Bela Berde, Dominique Chiaroni, Bastien Béchadergue, Fathi Abdeldayem, Hardik Soni, Jose Tabu, Micheline Perrufel, Nikola Serafimovski, Taisir E. H. El-Gorashi, Jaafar M. H. Elmirghani, Michael J. Crisp, Richard V. Penty, Ian H. White, Harald Haas, Majid Safari
2023 conf
ICC Workshops
Hossein Kazemi, Elham Sarbazi, Majid Safari, Harald Haas
2022 J jnl
IEEE Trans. Commun.
Hossein Kazemi, Elham Sarbazi, Mohammad Dehghani Soltani, Taisir E. H. El-Gorashi, Jaafar M. H. Elmirghani, Richard V. Penty, Ian H. White, Majid Safari, Harald Haas
2022 J jnl
IEEE Trans. Commun.
Zhihong Zeng, Mohammad Dehghani Soltani, Majid Safari, Harald Haas
2022 B conf
WCNC
Mohamad Hijazi, Shenjie Huang, Majid Safari
2022 B conf
GLOBECOM
Elham Sarbazi, Hossein Kazemi, Mohammad Dehghani Soltani, Majid Safari, Harald Haas
2022 J jnl
CoRR
Elham Sarbazi, Hossein Kazemi, Michael J. Crisp, Taisir E. H. El-Gorashi, Jaafar M. H. Elmirghani, Richard V. Penty, Ian H. White, Majid Safari, Harald Haas
2022 conf
ICC Workshops
Shuangfeng Jiang, Majid Safari
2022 J jnl
CoRR
Mohammad Dehghani Soltani, Hossein Kazemi, Elham Sarbazi, Taisir E. H. El-Gorashi, Jaafar M. H. Elmirghani, Richard V. Penty, Ian H. White, Harald Haas, Majid Safari
2022 J jnl
IEEE Access
Nurul Aini Amran, Mohammad Dehghani Soltani, Mehrdad Yaghoobi, Majid Safari
2022 B conf
WCNC
Muhammad Nafees, Shenjie Huang, John Thompson, Majid Safari
2022 B conf
ISIT
Mohammadamin Baniasadi, Yu Chen, Majid Safari
2022 conf
ICC Workshops
Mohammad Dehghani Soltani, Hossein Kazemi, Elham Sarbazi, Harald Haas, Majid Safari
2022 J jnl
IEEE Trans. Commun.
Shuai Ma, Ruixin Yang, Bing Li, Yongyan Chen, Hang Li, Youlong Wu, Majid Safari, Shiyin Li, Naofal Al-Dhahir
2022 J jnl
CoRR
Shuai Ma, Ruixin Yang, Bing Li, Yongyan Chen, Hang Li, Youlong Wu, Majid Safari, Shiyin Li, Naofal Al-Dhahir
2022 B conf
ISIT
Yu Chen, Mohammadamin Baniasadi, Majid Safari
2022 J jnl
CoRR
Shenjie Huang, Yichen Li, Cheng Chen, Mohammad Dehghani Soltani, Robert K. Henderson, Majid Safari, Harald Haas
2022 J jnl
IEEE Syst. J.
Rizwana Ahmad, Mohammad Dehghani Soltani, Majid Safari, Anand Srivastava
2022 J jnl
IEEE Trans. Commun.
Shenjie Huang, Majid Safari
2022 J jnl
CoRR
Shenjie Huang, Cheng Chen, Mohammad Dehghani Soltani, Robert K. Henderson, Harald Haas, Majid Safari
2022 J jnl
Proc. IEEE
Mohammad Dehghani Soltani, Elham Sarbazi, Nikolaos Bamiedakis, Priyanka de Souza, Hossein Kazemi, Jaafar M. H. Elmirghani, Ian H. White, Richard V. Penty, Harald Haas, Majid Safari
2022 J jnl
CoRR
Mohammad Dehghani Soltani, Hossein Kazemi, Elham Sarbazi, Ahmad Adnan Qidan, Barzan A. Yosuf, Sanaa H. Mohamed, Ravinder Singh, Bela Berde, Dominique Chiaroni, Bastien Béchadergue, Fathi Abdeldayem, Hardik Soni, Jose Tabu, Micheline Perrufel, Nikola Serafimovski, Taisir E. H. El-Gorashi, Jaafar M. H. Elmirghani, Richard V. Penty, Ian H. White, Harald Haas, Majid Safari
2021 J jnl
CoRR
Shenjie Huang, Cheng Chen, Rui Bian, Harald Haas, Majid Safari
2021 J jnl
CoRR
Hossein Kazemi, Elham Sarbazi, Mohammad Dehghani Soltani, Majid Safari, Harald Haas
2021 J jnl
CoRR
Zhihong Zeng, Mohammad Dehghani Soltani, Majid Safari, Harald Haas
2021 J jnl
IEEE Commun. Surv. Tutorials
Xiping Wu, Mohammad Dehghani Soltani, Lai Zhou, Majid Safari, Harald Haas
2021 J jnl
CoRR
Zhihong Zeng, Mohammad Dehghani Soltani, Cheng Chen, Majid Safari, Harald Haas
2021 J jnl
IEEE J. Sel. Areas Commun.
Mohamed Amine Arfaoui, Mohammad Dehghani Soltani, Iman Tavakkolnia, Ali Ghrayeb, Chadi M. Assi, Majid Safari, Harald Haas
2021 J jnl
IEEE Trans. Wirel. Commun.
Mohamed Amine Arfaoui, Mohammad Dehghani Soltani, Iman Tavakkolnia, Ali Ghrayeb, Chadi M. Assi, Majid Safari, Harald Haas
2021 J jnl
IEEE Access
Muhammad Nafees, John Thompson, Majid Safari
2021 J jnl
IEEE Access
Hanaa Abumarshoud, Mohammad Dehghani Soltani, Majid Safari, Harald Haas
2021 B conf
GLOBECOM
Shenjie Huang, Majid Safari
2021 J jnl
CoRR
Shenjie Huang, Majid Safari
2021 J jnl
CoRR
Mohammad Dehghani Soltani, Elham Sarbazi, Nikolaos Bamiedakis, Priyanka de Souza, Hossein Kazemi, Richard V. Penty, Harald Haas, Majid Safari
2021 J jnl
CoRR
Shenjie Huang, Majid Safari
2020 B conf
PIMRC
Elham Sarbazi, Hossein Kazemi, Mohammad Dehghani Soltani, Majid Safari, Harald Haas
2020 B conf
PIMRC
Hossein Kazemi, Elham Sarbazi, Mohammad Dehghani Soltani, Majid Safari, Harald Haas
2020 conf
ICC Workshops
Mohammad Dehghani Soltani, Ardimas Andi Purwita, Zhihong Zeng, Cheng Chen, Harald Haas, Majid Safari
2020 conf
ICC Workshops
Nurul Aini Amran, Mohammad Dehghani Soltani, Mehrdad Yaghoobi, Majid Safari
2020 conf
VTC Spring
Yu Fu, Mohammad Dehghani Soltani, Hamada Alshaer, Cheng-Xiang Wang, Majid Safari, Stephen McLaughlin, Harald Haas
2020 J jnl
IEEE Trans. Commun.
Ardimas Andi Purwita, Anil Yesilkaya, Majid Safari, Harald Haas
2020 J jnl
CoRR
Xiping Wu, Mohammad Dehghani Soltani, Lai Zhou, Majid Safari, Harald Haas
2020 J jnl
IEEE Open J. Commun. Soc.
Shenjie Huang, Majid Safari
2020 B conf
WCNC
Cheng Chen, Iman Tavakkolnia, Mohammad Dehghani Soltani, Majid Safari, Harald Haas
2020 B conf
PIMRC
Rizwana Ahmad, Mohammad Dehghani Soltani, Majid Safari, Anand Srivastava
2020 conf
CSNDSP
Amir Hossein Fahim Raouf, Majid Safari, Murat Uysal
2020 J jnl
IEEE Trans. Wirel. Commun.
Hossein Kazemi, Majid Safari, Harald Haas
2020 J jnl
Entropy
Yu Chen, Iman Tavakkolnia, Alex Alvarado, Majid Safari
2020 B conf
WCNC
Elham Sarbazi, Majid Safari, Harald Haas
2020 J jnl
IEEE Commun. Surv. Tutorials
Mohamed Amine Arfaoui, Mohammad Dehghani Soltani, Iman Tavakkolnia, Ali Ghrayeb, Majid Safari, Chadi M. Assi, Harald Haas
2020 J jnl
IEEE Access
Rizwana Ahmad, Mohammad Dehghani Soltani, Majid Safari, Anand Srivastava, Abir Das
2020 B conf
WCNC
Shenjie Huang, Majid Safari
2020 J jnl
IEEE Trans. Commun.
Elham Sarbazi, Majid Safari, Harald Haas
2019 B conf
PIMRC
Mohammad Dehghani Soltani, Zhihong Zeng, Hossein Kazemi, Cheng Chen, Harald Haas, Majid Safari
2019 J jnl
IEEE Trans. Wirel. Commun.
Hossein Kazemi, Majid Safari, Harald Haas
2019 conf
ICC Workshops
Cheng Chen, Mohammad Dehghani Soltani, Majid Safari, Ardimas Andi Purwita, Xiping Wu, Harald Haas
2019 conf
ICC
Zhihong Zeng, Mohammad Dehghani Soltani, Majid Safari, Harald Haas
2019 J jnl
IEEE J. Sel. Areas Commun.
Mohammad Dehghani Soltani, Mohamed Amine Arfaoui, Iman Tavakkolnia, Ali Ghrayeb, Majid Safari, Chadi M. Assi, Mazen O. Hasna, Harald Haas
2019 conf
ICC
Ardimas Andi Purwita, Cheng Chen, Majid Safari, Harald Haas
2019 B conf
PIMRC
Ardimas Andi Purwita, Anil Yesilkaya, Iman Tavakkolnia, Majid Safari, Harald Haas
2019 J jnl
IEEE Trans. Wirel. Commun.
Shenjie Huang, Vahid Shah-Mansouri, Majid Safari
2019 B conf
PIMRC
Ardimas Andi Purwita, Anil Yesilkaya, Tezcan Çogalan, Majid Safari, Harald Haas
2019 J jnl
IEEE Access
Mohammad Dehghani Soltani, Ardimas Andi Purwita, Iman Tavakkolnia, Harald Haas, Majid Safari
2019 conf
ICC Workshops
Iman Tavakkolnia, Mohammad Dehghani Soltani, Mohamed Amine Arfaoui, Ali Ghrayeb, Chadi Assi, Majid Safari, Harald Haas
2019 J jnl
IEEE Trans. Commun.
Mohammad Dehghani Soltani, Ardimas Andi Purwita, Zhihong Zeng, Harald Haas, Majid Safari
2019 J jnl
CoRR
Hossein Kazemi, Majid Safari, Harald Haas
2019 J jnl
CoRR
Yichen Li, Majid Safari, Robert K. Henderson, Harald Haas
2019 B conf
WCNC
Mohammad Dehghani Soltani, Zhihong Zeng, Iman Tavakkolnia, Harald Haas, Majid Safari
2019 conf
ICC Workshops
Mohamed Amine Arfaoui, Mohammad Dehghani Soltani, Iman Tavakkolnia, Ali Ghrayeb, Chadi Assi, Harald Haas, Majid Safari
2019 J jnl
IEEE Trans. Wirel. Commun.
Ardimas Andi Purwita, Mohammad Dehghani Soltani, Majid Safari, Harald Haas
2019 conf
UCET
Xiaoyan Shi, John S. Thompson, Majid Safari, Shenjie Huang, Rongke Liu
2019 B conf
WCNC
Mehdi Karbalayghareh, Farshad Miramirkhani, Majid Safari, Murat Uysal
2018 B conf
GLOBECOM
Hossein Kazemi, Majid Safari, Harald Haas
2018 J jnl
IEEE Trans. Commun.
Mohammad Dehghani Soltani, Xiping Wu, Majid Safari, Harald Haas
2018 conf
ECOC
Iman Tavakkolnia, Alex Alvarado, Majid Safari
2018 J jnl
Phys. Commun.
Murat Uysal, Luís Nero Alves, Julian Cheng, Harsha Chenji, Majid Safari
2018 J jnl
IEEE Trans. Commun.
Xiaoyan Shi, John S. Thompson, Rongke Liu, Majid Safari, Pan Cao
2018 J jnl
CoRR
Shenjie Huang, Vahid Shah-Mansouri, Majid Safari
2018 conf
VTC Spring
Ardimas Andi Purwita, Mohammad Dehghani Soltani, Majid Safari, Harald Haas
2018 J jnl
IEEE Access
Anas Chaaban, Nan Chi, Hany Elgala, Zouheir Rezki, Majid Safari, Harilaos G. Sandalidis, Muhammad Ali Imran
2018 J jnl
CoRR
Mohammad Dehghani Soltani, Ardimas Andi Purwita, Iman Tavakkolnia, Harald Haas, Majid Safari
2018 B conf
WCNC
Ardimas Andi Purwita, Mohammad Dehghani Soltani, Majid Safari, Harald Haas
2018 J jnl
CoRR
Mohammad Dehghani Soltani, Ardimas Andi Purwita, Zhihong Zeng, Harald Haas, Majid Safari
2018 B conf
IWCMC
Yu Chen, Shenjie Huang, Majid Safari
2018 conf
VTC Fall
Zhihong Zeng, Mohammad Dehghani Soltani, Harald Haas, Majid Safari
2018 J jnl
IEEE J. Sel. Areas Commun.
Yufei Jiang, Yunlu Wang, Pan Cao, Majid Safari, John S. Thompson, Harald Haas
2018 J jnl
IEEE Trans. Commun.
Shenjie Huang, Gilda Raoof Mehrpoor, Majid Safari
2018 B conf
WCNC
Shenjie Huang, Majid Safari
2018 J jnl
IEEE Trans. Commun.
Elham Sarbazi, Majid Safari, Harald Haas
2018 B conf
GLOBECOM
Elham Sarbazi, Majid Safari, Harald Haas
2017 conf
ICC
Hossein Kazemi, Majid Safari, Harald Haas
2017 J jnl
IEEE Trans. Commun.
Xiping Wu, Majid Safari, Harald Haas
2017 conf
ICC Workshops
Xiaoyan Shi, John S. Thompson, Majid Safari, Rongke Liu
2017 J jnl
CoRR
Mohammad Dehghani Soltani, Xiping Wu, Majid Safari, Harald Haas
2017 J jnl
IEEE Trans. Wirel. Commun.
Shenjie Huang, Majid Safari
2017 B conf
WCNC
Mohammad Dehghani Soltani, Hossein Kazemi, Majid Safari, Harald Haas
2017 conf
UNet
Yufei Jiang, Majid Safari, Harald Haas
2017 B conf
WCNC
Xiping Wu, Majid Safari, Harald Haas
2017 B conf
PIMRC
Mohammad Dehghani Soltani, Majid Safari, Harald Haas
2017 J jnl
Comput. Commun.
Ali Rahmati, Vahid Shah-Mansouri, Majid Safari
2017 J jnl
CoRR
Iman Tavakkolnia, Majid Safari
2017 J jnl
CoRR
Shenjie Huang, Gilda Raoof Mehrpoor, Majid Safari
2017 conf
ICC Workshops
Shenjie Huang, Majid Safari
2016 B conf
PIMRC
Mohammad Dehghani Soltani, Xiping Wu, Majid Safari, Harald Haas
2016 conf
VTC Spring
Xiping Wu, Majid Safari, Harald Haas
2016 B conf
GLOBECOM
Elham Sarbazi, Majid Safari, Harald Haas
2016 conf
VTC Fall
Hossein Kazemi, Majid Safari, Harald Haas
2016 B conf
PIMRC
Xiping Wu, Dushyantha A. Basnayaka, Majid Safari, Harald Haas
2016 conf
EuCNC
Iman Tavakkolnia, Majid Safari
2015 conf
ICC Workshops
Majid Safari
2015 conf
IWOW
Gilda Raoof Mehrpoor, Majid Safari, Bernhard Schmauss
2015 conf
ICC
Shenjie Huang, Majid Safari
2015 conf
GLOBECOM Workshops
Yichen Li, Majid Safari, Robert K. Henderson, Harald Haas
2015 conf
VLCS@MobiCom
Mohammad Dehghani Soltani, Xiping Wu, Majid Safari, Harald Haas
2015 conf
IWOW
Elham Sarbazi, Majid Safari, Harald Haas
2015 conf
EuCNC
Iman Tavakkolnia, Majid Safari
2015 B conf
PIMRC
Xiping Wu, Majid Safari, Harald Haas
2013 J jnl
IEEE Trans. Commun.
Majid Safari, Steve Hranilovic
2013 J jnl
JOCN
Mohammadreza A. Kashani, Majid Safari, Murat Uysal
2013 conf
ICC
Linyan Liu, Majid Safari, Steve Hranilovic
2013 conf
CWIT
Linyan Liu, Majid Safari, Steve Hranilovic
2012 J jnl
IEEE Commun. Lett.
Mohammadreza A. Kashani, Mohammad M. Rad, Majid Safari, Murat Uysal
2012 conf
ICC
Majid Safari, Steve Hranilovic
2012 J jnl
IEEE Trans. Commun.
Majid Safari, Mohammad M. Rad, Murat Uysal
2012 B conf
WCNC
Mohammadreza A. Kashani, Majid Safari, Murat Uysal
2011
Majid Safari
2008 J jnl
IEEE Trans. Wirel. Commun.
Majid Safari, Murat Uysal
2008 J jnl
IEEE Trans. Wirel. Commun.
Majid Safari, Murat Uysal
2008 J jnl
IEEE Trans. Wirel. Commun.
Majid Safari, Murat Uysal
2004 B conf
ICIP
Majid Safari, Mehrtash Tafazzoli Harandi, Babak Nadjar Araabi
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