Oxana Smirnova

18 papers Misc 1Journal 9Unranked 8
YearRankTypeTitle / Venue / Authors
2019 conf
BlackSeaCom
Nikolay Shilov, Oxana Smirnova, Polina Morozova, Nikolay Turov, Maksim Shchekotov, Nikolay Teslya
2013 conf
BIODEVICES
Dmitry A. Rogatkin, Oxana Smirnova
2011 conf
eScience
Oxana Smirnova, Gerd Behrmann, Michael Grønager, Daniel Johansson, Josva Kleist, Aleksandr Konstantinov, Balázs Kónya, Henrik Thostrup Jensen
2010 conf
IPDPS Workshops
Morris Riedel, M. Shahbaz Memon, A. Shiraz Memon, Achim Streit, Felix Wolf, Thomas Lippert, Balázs Kónya, Oxana Smirnova, Aleksandr Konstantinov, Luigi Zangrando, Moreno Marzolla, Johannes Watzl, Dieter Kranzlmüller
2010 J jnl
Ann. des Télécommunications
Owen Appleton, David G. Cameron, Jozef Cernák, Péter Dóbé, Mattias Ellert, Thomas Frågåt, Michael Grønager, Daniel Johansson, Johan Jönemo, Josva Kleist, Marek Kocan, Aleksandr Konstantinov, Balázs Kónya, Iván Márton, Bjarte Mohn, Steffen Möller, Henning Müller, Zsombor Nagy, Jon K. Nilsen, Farid Ould-Saada, Katarina Pajchel, Weizhong Qiang, Alexander L. Read, Peter Rosendahl, Gábor Röczei, Martin Savko, Martin Skou Andersen, Oxana Smirnova, Péter Stefán, Ferenc Szalai, Adrian Taga, Salman Zubair Toor, Anders Wäänänen, Xin Zhou
2009 J jnl
Concurr. Comput. Pract. Exp.
Morris Riedel, Erwin Laure, Thomas Soddemann, Laurence Field, John-Paul Navarro, James Casey, Maarten Litmaath, Jean-Philippe Baud, Birger Koblitz, Charlie Catlett, Dane Skow, Cindy Zheng, Philip M. Papadopoulos, Mason J. Katz, Neha Sharma, Oxana Smirnova, Balázs Kónya, Peter W. Arzberger, Frank Würthwein, Abhishek Singh Rana, Terrence Martin, M. Wan, Von Welch, Tony Rimovsky, Steven J. Newhouse, Andrea Vanni, Yoshio Tanaka, Yusuke Tanimura, Tsutomu Ikegami, David Abramson, Colin Enticott, Graham Jenkins, Ruth Pordes, Steven Timm, Gidon Moont, Mona Aggarwal, D. Colling, Olivier van der Aa, Alex Sim, Vijaya Natarajan, Arie Shoshani, Junmin Gu, S. Chen, Gerson Galang, Riccardo Zappi, Luca Magnoni, Vincenzo Ciaschini, Michele Pace, Valerio Venturi, Moreno Marzolla, Paolo Andreetto, Robert Cowles, Shaowen Wang, Yuji Saeki, Hitoshi Sato, Satoshi Matsuoka, Putchong Uthayopas, Somsak Sriprayoonsakul, Oscar Koeroo, Matthew Viljoen, Laura Pearlman, Stephen Pickles, David Wallom, Glenn Moloney, Jerome Lauret, Jim Marsteller, Paul Sheldon, Surya Pathak, Shaun De Witt, Jirí Mencák, Jens Jensen, Matt Hodges, Derek Ross, Sugree Phatanapherom, Gilbert Netzer, Anders Rhod Gregersen, Mike Jones, Péter Kacsuk, Achim Streit, Daniel Mallmann, Felix Wolf, Thomas Lippert, Thierry Delaitre, Eduardo Huedo, Neil Geddes
2007 J jnl
Future Gener. Comput. Syst.
Mattias Ellert, Michael Grønager, Aleksandr Konstantinov, Balázs Kónya, J. Lindemann, I. Livenson, Jakob Langgaard Nielsen, Marko Niinimäki, Oxana Smirnova, Anders Wäänänen
2006 conf
PARA
Oxana Smirnova
2006 conf
PARA
Paula Eerola, Tord Ekelöf, Mattias Ellert, Michael Grønager, John Renner Hansen, Sigve Haug, Josva Kleist, Aleksandr Konstantinov, Balázs Kónya, Farid Ould-Saada, Oxana Smirnova, Ferenc Szalai, Anders Wäänänen
2004 J jnl
J. Grid Comput.
Stephen Burke, F. Harris, Ian Stokes-Rees, I. Augustin, F. Carminati, Joel Closier, Eric van Herwijnen, Andrea Sciabà, D. Boutigny, J. J. Blaising, Vincent Garonne, Andrei Tsaregorodtsev, P. Capiluppi, Alessandra Fanfani, Claudio Grandi, Roberto Barbera, Eleonora Luppi, Guido Negri, Laura Perini, Silvia Resconi, Mario Reale, Alessandro De Salvo, Stefano Bagnasco, Piergiorgio Cerello, K. Bos, David L. Groep, W. van Leeuwen, Jeffrey Templon, Oxana Smirnova, Owen J. E. Maroney, Frederic Brochu, D. Colling
2003 J jnl
IEEE Internet Comput.
Paula Eerola, Balázs Kónya, Oxana Smirnova, Tord Ekelöf, Mattias Ellert, John Renner Hansen, Jakob Langgaard Nielsen, Anders Wäänänen, Aleksandr Konstantinov, Farid Ould-Saada
2003 J jnl
CoRR
I. Augustin, F. Carminati, Joel Closier, Eric van Herwijnen, J. J. Blaising, D. Boutigny, C. Charlot, Vincent Garonne, Andrei Tsaregorodtsev, K. Bos, Jeffrey Templon, P. Capiluppi, Alessandra Fanfani, Roberto Barbera, Guido Negri, Laura Perini, Silvia Resconi, Mario Sitta, Mario Reale, Domenico Vicinanza, Stefano Bagnasco, Piergiorgio Cerello, Andrea Sciabà, Oxana Smirnova, D. Colling, F. Harris, Stephen Burke
2003 Misc conf
International Conference on Computational Science
Oxana Smirnova, Paula Eerola, Tord Ekelöf, Mattias Ellert, John Renner Hansen, Aleksandr Konstantinov, Balázs Kónya, Jakob Langgaard Nielsen, Farid Ould-Saada, Anders Wäänänen
2003 J jnl
CoRR
Paula Eerola, Tord Ekelöf, Mattias Ellert, John Renner Hansen, Aleksandr Konstantinov, Balázs Kónya, Jakob Langgaard Nielsen, Farid Ould-Saada, Oxana Smirnova, Anders Wäänänen
2003 conf
GRID
Paula Eerola, Balázs Kónya, Oxana Smirnova, Tord Ekelöf, Mattias Ellert, John Renner Hansen, Jakob Langgaard Nielsen, Anders Wäänänen, Aleksandr Konstantinov, Juha Herrala, Miika Tuisku, T. Myklebust, Farid Ould-Saada, Brian Vinter
2002 J jnl
CoRR
Anders Wäänänen, Mattias Ellert, Aleksandr Konstantinov, Balázs Kónya, Oxana Smirnova
2002 conf
PARA
Anders Wäänänen, Mattias Ellert, Aleksandr Konstantinov, Balázs Kónya, Oxana Smirnova
2002 J jnl
CoRR
Mattias Ellert, Aleksandr Konstantinov, Balázs Kónya, Oxana Smirnova, Anders Wäänänen
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