V. B. Surya Prasath

139 papers B 7C 6Misc 3Journal 89Unranked 33
YearRankTypeTitle / Venue / Authors
2026 J jnl
Comput. Medical Imaging Graph.
Shyam Sundar Debsarkar, V. B. Surya Prasath
2026 J jnl
Neural Comput. Appl.
Shyam Sundar Debsarkar, Bruce J. Aronow, V. B. Surya Prasath
2025 J jnl
Comput. Biol. Medicine
Shyam Sundar Debsarkar, Bruce J. Aronow, V. B. Surya Prasath
2025 J jnl
Comput. Biol. Medicine
Balaji Iyer, S. Deoghare, Krish Ranjan, Bruce J. Aronow, V. B. Surya Prasath
2025 J jnl
CAAI Trans. Intell. Technol.
Hazique Aetesam, Suman Kumar Maji, V. B. Surya Prasath
2025 J jnl
IEEE Access
Satoshi Shirae, Shyam Sundar Debsarkar, Hiroharu Kawanaka, Bruce J. Aronow, V. B. Surya Prasath
2025 B conf
KES
Satoshi Shirae, Shyam Sundar Debsarkar, Hiroharu Kawanaka, Bruce J. Aronow, V. B. Surya Prasath
2025 conf
AIPR
Balaji Iyer, Brady J. Williamson, V. B. Surya Prasath, Bruce J. Aronow, Pooja Khatri, Heidi Sucharew, Vivek Khandwala, Joseph LaPorta, Lily Wang, Rebecca Cornelius, Mary Gaskill-Shipley, Thomas Tomsick, David Wang, Thomas Maloney, Paul S. Horn, Janice Carrozzella, Brett M. Kissela, Achala Vagal
2025 J jnl
IET Image Process.
Hazique Aetesam, V. B. Surya Prasath
2025 B conf
KES
Seddik Boudissa, Shyam Sundar Debsarkar, Hiroharu Kawanaka, Bruce J. Aronow, V. B. Surya Prasath
2024 J jnl
Comput. Biol. Medicine
Xiaoxuan Liu, James Reigle, V. B. Surya Prasath, Jasbir Dhaliwal
2024 J jnl
Soft Comput.
Nadeem Salamat, Malik Muhammad Saad Missen, Nadeem Akhtar, Muhammad Mustahsan, V. B. Surya Prasath
2024 J jnl
Comput. Biol. Medicine
Riku Nakagaki, Shyam Sundar Debsarkar, Hiroharu Kawanaka, Bruce J. Aronow, V. B. Surya Prasath
2024 J jnl
Neural Comput. Appl.
Shreyash Singh, Harshit Jadli, R. Padma Priya, V. B. Surya Prasath
2024 J jnl
CoRR
Shreyash Rawat, V. Vijayarajan, V. B. Surya Prasath
2024 conf
FSDM
Seddik Boudissa, Shyam Sundar Debsarkar, Hiroharu Kawanaka, Bruce J. Aronow, V. B. Surya Prasath
2023 J jnl
Signal Image Video Process.
Piyush Satti, Vaibhav Shrotriya, Bharat Garg, V. B. Surya Prasath
2023 J jnl
J. Imaging Inform. Medicine
Paravatham V. S. P. Raghavendra, C. Charitha, K. Ghousiya Begum, V. B. Surya Prasath
2023 J jnl
Int. J. Interact. Mob. Technol.
Qurat Ul Ain, Malik Muhammad Saad Missen, V. B. Surya Prasath
2023 J jnl
J. Digit. Imaging
S. Boopathiraja, P. Kalavathi, S. Deoghare, V. B. Surya Prasath
2023 J jnl
Neural Process. Lett.
Atharva Gundawar, Srishti Lodha, V. Vijayarajan, Balaji Iyer, V. B. Surya Prasath
2023 J jnl
Circuits Syst. Signal Process.
El Hadji S. Diop, Ata Ngom, V. B. Surya Prasath
2023 J jnl
J. Mobile Multimedia
Krishnakanth Medichalam, V. Vijayarajan, V. Vinoth Kumar, I. Manimozhi Iyer, Yaswanth Kumar Vanukuri, V. B. Surya Prasath, B. Swapna
2023 J jnl
PLoS Comput. Biol.
Tareian A. Cazares, Faiz W. Rizvi, Balaji Iyer, Xiaoting Chen, Michael Kotliar, Anthony T. Bejjani, Joseph A. Wayman, Omer Donmez, Benjamin Wronowski, Sreeja Parameswaran, Leah C. Kottyan, Artem Barski, Matthew T. Weirauch, V. B. Surya Prasath, Emily R. Miraldi
2022 J jnl
Briefings Bioinform.
Kang Jin, Daniel J. Schnell, Guangyuan Li, Nathan Salomonis, V. B. Surya Prasath, Rhonda Szczesniak, Bruce J. Aronow
2022 J jnl
J. Adv. Comput. Intell. Intell. Informatics
Daiki Katsuma, Hiroharu Kawanaka, V. B. Surya Prasath, Bruce J. Aronow
2022 J jnl
CoRR
Subrato Bharati, M. Rubaiyat Hossain Mondal, Prajoy Podder, V. B. Surya Prasath
2022 J jnl
Int. J. Biom.
Ahmad B. A. Hassanat, Abeer Albustanji, Ahmad S. Tarawneh, Malek Q. Alrashidi, Hani Alharbi, Mohammed Alanazi, Mansoor Alghamdi, Ibrahim S. Alkhazi, V. B. Surya Prasath
2022 J jnl
Multim. Tools Appl.
Subrato Bharati, Prajoy Podder, Dang Ngoc Hoang Thanh, V. B. Surya Prasath
2022 J jnl
CoRR
Subrato Bharati, M. Rubaiyat Hossain Mondal, Prajoy Podder, V. B. Surya Prasath
2022 J jnl
Int. J. Hybrid Intell. Syst.
Subrato Bharati, M. Rubaiyat Hossain Mondal, Prajoy Podder, V. B. Surya Prasath
2022 J jnl
Comput. Appl. Math.
Nadeem Salamat, Ameer Hamza Arif, Muhammad Mustahsan, Malik Muhammad Saad Missen, V. B. Surya Prasath
2021 J jnl
Frontiers Comput. Sci.
Mujtaba Husnain, Malik Muhammad Saad Missen, Nadeem Akhtar, Mickaël Coustaty, Shahzad Mumtaz, V. B. Surya Prasath
2021 J jnl
Signal Process.
Dang Ngoc Hoang Thanh, V. B. Surya Prasath, Sergey D. Dvoenko, Le Minh Hieu
2021 J jnl
Soft Comput.
T. Priya, P. Kalavathi, V. B. Surya Prasath, R. Sivanesan
2021 J jnl
Int. J. Hybrid Intell. Syst.
Subrato Bharati, Prajoy Podder, M. Rubaiyat Hossain Mondal, V. B. Surya Prasath
2021 J jnl
Multidimens. Syst. Signal Process.
V. B. Surya Prasath, Dang N. H. Thanh, Le Minh Hieu, Le Thi Thanh
2021 J jnl
CoRR
Ahmad Basheer Hassanat, Abeer Albustanji, Ahmad S. Tarawneh, Malek Q. Alrashidi, Hani Alharbi, Mohammed Alanazi, Mansoor Alghamdi, Ibrahim S. Alkhazi, V. B. Surya Prasath
2021 J jnl
Briefings Bioinform.
Guangyuan Li, Balaji Iyer, V. B. Surya Prasath, Yizhao Ni, Nathan Salomonis
2021 J jnl
Int. J. Comput. Appl. Technol.
Dang Ngoc Hoang Thanh, Le Thi Thanh, Ugur Erkan, Aditya Khamparia, V. B. Surya Prasath
2021 C conf
ISDA
Subrato Bharati, Prajoy Podder, M. Rubaiyat Hossain Mondal, V. B. Surya Prasath, Niketa Gandhi
2021 J jnl
J. Ambient Intell. Humaniz. Comput.
Malik Muhammad Saad Missen, Aqsa Naeem, Hina Asmat, Nadeem Salamat, Nadeem Akhtar, Mickaël Coustaty, V. B. Surya Prasath
2021 J jnl
Appl. Clin. Inform.
Manan Shah, Derek Shu, V. B. Surya Prasath, Yizhao Ni, Andrew Schapiro, Kevin R. Dufendach
2021 J jnl
CoRR
Subrato Bharati, Prajoy Podder, M. Rubaiyat Hossain Mondal, V. B. Surya Prasath
2021 J jnl
Soft Comput.
Rushikesh Deotale, Shreyash Rawat, V. Vijayarajan, V. B. Surya Prasath
2021 J jnl
Artif. Intell. Rev.
Nadeem Salamat, Malik Muhammad Saad Missen, V. B. Surya Prasath
2020 J jnl
Multim. Tools Appl.
Dang N. H. Thanh, Nguyen Hoang Hai, V. B. Surya Prasath, Le Minh Hieu, João Manuel R. S. Tavares
2020 J jnl
Signal Image Video Process.
Dang N. H. Thanh, V. B. Surya Prasath, Le Minh Hieu, Sergey D. Dvoenko
2020 J jnl
Symmetry
Mohammed Attik, Malik Muhammad Saad Missen, Mickaël Coustaty, Gyu Sang Choi, Fahd Saleh Alotaibi, Nadeem Akhtar, Muhammad Zeeshan Jhandir, V. B. Surya Prasath, Nadeem Salamat, Mujtaba Husnain
2020 J jnl
Traitement du Signal
Aqsa Rashid, Nadeem Salamat, V. B. Surya Prasath
2020 J jnl
Informatica
Balasubramanian Muthusenthil, Hyunsung Kim, V. B. Surya Prasath
2020 Misc conf
AMIA
Manan Shah, Derek Shu, V. B. Surya Prasath, Yizhao Ni, Andrew Schapiro, Kevin R. Dufendach
2020 J jnl
J. Digit. Imaging
Dang N. H. Thanh, V. B. Surya Prasath, Le Minh Hieu, Nguyen Ngoc Hien
2020 conf
ICPR Workshops (5)
V. B. Surya Prasath, Dang Ngoc Hoang Thanh, Nguyen Hoang Hai, Sergey D. Dvoenko
2020 J jnl
IEEE Access
V. B. Surya Prasath, Dang Ngoc Hoang Thanh, Nguyen Quoc Hung, Le Minh Hieu
2020 J jnl
Circuits Syst. Signal Process.
El-Hadji Samba Diop, Abdel-Ouahab Boudraa, V. B. Surya Prasath
2020 J jnl
Scientometrics
Malik Muhammad Saad Missen, Sajeeha Qureshi, Nadeem Salamat, Nadeem Akhtar, Hina Asmat, Mickaël Coustaty, V. B. Surya Prasath
2019 conf
KSE
Nguyen Hoang Hai, Dang N. H. Thanh, Nguyen Ngoc Hien, Chinthaka Premachandra, V. B. Surya Prasath
2019 J jnl
Informatica (Slovenia)
Dang N. H. Thanh, V. B. Surya Prasath, Le Minh Hieu
2019 C conf
APCC
Le Thi Thanh, Dang N. H. Thanh, V. B. Surya Prasath
2019 J jnl
Informatica (Slovenia)
Nguyen Hoang Hai, Le Minh Hieu, Dang N. H. Thanh, Nguyen Van Son, V. B. Surya Prasath
2019 conf
RIVF
Dang N. H. Thanh, Le Thi Thanh, V. B. Surya Prasath, Ugur Erkan
2019 J jnl
Inf.
Ahmad B. A. Hassanat, Khalid Almohammadi, Esra'a Alkafaween, Eman Abunawas, Awni Mansoar Hammouri, V. B. Surya Prasath
2019 J jnl
Big Data
Haneen Arafat Abu Alfeilat, Ahmad B. A. Hassanat, Omar Lasassmeh, Ahmad S. Tarawneh, Mahmoud Bashir Alhasanat, Hamzeh Eyal Salman, V. B. Surya Prasath
2019 conf
BIBM
Shu Isaka, Hiroharu Kawanaka, Bruce J. Aronow, V. B. Surya Prasath
2019 J jnl
IEEE Trans. Image Process.
V. B. Surya Prasath, Rengarajan Pelapur, Guna Seetharaman, Kannappan Palaniappan
2019 ch.
Handbook of Multimedia Information Security
Nadeem Iqbal, Malik Muhammad Saad Missen, Nadeem Salamat, V. B. Surya Prasath
2019 J jnl
Symmetry
Mohammed Attik, Malik Muhammad Saad Missen, Mickaël Coustaty, Gyu Sang Choi, Fahd Saleh Alotaibi, Nadeem Akhtar, Muhammad Zeeshan Jhandir, V. B. Surya Prasath, Nadeem Salamat, Mujtaba Husnain
2019 C conf
APCC
Le Thi Thanh, Dang N. H. Thanh, Nguyen Minh Hue, V. B. Surya Prasath
2019 J jnl
New Rev. Hypermedia Multim.
Malik Muhammad Saad Missen, Amna Javed, Hina Asmat, Mariam Nosheen, Mickaël Coustaty, Nadeem Salamat, V. B. Surya Prasath
2018 J jnl
Inf.
Ahmad B. A. Hassanat, V. B. Surya Prasath, Mohammad Ali Abbadi, Salam Amer Abu-Qdari, Hossam Faris
2018 J jnl
Signal Image Video Process.
Ahmad B. A. Hassanat, V. B. Surya Prasath, Mouhammd Alkasassbeh, Ahmad S. Tarawneh, Ahmad Al-Shamailh
2018 J jnl
Int. J. Gaming Comput. Mediat. Simulations
Ahmad B. A. Hassanat, Ghada Awad Altarawneh, Ahmad S. Tarawneh, Hossam Faris, Mahmoud Bashir Alhasanat, Alex J. de Voogt, Baker Al-Rawashdeh, Mohammed Alshamaileh, V. B. Surya Prasath
2018 J jnl
New Rev. Hypermedia Multim.
Malik Muhammad Saad Missen, Mickaël Coustaty, Nadeem Salamat, V. B. Surya Prasath
2017 conf
BIBM
Rengarajan Pelapur, V. B. Surya Prasath, Juan Carlos Moreno, Michael M. Heck
2017 J jnl
Informatica (Slovenia)
Ahmad B. A. Hassanat, V. B. Surya Prasath, Khalil I. Mseidein, Mouhammd Mahmoud Al-Awadi, Awni Mansoar Hammouri
2017 J jnl
J. Digit. Imaging
V. B. Surya Prasath
2017 J jnl
Int. J. Biom.
Ahmad B. A. Hassanat, V. B. Surya Prasath, Bassam M. Al-Mahadeen, Samaher Madallah Moslem Alhasanat
2017 J jnl
CoRR
V. B. Surya Prasath, Haneen Arafat Abu Alfeilat, Omar Lasassmeh, Ahmad B. A. Hassanat
2017 conf
SoICT
V. B. Surya Prasath, Dang N. H. Thanh, Nguyen Hoang Hai, Ngo X. Cuong
2017 conf
BIBM
Asami Yonekura, Hiroharu Kawanaka, V. B. Surya Prasath, Bruce J. Aronow, Haruhiko Takase
2017 J jnl
Int. J. Fuzzy Log. Intell. Syst.
Li Chen, V. B. Surya Prasath
2017 B conf
ICIP
Yasmin M. Kassim, V. B. Surya Prasath, Olga V. Glinskii, Vladislav V. Glinsky, Virginia H. Huxley, Kannappan Palaniappan
2017 conf
BIBM
V. B. Surya Prasath, Hiroharu Kawanaka
2017 J jnl
J. Imaging
V. B. Surya Prasath
2017 J jnl
Informatica
V. B. Surya Prasath
2016 B conf
KES
Kiichi Fukuma, V. B. Surya Prasath, Hiroharu Kawanaka, Bruce J. Aronow, Haruhiko Takase
2016 B conf
FUZZ-IEEE
Kiichi Fukuma, V. B. Surya Prasath, Hiroharu Kawanaka, Bruce J. Aronow, Haruhiko Takase
2016 J jnl
Informatica (Slovenia)
V. B. Surya Prasath
2016 conf
AIPR
Urmila Sampathkumar, V. B. Surya Prasath, Sachin Meena, Kannappan Palaniappan
2016 J jnl
Int. J. Imaging Syst. Technol.
P. Kalavathi, V. B. Surya Prasath
2016 conf
AIPR
Yasmin M. Kassim, V. B. Surya Prasath, Olga V. Glinskii, Vladislav V. Glinsky, Virginia H. Huxley, Kannappan Palaniappan
2016 B conf
ICPR
V. B. Surya Prasath, Yasmin M. Kassim, Zakariya A. Oraibi, Jean-Baptiste Guiriec, Adel Hafiane, Guna Seetharaman, Kannappan Palaniappan
2016 J jnl
IEEE Access
Hadi Aliakbarpour, V. B. Surya Prasath, Kannappan Palaniappan, Guna Seetharaman, Jorge Dias
2016 J jnl
J. Digit. Imaging
P. Kalavathi, V. B. Surya Prasath
2016 conf
EMBC
Sachin Meena, V. B. Surya Prasath, Yasmin M. Kassim, Richard James Maude, Olga V. Glinskii, Vladislav V. Glinsky, Virginia H. Huxley, Kannappan Palaniappan
2016 J jnl
CoRR
V. B. Surya Prasath
2016 conf
EMBC
Yasmin M. Kassim, V. B. Surya Prasath, Rengarajan Pelapur, Olga V. Glinskii, Richard James Maude, Vladislav V. Glinsky, Virginia H. Huxley, Kannappan Palaniappan
2016 J jnl
J. Signal Process. Syst.
Juan Carlos Moreno, V. B. Surya Prasath, Gil Melfe Mateus Santos, Hugo Proença
2016 J jnl
CoRR
Henrique Tomaz Amaral-Silva, Luiz Otávio Murta Júnior, Paulo Mazzoncini de Azevedo Marques, Lauro Wichert-Ana, V. B. Surya Prasath, Colin Studholme
2016 conf
AIPR
Rumana Aktar, V. B. Surya Prasath, Hadi Aliakbarpour, Urmila Sampathkumar, Guna Seetharaman, Kannappan Palaniappan
2015 conf
SIRS
V. B. Surya Prasath, P. Kalavathi
2015 J jnl
CoRR
Juan Carlos Moreno, V. B. Surya Prasath, Dmitry Vorotnikov, Hugo Proença, Kannappan Palaniappan
2015 conf
BIBM
V. B. Surya Prasath, Kiichi Fukuma, Bruce J. Aronow, Hiroharu Kawanaka
2015 Misc conf
AIST
V. B. Surya Prasath, Radhakrishnan Delhibabu
2015 C conf
HealthCom
Kiichi Fukuma, Hiroharu Kawanaka, V. B. Surya Prasath, Bruce J. Aronow, Haruhiko Takase
2015 conf
SIRS
V. B. Surya Prasath, P. Kalavathi
2015 J jnl
IEEE Trans. Image Process.
V. B. Surya Prasath, Dmitry Vorotnikov, Rengarajan Pelapur, Shani Jose, Guna Seetharaman, Kannappan Palaniappan
2015 conf
ISBI
V. B. Surya Prasath, Rengarajan Pelapur, Olga V. Glinskii, Vladislav V. Glinsky, Virginia H. Huxley, Kannappan Palaniappan
2015 conf
MAICS
V. B. Surya Prasath
2015 J jnl
J. Sens. Actuator Networks
Hadi Aliakbarpour, V. B. Surya Prasath, Jorge Dias
2015 conf
BIBM
V. B. Surya Prasath, Hiroharu Kawanaka
2014 Misc conf
AIST
V. B. Surya Prasath, Radhakrishnan Delhibabu
2014 B conf
ICIP
Sachin Meena, V. B. Surya Prasath, Kannappan Palaniappan, Guna Seetharaman
2014 J jnl
Comput. Vis. Image Underst.
Juan Carlos Moreno, V. B. Surya Prasath, Hugo Proença, Kannappan Palaniappan
2014 conf
SEMCCO
V. B. Surya Prasath, Radhakrishnan Delhibabu
2014 conf
SEMCCO
V. B. Surya Prasath, Radhakrishnan Delhibabu
2014 conf
EMBC
Rengarajan Pelapur, V. B. Surya Prasath, Filiz Bunyak, Olga V. Glinskii, Vladislav V. Glinsky, Virginia H. Huxley, Kannappan Palaniappan
2014 J jnl
J. Math. Imaging Vis.
V. B. Surya Prasath, Dmitry Vorotnikov
2013 J jnl
CoRR
Juan Carlos Moreno, V. B. Surya Prasath, Hugo Proença, Kannappan Palaniappan
2013 J jnl
CoRR
V. B. Surya Prasath, Juan Carlos Moreno, Kannappan Palaniappan
2013 conf
NCVPRIPG
V. B. Surya Prasath, Juan Carlos Moreno
2013 J jnl
CoRR
V. B. Surya Prasath, Juan Carlos Moreno
2013 J jnl
CoRR
V. B. Surya Prasath, O. Haddad
2013 J jnl
CoRR
Juan Carlos Moreno, V. B. Surya Prasath, Gil Melfe Mateus Santos, Hugo Proença
2013 C conf
SIN
Juan Carlos Moreno, V. B. Surya Prasath, Hugo Proença
2012 conf
ICIAR (2)
Isabel N. Figueiredo, Juan Carlos Moreno, V. B. Surya Prasath, Pedro N. Figueiredo
2012 J jnl
Int. J. Image Graph.
V. B. Surya Prasath, Arindama Singh
2012 conf
EMBC
V. B. Surya Prasath, Isabel N. Figueiredo, Pedro N. Figueiredo, Kannappan Palaniappan
2012 conf
ICVGIP
V. B. Surya Prasath, Kannappan Palaniappan, Guna Seetharaman
2012 conf
CompIMAGE
Isabel N. Figueiredo, Juan Carlos Moreno, V. B. Surya Prasath
2011 J jnl
Int. J. Appl. Math. Comput. Sci.
V. B. Surya Prasath
2011 C conf
IGARSS
V. B. Surya Prasath
2010 J jnl
Appl. Math. Comput.
V. B. Surya Prasath, Arindama Singh
2010 J jnl
J. Appl. Math.
V. B. Surya Prasath, Arindama Singh
2009 conf
PReMI
V. B. Surya Prasath
2009 conf
ICAPR
V. B. Surya Prasath, Arindama Singh
2008 conf
ICETET
V. B. Surya Prasath, Arindama Singh
2008 conf
ICVGIP
V. B. Surya Prasath, Arindama Singh
redb/extractors/pe_extractors/pe_dotnet.py
← Index redb/extractors/pe_extractors/pe_dotnet.py python
import inspect
import pefile
from dotnetfile import DotNetPE

