Vincent Zoete

29 papers Journal 29
YearRankTypeTitle / Venue / Authors
2023 J jnl
J. Chem. Inf. Model.
Ute F. Röhrig, Mathilde Goullieux, Marine Bugnon, Vincent Zoete
2023 J jnl
J. Chem. Inf. Model.
Marine Bugnon, Mathilde Goullieux, Ute F. Röhrig, Marta A. S. Perez, Antoine Daina, Olivier Michielin, Vincent Zoete
2023 J jnl
J. Chem. Inf. Model.
Mathilde Goullieux, Vincent Zoete, Ute F. Röhrig
2022 J jnl
Nucleic Acids Res.
Alessandro Cuozzo, Antoine Daina, Marta A. S. Perez, Olivier Michielin, Vincent Zoete
2021 J jnl
Briefings Bioinform.
Vaishali P. Waman, Neeladri Sen, Mihaly Varadi, Antoine Daina, Shoshana J. Wodak, Vincent Zoete, Sameer Velankar, Christine A. Orengo
2019 J jnl
J. Chem. Inf. Model.
Krystel El Hage, Vincent Zoete
2019 J jnl
Nucleic Acids Res.
Antoine Daina, Olivier Michielin, Vincent Zoete
2017 J jnl
J. Chem. Inf. Model.
Prasad Chaskar, Vincent Zoete, Ute F. Röhrig
2016 J jnl
J. Comput. Chem.
Vincent Zoete, Thierry Schüpbach, Christophe Bovigny, Prasad Chaskar, Antoine Daina, Ute F. Röhrig, Olivier Michielin
2016 J jnl
J. Chem. Inf. Model.
Vincent Zoete, Antoine Daina, Christophe Bovigny, Olivier Michielin
2015 J jnl
Bioinform.
David Gfeller, Vincent Zoete
2014 J jnl
Nucleic Acids Res.
Heinz Stockinger, Adrian M. Altenhoff, Konstantin Arnold, Amos Bairoch, Frederic B. Bastian, Sven Bergmann, Lydie Bougueleret, Philipp Bucher, Mauro Delorenzi, Lydie Lane, Philippe Le Mercier, Frédérique Lisacek, Olivier Michielin, Patricia M. Palagi, Jacques Rougemont, Torsten Schwede, Christian von Mering, Erik van Nimwegen, Daniel Walther, Ioannis Xenarios, Mihaela Zavolan, Evgeny M. Zdobnov, Vincent Zoete, Ron D. Appel
2014 J jnl
Nucleic Acids Res.
David Gfeller, Aurélien Grosdidier, Matthias Wirth, Antoine Daina, Olivier Michielin, Vincent Zoete
2014 J jnl
J. Chem. Inf. Model.
Prasad Chaskar, Vincent Zoete, Ute F. Röhrig
2014 J jnl
J. Chem. Inf. Model.
Antoine Daina, Olivier Michielin, Vincent Zoete
2013 J jnl
J. Comput. Aided Mol. Des.
Matthias Wirth, Andrea Volkamer, Vincent Zoete, Friedrich Rippmann, Olivier Michielin, Matthias Rarey, Wolfgang H. B. Sauer
2013 J jnl
Bioinform.
David Gfeller, Olivier Michielin, Vincent Zoete
2013 J jnl
Nucleic Acids Res.
Matthias Wirth, Vincent Zoete, Olivier Michielin, Wolfgang H. B. Sauer
2013 J jnl
Nucleic Acids Res.
David Gfeller, Olivier Michielin, Vincent Zoete
2012 J jnl
BMC Bioinform.
Maria U. Johansson, Vincent Zoete, Olivier Michielin, Nicolas Guex
2012 J jnl
J. Comput. Chem.
David Gfeller, Olivier Michielin, Vincent Zoete
2011 J jnl
J. Comput. Chem.
Aurélien Grosdidier, Vincent Zoete, Olivier Michielin
2011 J jnl
Nucleic Acids Res.
Aurélien Grosdidier, Vincent Zoete, Olivier Michielin
2011 J jnl
J. Comput. Chem.
Vincent Zoete, Michel A. Cuendet, Aurélien Grosdidier, Olivier Michielin
2010 J jnl
J. Comput. Chem.
Thierry Schüpbach, Vincent Zoete, Brice Tsakam-Sotché, Olivier Michielin
2009 J jnl
J. Comput. Chem.
Aurélien Grosdidier, Vincent Zoete, Olivier Michielin
2009 J jnl
J. Comput. Chem.
Ute F. Röhrig, Aurélien Grosdidier, Vincent Zoete, Olivier Michielin
2006 J jnl
J. Comput. Chem.
Vincent Zoete, Markus Meuwly
2003 J jnl
J. Comput. Aided Mol. Des.
Vincent Zoete, Olivier Michielin, Martin Karplus
redb/extractors/pe_extractors/pe_sections.py
← Index redb/extractors/pe_extractors/pe_sections.py python
import base64
import hashlib
import inspect
from redb.extractors.enum import Tag
from redb.extractors.pe_extractor import PEExtractor
from redb.models.dataclasses import PESection
from datetime import datetime, timezone
from typing import Any


