Ramin Homayouni

29 papers Journal 26Unranked 3
YearRankTypeTitle / Venue / Authors
2024 J jnl
BMC Medical Informatics Decis. Mak.
Sujoy Roy, Shane Morrell, Lili Zhao, Ramin Homayouni
2023 J jnl
Frontiers Big Data
Ramin Homayouni, Prashanti Manda, Aik Choon Tan, Zhaohui S. Qin
2022 J jnl
Frontiers Artif. Intell.
Ramin Homayouni, Huixiao Hong, Prashanti Manda, Bindu Nanduri, Inimary T. Toby
2020 J jnl
BMC Bioinform.
Jonathan D. Wren, Yongsheng Bai, Zhaohui S. Qin, Da Yan, Ramin Homayouni
2019 J jnl
BMC Bioinform.
Sujoy Roy, Kazi I. Zaman, Robert W. Williams, Ramin Homayouni
2019 J jnl
BMC Bioinform.
Jonathan D. Wren, Robert J. Doerksen, Inimary T. Toby, Bindu Nanduri, Ramin Homayouni, Prashanti Manda, Shraddha Thakkar
2019 J jnl
Informatics
Oguz Akbilgic, Ramin Homayouni, Kevin Heinrich, Max Raymond Langham, Robert Lowell Davis
2017 J jnl
Commun. Stat. Simul. Comput.
Shengtong Han, Hongmei Zhang, Ramin Homayouni, Wilfried Karmaus
2017 J jnl
BMC Bioinform.
Eric C. Rouchka, Julia H. Chariker, David Tieri, Juw Won Park, Shreedharkumar D. Rajurkar, Vikas Singh, Nishchal K. Verma, Yan Cui, Mark L. Farman, Bradford Condon, Neil Moore, Jerzy W. Jaromczyk, Jolanta Jaromczyk, Daniel R. Harris, Patrick Calie, Eun Kyong Shin, Robert L. Davis, Arash Shaban-Nejad, Joshua M. Mitchell, Robert M. Flight, Qing Jun Wang, Richard M. Higashi, Teresa W.-M. Fan, Andrew N. Lane, Hunter N. B. Moseley, Liangqun Lu, Bernie J. Daigle, Xi Chen, Andrey Smelter, Li Chen, Bailey K. Phan, Nathaniel J. Serpico, Ethan G. Toney, Caroline E. Melton, Jennifer R. Mandel, Bernie J. Daigle Jr., Hao Chen, Kazi I. Zaman, Ramin Homayouni, Patrick J. Trainor, Samantha M. Carlisle, Andrew P. DeFilippis, Shesh N. Rai
2017 J jnl
BMC Bioinform.
Jonathan D. Wren, Mikhail G. Dozmorov, Inimary T. Toby, Bindu Nanduri, Ramin Homayouni, Prashanti Manda, Shraddha Thakkar
2016 J jnl
BMC Bioinform.
Sujoy Roy, Brandon C. Curry, Behrouz Madahian, Ramin Homayouni
2015 J jnl
BMC Bioinform.
Behrouz Madahian, Sujoy Roy, Dale Bowman, Lih-Yuan Deng, Ramin Homayouni
2015 J jnl
BMC Bioinform.
Behrouz Madahian, Lih-Yuan Deng, Ramin Homayouni
2014 J jnl
BMC Bioinform.
Behrouz Madahian, Lih-Yuan Deng, Ramin Homayouni
2012 J jnl
BMC Bioinform.
Behrouz Madahian, Robert C. Klesges, Lisa Klesges, Ramin Homayouni
2011 J jnl
BMC Bioinform.
Laasya Vadlamudi, Lynn A. Jones, Ramin Homayouni
2011 J jnl
BMC Bioinform.
Sujoy Roy, Kevin Heinrich, Vinhthuy Phan, Michael W. Berry, Ramin Homayouni
2011 conf
BIBM Workshops
Lijing Xu, Ramin Homayouni, E. Olusegun George
2011 conf
BIBM
Nicholas A. Furlotte, Lijing Xu, Robert W. Williams, Ramin Homayouni
2011 J jnl
BMC Bioinform.
Eric C. Rouchka, Robert M. Flight, Ramin Homayouni
2011 conf
BIBM Workshops
Behrouz Madahian, Lisa Klesges, Ramin Homayouni
2010 J jnl
BMC Bioinform.
Elina Tjioe, Michael W. Berry, Ramin Homayouni
2010 J jnl
BMC Bioinform.
Teeradache Viangteeravat, Ian M. Brooks, Somchan Vuthipadadon, Emin Kuscu, Naga Nagisetty, Ebony Smith, Ramin Homayouni, Chanchai McDonald
2009 J jnl
BMC Bioinform.
Mohammed Yeasin, Haritha Malempati, Ramin Homayouni, Mohammad S. Sorower
2009 J jnl
BMC Bioinform.
Sujoy Roy, Lijing Xu, Ramin Homayouni
2009 J jnl
BMC Bioinform.
Teeradache Viangteeravat, Ian M. Brooks, Somchan Vuthipadadon, Eunice Y. Huang, Ebony Smith, Ramin Homayouni, Chanchai McDonald
2008 J jnl
Comput. Intell. Neurosci.
Kevin Heinrich, Michael W. Berry, Ramin Homayouni
2008 J jnl
BMC Bioinform.
Elina Tjioe, Michael W. Berry, Ramin Homayouni, Kevin Heinrich
2005 J jnl
Bioinform.
Ramin Homayouni, Kevin Heinrich, Lai Wei, Michael W. Berry
redb/extractors/pe_extractor.py
← Index redb/extractors/pe_extractor.py python
import logging
from abc import ABCMeta, abstractmethod
import inspect

import magic
import pefile
from dotnetfile import DotNetPE

from redb.extractors.extractor import Extractor

logger = logging.getLogger(__name__)


@abstractmethod
class PEExtractor(Extractor, metaclass=ABCMeta):

    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
        )
        self.pe = pe if pe else self._generate_pefile_object()
        self.dotnet = None

    def _generate_pefile_object(self):
        pe = None
        try:
            pe = pefile.PE(self.filepath)
            if not pe:
                raise pefile.PEFormatError("Empty file?")
        except pefile.PEFormatError as e:
            self.log.error(f"Format error {self.hash.sha256} Full error : {e}")
        return pe

    def _generate_dotnetfile_object(self):
        self.log.debug(inspect.currentframe().f_code.co_name)
        dotnet = None
        error = None
        try:
            dotnet = DotNetPE(self.filepath)
            if not dotnet:
                raise Exception("Empty file?")
        except Exception as e:
            self.log.error(
                f"Format error dotnet file {self.hash.sha256} Full error : {e}"
            )
            error = e
        return dotnet, error

    def _check_dotnet(self):
        try:
            file_type = magic.from_buffer(self.binary)
            if ".Net" in file_type:
                return True
            for entry in self.pe.OPTIONAL_HEADER.DATA_DIRECTORY:
                # IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR is typically 14
                if (
                    entry.name == "IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR"
                    and entry.Size > 0
                ):
                    return True
            return False
        except AttributeError as e:
            self.log.error(
                f"AttributeError error dotnet file {self.hash.sha256} Full error : {e}"
            )
            return False

    def _is_signed(self):
        address = self.pe.OPTIONAL_HEADER.DATA_DIRECTORY[
            pefile.DIRECTORY_ENTRY["IMAGE_DIRECTORY_ENTRY_SECURITY"]
        ].VirtualAddress
        if address == 0:
            return False
        return True

    def _has_overlay(self):
        return bool(self.pe.get_overlay())