import base64
from hashlib import md5
from pprint import pprint

import magic
import pefile

from redb.extractors.enum import Tag
from redb.extractors.pe_extractor import PEExtractor
from redb.models.dataclasses import PEDotNet
from datetime import datetime, timezone
import json
from typing import Any


class PEDotNetExtractor(PEExtractor):

    def __init__(
        self,
        filepath,
        log,
        exporters=None,
        index_prefix=None,
        elastic_index=None,
        known_benign=False,
        known_malicious=False,
        pe=None,
    ):
        super().__init__(
            filepath,
            log,
            exporters,
            index_prefix,
            elastic_index,
            known_benign,
            known_malicious,
            pe,
        )
        # self.pe_features = None
        self.elastic_index = self.index_prefix + "-pe_dotnet"
        self.dotnet, self.error = self._generate_dotnetfile_object()
        self.log.debug(inspect.currentframe().f_code.co_name)

    def _decode_assembly_flags(self, flag_value):
        self.log.debug(inspect.currentframe().f_code.co_name)
        ASSEMBLY_FLAGS = {
            0x00000001: "COMIMAGE_FLAGS_ILONLY",
            0x00000002: "COMIMAGE_FLAGS_32BITREQUIRED",
            0x00000004: "COMIMAGE_FLAGS_IL_LIBRARY",
            0x00000008: "COMIMAGE_FLAGS_STRONGNAMESIGNED",
            0x00000010: "COMIMAGE_FLAGS_NATIVE_ENTRYPOINT",
            0x00010000: "COMIMAGE_FLAGS_TRACKDEBUGDATA",
            0x00020000: "COMIMAGE_FLAGS_32BITPREFERRED",
        }
        flags = []
        for bit, name in ASSEMBLY_FLAGS.items():
            if flag_value & bit:
                flags.append(name)
        return flags

    def _normalize_data(self, data):
        self.log.debug(inspect.currentframe().f_code.co_name)
        if isinstance(data, str):
            return {"value": data}
        return data

    def _compute_md5(self, data):
        self.log.debug(inspect.currentframe().f_code.co_name)
        if isinstance(data, str):
            # If it's a string, encode it to first
            return md5(data.encode("raw_unicode_escape")).hexdigest()
        elif not isinstance(data, bytes):
            # If it's neither string nor bytes, convert it to string and then to bytes
            return md5(str(data).encode("raw_unicode_escape")).hexdigest()
        else:
            return md5(data).hexdigest()

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

    def extract(self):
        self.log.debug(inspect.currentframe().f_code.co_name)
        metadata = {}

        if self.error:
            metadata["Corrupted"] = self.error.args[0]
            dotnet = PEDotNet(metadata)
            self.dotnet = dotnet  # Store for later use in prepare_export_data
            return dotnet  # Return the extracted data instead of exporting directly

        metadata["info"] = {}
        try:
            available_tables = self.dotnet.existent_metadata_tables()
        except Exception as e:
            self.log.error(f"Error getting metadata tables for {self.hash.sha256}: {e}")
            available_tables = []
            metadata["info"]["PotentiallyCorrupted"] = True

        # GUID extraction
        try:
            input_string = self.dotnet.guid_stream_guids[0].string_representation
            
            formatted_uuid = (
                f"{input_string[6:8]}{input_string[4:6]}{input_string[2:4]}{input_string[0:2]}"
                f"-{input_string[10:12]}{input_string[8:10]}"
                f"-{input_string[14:16]}{input_string[12:14]}"
                f"-{input_string[16:20]}"
                f"-{input_string[20:]}"
            )
            metadata["info"]["ModuleVersionID"] = formatted_uuid
        except Exception as e:
            self.log.error(f"Error extracting GUID for {self.hash.sha256}: {e}")

        # CLR Version
        try:
            metadata["info"]["CLRversion"] = self.dotnet.get_runtime_target_version()
        except Exception as e:
            self.log.error(f"Error getting CLR version for {self.hash.sha256}: {e}")

        # Module information
        try:
            if self.dotnet.metadata_table_exists("Module"):
                metadata["info"]["AssemblyModuleName"] = self.dotnet.Module.get_module_name()
        except Exception as e:
            self.log.error(f"Error getting module info for {self.hash.sha256}: {e}")

        # Basic properties
        try:
            metadata["info"].update({
                "IsNativeNgenImage": self.dotnet.is_native_image(),
                "IsMixedAssembly": self.dotnet.is_mixed_assembly(),
                "IsWindowsFormsApp": self.dotnet.is_windows_forms_app(),
                "EntryPointToken": self.dotnet.clr_header.EntryPointToken.value,
                "HasNativeEntryPoint": self.dotnet.has_native_entry_point(),
            })
        except Exception as e:
            self.log.error(f"Error getting basic properties for {self.hash.sha256}: {e}")

        # Assembly flags
        try:
            metadata["info"]["AssemblyFlags"] = self._decode_assembly_flags(
                self.dotnet.clr_header.Flags.value
            )
        except Exception as e:
            self.log.error(f"Error getting assembly flags for {self.hash.sha256}: {e}")

        # More Metadata/Info CLR Header
        try:
            metadata["info"]["NumOfStreams"] = self.dotnet.get_number_of_streams()
            # [TODO] The following two on VT are "RVA entry point"
            #  and "Resources va" respectively. To verify.
            metadata["info"][
                "ResourcesDirectoryAddress"
            ] = self.dotnet.clr_header.ResourcesDirectoryAddress.value
            metadata["info"][
                "ResourcesDirectorySize"
            ] = self.dotnet.clr_header.ResourcesDirectorySize.value
            metadata["info"][
                "StrongNameSignatureAddress"
            ] = self.dotnet.clr_header.StrongNameSignatureAddress.value
            metadata["info"][
                "StrongNameSignatureSize"
            ] = self.dotnet.clr_header.StrongNameSignatureSize.value
            metadata["info"][
                "CodeManagerTableAddress"
            ] = self.dotnet.clr_header.CodeManagerTableAddress.value
            metadata["info"][
                "CodeManagerTableSize"
            ] = self.dotnet.clr_header.CodeManagerTableSize.value
            metadata["info"][
                "VTableFixupsAddress"
            ] = self.dotnet.clr_header.VTableFixupsAddress.value
            metadata["info"][
                "VTableFixupsSize"
            ] = self.dotnet.clr_header.VTableFixupsSize.value
            metadata["info"][
                "ExportAddressTableJumpsAddress"
            ] = self.dotnet.clr_header.ExportAddressTableJumpsAddress.value
            metadata["info"][
                "ExportAddressTableJumpsSize"
            ] = self.dotnet.clr_header.ExportAddressTableJumpsSize.value
            metadata["info"][
                "ManagedNativeHeaderAddress"
            ] = self.dotnet.clr_header.ManagedNativeHeaderAddress.value
            metadata["info"][
                "ManagedNativeHeaderSize"
            ] = self.dotnet.clr_header.ManagedNativeHeaderSize.value
        except Exception as e:
            self.log.error(f"Error getting more metadata/info clr header for {self.hash.sha256}: {e}")

        # Streams section
        try:
            metadata["Streams"] = {}
            stream_names = self.dotnet.get_stream_names()
            for name in stream_names:
                indx = stream_names.index(name)
                stream_header = self.dotnet.dotnet_stream_headers[indx]
                stream_address = self.dotnet.dotnet_streams[indx].address
                metadata["Streams"][name] = {}
                metadata["Streams"][name]["raw_name"] = base64.b64encode(
                    stream_header.Name.value
                ).decode()
                # metadata["Streams"][name]["raw_name"] = name
                metadata["Streams"][name]["size"] = stream_header.Size.value
                # Retrieve the stream data directly using the given address and size
                stream_data = self.pe.get_data(stream_address, stream_header.Size.value)
                metadata["Streams"][name]["entropy"] = (
                    "%.2f" % pefile.SectionStructure.entropy_H(self.pe, stream_data)
                )
                metadata["Streams"][name]["md5"] = md5(stream_data).hexdigest()
        except Exception as e:
            self.log.error(f"Error getting streams for {self.hash.sha256}: {e}")

        # ManifestResource
        try:
            metadata["ManifestResource"] = ()
            if "ManifestResource" in available_tables:
                metadata["info"]["HasManifestResource"] = True
                metadata["ManifestResource"] = (
                    self.dotnet.ManifestResource.get_resource_names()
                )
        except Exception as e:
            self.log.error(f"Error getting manifest resource for {self.hash.sha256}: {e}")

        # ExternalAssemblyRef
        try:
            metadata["ExternalAssemblyRef"] = {}
            if "AssemblyRef" in available_tables:
                metadata["ExternalAssemblyRef"][
                    "names"
                ] = self.dotnet.AssemblyRef.get_assemblyref_names()
                metadata["ExternalAssemblyRef"][
                    "cultures"
                ] = self.dotnet.AssemblyRef.get_assemblyref_cultures()
        except Exception as e:
            self.log.error(f"Error getting external assembly ref for {self.hash.sha256}: {e}")

        # AssemblyData
        try:
            metadata["AssemblyData"] = {}
            if "Assembly" in available_tables:
                metadata["AssemblyData"][
                    "name"
                ] = self.dotnet.Assembly.get_assembly_name()
                # It's officially a one-row table, but there are ITW files with more than one row.
                # It stores information about the current assembly. It is documented in ECMA-335.
                assembly_table = self.dotnet.metadata_tables_lookup[
                    "Assembly"
                ].table_rows[0]
                metadata["AssemblyData"][
                    "MajorVersion"
                ] = assembly_table.MajorVersion.value
                metadata["AssemblyData"][
                    "MinorVersion"
                ] = assembly_table.MinorVersion.value
                metadata["AssemblyData"]["hashalgid"] = assembly_table.HashAlgId.value
                metadata["AssemblyData"][
                    "BuildNumber"
                ] = assembly_table.BuildNumber.value
                metadata["AssemblyData"][
                    "RevisionNumber"
                ] = assembly_table.RevisionNumber.value
                metadata["AssemblyData"][
                    "culture"
                ] = self.dotnet.Assembly.get_assembly_culture()
        except Exception as e:
            self.log.error(f"Error getting assembly data for {self.hash.sha256}: {e}")

        # TypeDef handling
        try:
            metadata["TypeDef"] = {}
            if "TypeDef" in available_tables:
                metadata["info"]["HasTypeDef"] = True
                # Get basic type definitions
                try:
                    # Get all types (ANY visibility)
                    type_defs = self.dotnet.TypeDef.get_type_names()
                    metadata["TypeDef"]["names"] = type_defs if type_defs else []
                    
                    # Get detailed type information with methods
                    types_with_methods = self.dotnet.TypeDef.get_type_names_with_methods()
                    if types_with_methods:
                        metadata["TypeDef"]["detailed"] = []
                        for type_info in types_with_methods:
                            type_data = {
                                "type": type_info.Type,
                                "namespace": type_info.Namespace,
                                "flags": type_info.Flags,
                                "methods": []
                            }
                            for method in type_info.Methods:
                                method_data = {
                                    "name": method.Name,
                                    "flags": method.Flags
                                }
                                if method.Signature:
                                    method_data["signature"] = {
                                        "parameters": method.Signature.get("parameter", []),
                                        "return_type": method.Signature.get("return", ""),
                                        "has_this": method.Signature.get("hasthis", False)
                                    }
                                type_data["methods"].append(method_data)
                            metadata["TypeDef"]["detailed"].append(type_data)
                except AttributeError as e:
                    self.log.warning(f"TypeDef table exists but attributes missing for {self.hash.sha256}: {e}")
                    # metadata["info"]["TypeDefParsingError"] = f"Missing attributes: {str(e)}"
                except Exception as e:
                    self.log.error(f"Error parsing TypeDef table for {self.hash.sha256}: {e}")
                    # metadata["info"]["TypeDefParsingError"] = str(e)
        except Exception as e:
            self.log.error(f"Error handling TypeDef section for {self.hash.sha256}: {e}")
            metadata["TypeDef"] = {"names": [], "detailed": []}
            # metadata["info"]["TypeDefParsingError"] = str(e)

        # ExternalUnmanagedModules
        try:
            metadata["ExternalUnmanagedModules"] = ()
            if "ModuleRef" in available_tables:
                metadata["info"]["HasModuleRef"] = True
                metadata["ExternalUnmanagedModules"] = (
                    self.dotnet.ModuleRef.get_unmanaged_module_names(
                        self.dotnet.Type.UnmanagedModules.RAW
                    )
                )
        except Exception as e:
            self.log.error(f"Error getting external unmanaged modules for {self.hash.sha256}: {e}")

        # ExternalUnmanagedMethods
        try:
            metadata["ExternalUnmanagedMethods"] = ()
            if "ImplMap" in available_tables:
                metadata["info"]["HasImplMap"] = True
                metadata["ExternalUnmanagedMethods"] = (
                    self.dotnet.ImplMap.get_unmanaged_functions()
                )
        except Exception as e:
            self.log.error(f"Error getting external unmanaged methods for {self.hash.sha256}: {e}")

        # Event
        try:
            metadata["Event"] = ()
            if "Event" in available_tables:
                metadata["info"]["HasEvent"] = True
                metadata["Event"] = self.dotnet.Event.get_event_names()
        except Exception as e:
            self.log.error(f"Error getting event for {self.hash.sha256}: {e}")

        # Resources
        try:
            metadata["Resources"] = []
            if self.dotnet.has_resources():
                tmp_resources_list = []
                resource_data = self.dotnet.get_resources()
                for data in resource_data:
                    tmp_dict = {}
                    for resource_item in data.items():
                        if resource_item[0] == "SubResources":
                            if resource_item[1]:
                                tmp_dict["SubResources"] = {}
                                for sub_resource in resource_item[1]:
                                    for sub_resource_item in sub_resource.items():
                                        if sub_resource_item[0] == "Data":
                                            # Check if data is a sequence type that supports len()
                                            if hasattr(sub_resource_item[1], '__len__') and len(sub_resource_item[1]) > 100:
                                                tmp_dict["SubResources"]["Data"] = {}
                                                try:
                                                    # tmp_dict["SubResources"]["Data"][
                                                    #     "md5"
                                                    # ] = md5(
                                                    #     sub_resource_item[1].encode()
                                                    # ).hexdigest()
                                                    tmp_dict["SubResources"]["Data"][
                                                        "md5"
                                                    ] = self._compute_md5(
                                                        sub_resource_item[1]
                                                    )
                                                except Exception as e:
                                                    self.log.error(
                                                        f"Error in dotnet resources"
                                                        f" extraction {self.hash.sha256}: {e}"
                                                    )
                                                guess = magic.from_buffer(
                                                    sub_resource_item[1], mime=True
                                                )
                                                tmp_dict["SubResources"]["Data"][
                                                    "MimeType"
                                                ] = (guess if guess else None)
                                            else:
                                                normalized_data = self._normalize_data(
                                                    sub_resource_item[1].decode()
                                                    if isinstance(
                                                        sub_resource_item[1], bytes
                                                    )
                                                    else sub_resource_item[1]
                                                )
                                                tmp_dict["SubResources"][
                                                    sub_resource_item[0]
                                                ] = normalized_data
                                        else:
                                            tmp_dict["SubResources"][
                                                sub_resource_item[0]
                                            ] = (
                                                sub_resource_item[1].decode()
                                                if isinstance(
                                                    sub_resource_item[1], bytes
                                                )
                                                else sub_resource_item[1]
                                            )
                        elif resource_item[0] == "Data":
                            # Check if data is a sequence type that supports len()
                            if hasattr(resource_item[1], '__len__') and len(resource_item[1]) > 100:
                                tmp_dict["Data"] = {}
                                tmp_dict["Data"]["md5"] = self._compute_md5(
                                    resource_item[1]
                                )
                                guess = magic.from_buffer(resource_item[1], mime=True)
                                tmp_dict["Data"]["MimeType"] = guess if guess else None
                            else:
                                normalized_data = self._normalize_data(
                                    resource_item[1].decode()
                                    if isinstance(resource_item[1], bytes)
                                    else resource_item[1]
                                )
                                tmp_dict["Data"] = normalized_data
                        else:
                            tmp_dict[resource_item[0]] = (
                                resource_item[1].decode()
                                if isinstance(resource_item[1], bytes)
                                else resource_item[1]
                            )
                    tmp_resources_list.append(tmp_dict)
                metadata["Resources"] = tmp_resources_list
        except Exception as e:
            self.log.error(f"Error getting resources for {self.hash.sha256}: {e}")
            metadata["Resources"] = []  # Ensure we always have a valid list even on error

        dotnet = PEDotNet(metadata)
        self.dotnet = dotnet  # Store for later use in prepare_export_data
        return dotnet  # Return the extracted data instead of exporting directly


    def prepare_export_data(self, exporter_type: str) -> Any:
        if exporter_type == "ElasticsearchExporter":
            return self.dotnet
        elif exporter_type == "ClickHouseExporter":
            # Convert metadata to JSON string
            metadata_json = json.dumps(self.dotnet.dotnet)
            
            data = [[
                self.sha256,
                self.md5,
                self.sha1,
                metadata_json,
                datetime.now(timezone.utc)
            ]]
            
            column_names = [
                'sha256', 'md5', 'sha1', 'dotnet', 'analysis_date'
            ]
            
            if not data:
                return None

            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_pe_dotnet"