class PESectionExtractor(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_sections"
        self.log.debug(inspect.currentframe().f_code.co_name)

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

    def _extract_sections(self):
        self.log.debug(inspect.currentframe().f_code.co_name)
        sections = []
        for section in self.pe.sections:
            try:
                name = self.process_binary_string(section.Name)
            except Exception as e:
                name = "UnableToDecode"
                self.log.warning(
                    f'Unable to store section Name "{section.Name}" for {self.hash.sha256}'
                    f" exception {e}"
                )
            sec_sha256 = section.get_hash_sha256()
            sec_md5 = section.get_hash_md5()
            # sec_entropy = "%.2f" % section.get_entropy()
            sec_entropy = section.get_entropy()
            pe_section = PESection(
                _id=hashlib.sha256(
                    name.encode()
                ).hexdigest(),  # usecase 8e035beb02a411f8a9e92d4cf184ad34f52bbd0a81a50c222cdd4706e4e45104, all section have same sha256
                section_name=name,
                section_name_b64=base64.b64encode(
                    section.Name.rstrip(b'\x00')
                ).decode(),  # base64.b64decode(b64) to decode
                section_v_addr=section.VirtualAddress,
                section_v_addr_hex=hex(section.VirtualAddress),
                section_v_size=section.Misc_VirtualSize,
                section_size=section.SizeOfRawData,
                section_pointer_to_raw_data=hex(section.PointerToRawData),
                section_md5=sec_md5,
                section_sha256=sec_sha256,
                section_entropy=sec_entropy,
            )
            sections.append(pe_section)
        return sections

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

    def prepare_export_data(self, exporter_type: str) -> Any:
        if exporter_type == "ElasticsearchExporter":
            return self.extract()
        elif exporter_type == "ClickHouseExporter":
            sections = self.extract()
            if sections is None:
                return None
            
            data = []
            current_time = datetime.now(timezone.utc)
            
            for section in sections:
                data.append([
                    self.sha256,                          # sha256
                    self.md5,                             # md5
                    self.sha1,                            # sha1
                    section.section_name,                 # section_name
                    section.section_name_b64,             # section_name_b64
                    section.section_entropy,              # section_entropy
                    section.section_sha256,               # section_sha256
                    section.section_md5,                  # section_md5
                    section.section_size,                 # section_size
                    section.section_v_addr,               # section_v_addr
                    section.section_v_size,               # section_v_size
                    int(section.section_pointer_to_raw_data, 16),  # section_pointer_to_raw_data - convert from hex
                    current_time                          # analysis_date
                ])
            
            column_names = [
                'sha256', 'md5', 'sha1', 'section_name', 'section_name_b64',
                'section_entropy', 'section_sha256', 'section_md5', 'section_size',
                'section_v_addr', 'section_v_size', 'section_pointer_to_raw_data',
                'analysis_date'
            ]
            
            if not data:
                return None

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

            return (data, column_names, column_type_names)

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