Venkatasubramanian Kalpathy Venkiteswaran

17 papers A 4Journal 8Unranked 5
YearRankTypeTitle / Venue / Authors
2025 A conf
Conference on Designing Interactive Systems (Companion Volume)
Amar Mohindra, Renzo Jansema, Venkatasubramanian Kalpathy Venkiteswaran, Amy Winters
2024 J jnl
Adv. Intell. Syst.
Theodosia Lourdes Thomas, Jonathan Bos, Juan J. Huaroto, Venkatasubramanian Kalpathy Venkiteswaran, Sarthak Misra
2024 conf
BioRob
Venkatasubramanian Kalpathy Venkiteswaran, Jurrien Bos, Dimple Dannana, Ali Sadeghi
2024 conf
MeMeA
Francesca De Tommasi, Michiel Richter, Livio D'Alvia, Massimiliano Carassiti, Eduardo Palermo, Zaccaria Del Prete, Emiliano Schena, Sarthak Misra, Venkatasubramanian Kalpathy Venkiteswaran
2023 J jnl
IEEE Robotics Autom. Lett.
Peter Lloyd, Theodosia Lourdes Thomas, Venkatasubramanian Kalpathy Venkiteswaran, Giovanni Pittiglio, James Henry Chandler, Pietro Valdastri, Sarthak Misra
2023 J jnl
IEEE Robotics Autom. Lett.
Michiel Richter, Venkatasubramanian Kalpathy Venkiteswaran, Sarthak Misra
2022 J jnl
IEEE Trans. Robotics
Jakub Sikorski, Christoff M. Heunis, Rafic Obeid, Venkatasubramanian Kalpathy Venkiteswaran, Sarthak Misra
2022 conf
RoboSoft
Gijsbert Michiel van Vliet, Sarthak Misra, Venkatasubramanian Kalpathy Venkiteswaran
2022 J jnl
IEEE Robotics Autom. Lett.
Chen Wang, Venkata Rithwick Puranam, Sarthak Misra, Venkatasubramanian Kalpathy Venkiteswaran
2022 A conf
IROS
Artur João Anjos de Oliveira, Jorge Batista, Sarthak Misra, Venkatasubramanian Kalpathy Venkiteswaran
2021 conf
AIM
Venkatasubramanian Kalpathy Venkiteswaran, Jesus Jimenez Palao, Sarthak Misra
2021 J jnl
Frontiers Robotics AI
Abbas Tariverdi, Venkatasubramanian Kalpathy Venkiteswaran, Michiel Richter, Ole Jakob Elle, Jim Tørresen, Kim Mathiassen, Sarthak Misra, Ørjan Grøttem Martinsen
2021 J jnl
IEEE Robotics Autom. Lett.
Michiel Richter, Venkatasubramanian Kalpathy Venkiteswaran, Sarthak Misra
2020 A conf
IROS
Giovanni Pittiglio, James Henry Chandler, Michiel Richter, Venkatasubramanian Kalpathy Venkiteswaran, Sarthak Misra, Pietro Valdastri
2020 A conf
IROS
Venkatasubramanian Kalpathy Venkiteswaran, Sarthak Misra
2019 J jnl
IEEE Robotics Autom. Lett.
Venkatasubramanian Kalpathy Venkiteswaran, Luis Fernando Pena Samaniego, Jakub Sikorski, Sarthak Misra
2018 conf
ROBIO
Venkatasubramanian Kalpathy Venkiteswaran, Ruiqi Hu, Haijun Su
redb/extractors/pe_extractors/pe_overlay.py
← Index redb/extractors/pe_extractors/pe_overlay.py python
from hashlib import md5, sha1, sha256
import inspect
from datetime import datetime, timezone
from typing import Any

import magic
from magika import Magika

from redb.extractors.enum import Tag
from redb.extractors.pe_extractor import PEExtractor
from redb.models.dataclasses import PEOverlay


class PEOverlayExtractor(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.elastic_index = self.index_prefix + "-pe_overlay"
        self.log.debug(inspect.currentframe().f_code.co_name)

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

    def _extract_pe_overlay(self):
        self.log.debug(inspect.currentframe().f_code.co_name)
        overlay = self.pe.get_overlay()
        if overlay:
            return PEOverlay(
                _id=sha256(overlay).hexdigest(),
                overlay_size=len(overlay),
                overlay_entropy=self.calculate_entropy(overlay),
                overlay_offset=self.pe.get_overlay_data_start_offset(),
                overlay_mimetype=magic.from_buffer(overlay, mime=True),
                overlay_type=magic.from_buffer(overlay),
                overlay_magika=Magika().identify_bytes(overlay).output.ct_label,
                overlay_sha256=sha256(overlay).hexdigest(),
                overlay_sha1=sha1(overlay).hexdigest(),
                overlay_md5=md5(overlay).hexdigest(),
            )
        return None

    def extract(self):
        try:
            self.log.debug(inspect.currentframe().f_code.co_name)
            overlay = self._extract_pe_overlay()
            # self.export_to_elastic([overlay])  # Let the exporters handle this
            return overlay
        except Exception as e:
            self.log.error(f"Error extracting PE overlay: {e}")
            return None

    def prepare_export_data(self, exporter_type: str) -> Any:
        if exporter_type == "ElasticsearchExporter":
            return self.extract()
        elif exporter_type == "ClickHouseExporter":
            overlay = self.extract()
            if overlay is None:
                return None
            
            data = []
            current_time = datetime.now(timezone.utc)
            
            data.append([
                self.sha256,              # sha256
                self.md5,                 # md5
                self.sha1,                # sha1
                overlay.overlay_size,     # overlay_size
                overlay.overlay_entropy,  # overlay_entropy
                overlay.overlay_offset,   # overlay_offset
                overlay.overlay_mimetype, # overlay_mimetype
                overlay.overlay_type,     # overlay_type
                overlay.overlay_magika,   # overlay_magika
                overlay.overlay_sha256,   # overlay_sha256
                overlay.overlay_sha1,     # overlay_sha1
                overlay.overlay_md5,      # overlay_md5
                current_time             # analysis_date
            ])
            
            column_names = [
                'sha256', 'md5', 'sha1', 'overlay_size', 'overlay_entropy',
                'overlay_offset', 'overlay_mimetype', 'overlay_type', 'overlay_magika',
                'overlay_sha256', 'overlay_sha1', 'overlay_md5',
                'analysis_date'
            ]
            
            if not data:
                return None

            column_type_names = [
                'FixedString(64)', 'FixedString(32)', 'FixedString(40)',
                'UInt64', 'Float64', 'UInt64',
                'LowCardinality(String)', 'LowCardinality(String)', 'LowCardinality(String)',
                'FixedString(64)', 'FixedString(40)', 'FixedString(32)',
                'DateTime64(3, \'UTC\')'
            ]

            return (data, column_names, column_type_names)

    def get_clickhouse_table(self) -> str:
        return "redb_pe_overlays"