Ing Ren Tsang

46 papers A 1B 26C 2Misc 3Journal 8Unranked 6
YearRankTypeTitle / Venue / Authors
2020 J jnl
CoRR
Pedro D. Marrero-Fernández, Ing Ren Tsang, Ing-Jyh Tsang, Fidel A. Guerrero-Peña, Alexandre Cunha
2019 J jnl
Appl. Soft Comput.
Roberto H. W. Pinheiro, George D. C. Cavalcanti, Ing Ren Tsang
2018 J jnl
Appl. Soft Comput.
Tiago Buarque Assunção de Carvalho, Maria A. A. Sibaldo, Ing Ren Tsang, George D. C. Cavalcanti, Jan Sijbers, Ing Jyh Tsang
2017 J jnl
Inf. Sci.
Roberto H. W. Pinheiro, George D. C. Cavalcanti, Ing Ren Tsang
2017 J jnl
Comput. Electron. Agric.
Luis Filipe Alves Pereira, Eline Janssens, George D. C. Cavalcanti, Ing Ren Tsang, Mattias Van Dael, Pieter Verboven, Bart M. Nicolaï, Jan Sijbers
2017 J jnl
J. Inf. Data Manag.
Tiago Buarque Assunção de Carvalho, Maria Aparecida Amorim Sibaldo, Ing Ren Tsang, George Darmiton da Cunha Cavalcanti
2016 conf
BRACIS
Tiago Buarque Assunção de Carvalho, Maria A. A. Sibaldo, Ing Ren Tsang, George D. C. Cavalcanti, Ing Jyh Tsang, Jan Sijbers
2015 B conf
ICIP
Tiago Buarque Assunção de Carvalho, A. M. Costa, M. A. A. Sibaldo, Ing Ren Tsang, George D. C. Cavalcanti
2014 B conf
ICIP
Tiago Buarque Assunção de Carvalho, M. A. A. Sibaldo, Ing Ren Tsang, George D. C. Cavalcanti, Ing Jyh Tsang, Jan Sijbers
2013 J jnl
Expert Syst. Appl.
Rafael M. O. Cruz, George D. C. Cavalcanti, Ing Ren Tsang, Robert Sabourin
2012 B conf
SMC
Ing Ren Tsang, João Paulo Magalhães, George D. C. Cavalcanti
2012 B conf
SMC
George D. C. Cavalcanti, João Paulo Magalhães, Rafael M. Barreto, Ing Ren Tsang
2012 B conf
SMC
Tiago Buarque Assunção de Carvalho, M. A. A. Sibaldo, Denise Jaeger Tenório, Ing Ren Tsang, George D. C. Cavalcanti, Ing Jyh Tsang
2012 B conf
SMC
Carlos A. C. M. Bastos, Ing Ren Tsang, Gabriel S. Vasconcelos, George D. C. Cavalcanti
2012 B conf
SMC
George D. C. Cavalcanti, Ing Ren Tsang, Josivan R. Reis
2012 B conf
SMC
Ing Ren Tsang, Dimas Gabriel, Hector N. B. Pinheiro, George D. C. Cavalcanti
2012 B conf
SMC
Ing Ren Tsang, Diogo C. Lemos, Dario S. M. Pinheiro, George D. C. Cavalcanti, Ing Jyh Tsang
2011 B conf
IJCNN
Rafael M. O. Cruz, George D. C. Cavalcanti, Ing Ren Tsang
2011 Misc conf
ICASSP
José Francisco Pereira, Rafael M. Barreto, George D. C. Cavalcanti, Ing Ren Tsang
2011 B conf
IJCNN
Guilherme V. Carvalho, Lailson B. Moraes, George D. C. Cavalcanti, Ing Ren Tsang
2011 B conf
IJCNN
Gabriel S. Vasconcelos, Carlos A. C. M. Bastos, Ing Ren Tsang, George D. C. Cavalcanti
2011 B conf
SMC
Diogo C. Costa, Ing Ren Tsang, Carlos A. B. Mello
2011 B conf
FUZZ-IEEE
Cesar Lima Pereira, Carlos A. C. M. Bastos, Ing Ren Tsang, George D. C. Cavalcanti
2011 B conf
IJCNN
Armando A. Gonçalves, Igor Alencar, Ing Ren Tsang, George D. C. Cavalcanti
2011 B conf
IJCNN
Gustavo H. T. Ribeiro, Paulo S. G. de Mattos Neto, George D. C. Cavalcanti, Ing Ren Tsang
2010 conf
ICTAI (2)
Cesar Lima Pereira, George D. C. Cavalcanti, Ing Ren Tsang
2010 Misc conf
ICASSP
Carlos A. C. M. Bastos, Ing Ren Tsang, George D. C. Cavalcanti
2010 B conf
IEEE Congress on Evolutionary Computation
Nitai B. Silva, Ing Ren Tsang, George D. C. Cavalcanti, Ing-Jyh Tsang
2010 B conf
IJCNN
Rafael M. O. Cruz, George D. C. Cavalcanti, Ing Ren Tsang
2010 conf
ICTAI (2)
Carlos A. C. M. Bastos, Ing Ren Tsang, George D. C. Cavalcanti
2010 B conf
SMC
Elias Rodrigues da Silva Júnior, George D. C. Cavalcanti, Ing Ren Tsang
2010 B conf
IJCNN
Manoel C. Amorim Neto, Gustavo Tavares, Victor Medeiros Outtes Alves, George D. C. Cavalcanti, Ing Ren Tsang
2010 Misc conf
ICASSP
Tiago Buarque Assunção de Carvalho, Denise Jaeger Tenório, Ing Ren Tsang, George Darmiton da Cunha Cavalcanti, Ing-Jyh Tsang
2010 conf
ICTAI (1)
Milena R. P. Souza, George D. C. Cavalcanti, Ing Ren Tsang
2009 B conf
IJCNN
Renato Oliveira, Paulo J. L. Adeodato, Arthur Carvalho, Icamaan Viegas, Christian Diego, Ing Ren Tsang
2009 B conf
IJCNN
Bruno J. T. Fernandes, George D. C. Cavalcanti, Ing Ren Tsang
2009 B conf
IJCNN
Manoel C. Amorim Neto, George D. C. Cavalcanti, Ing Ren Tsang
2009 B conf
IJCNN
José Francisco Pereira, George D. C. Cavalcanti, Ing Ren Tsang
2009 A conf
ICDAR
Rodolfo P. dos Santos, Gabriela S. Clemente, Ing Ren Tsang, George D. C. Cavalcanti
2008 C conf
HIS
Francisco Nascimento Junior, Ing Ren Tsang, George D. C. Cavalcanti
2008 C conf
HIS
Bruno J. T. Fernandes, George D. C. Cavalcanti, Ing Ren Tsang
2007 B conf
IJCNN
Aida Araujo Ferreira, Francisco Nascimento Jr., Ing Ren Tsang, George D. C. Cavalcanti, Teresa Bernarda Ludermir, Ronaldo Ribeiro Barbosa de Aquino
2006 B conf
IJCNN
Ing Ren Tsang, Ing Jyh Tsang
2006 conf
ICIAR (1)
Ing Ren Tsang, Ing Jyh Tsang
1999 J jnl
Pattern Recognit. Lett.
Ing Jyh Tsang, Ing Ren Tsang, Dirk Van Dyck
1998 conf
ICIP (2)
Ing Jyh Tsang, Ing Ren Tsang, Dirk Van Dyck
redb/extractors/basicproperties.py
← Index redb/extractors/basicproperties.py python
from dataclasses import asdict
import inspect
import os
import magic
from magika import Magika
from datetime import datetime, timezone
from typing import Any, List, Tuple

from redb.extractors.enum import Tag
from redb.models.dataclasses import BasicProperties
from redb.extractors.extractor import Extractor


class BasicPropertiesExtractor(Extractor):

    def __init__(
        self,
        filepath,
        log,
        exporters=None,
        index_prefix=None,
        elastic_index=None,
        known_benign=False,
        known_malicious=False,
        parent_sha256=None,
        precomputed_hashes=None,
        is_fat=None,
        child_sha256=None,
        child_architecture=None,
        child_filetype=None,
        first_seen=None,
    ):
        super().__init__(
            filepath,
            log,
            exporters=exporters,
            index_prefix=index_prefix,
            elastic_index=elastic_index,
            known_benign=known_benign,
            known_malicious=known_malicious,
            precomputed_hashes=precomputed_hashes,
        )
        self.basic_properties = None
        self.elastic_index = self.index_prefix + "-basic_properties"
        self.is_packed = None
        self.parent_sha256 = parent_sha256  # For FAT Mach-O slices, points to container hash
        self.is_fat = is_fat  # True for FAT Mach-O containers, None otherwise
        self.child_sha256 = child_sha256  # SHA256 hashes of children (FAT slices, zip contents)
        self.child_architecture = child_architecture  # Architecture names for FAT Mach-O slices
        self.child_filetype = child_filetype  # Magika filetypes for children (useful for zip archives)
        self.first_seen = first_seen  # From catalog_samples, None for local files

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

    def _extract_basic_properties(self):
        self.log.debug(inspect.currentframe().f_code.co_name)
        filename = None  # Reserved for future use
        sample_name = os.path.basename(self.filepath)
        file_entropy = round(self.calculate_entropy(self.binary), 3)
        type_ = magic.from_buffer(self.binary)
        type_mime = magic.from_buffer(self.binary, mime=True)
        type_magika = Magika().identify_bytes(self.binary).output.label
        size = len(self.binary)
        self.basic_properties = BasicProperties(
            filename, sample_name, size, type_, type_mime, type_magika,
            file_entropy, self.is_packed, self.is_fat, self.child_sha256,
            self.child_architecture, self.child_filetype,
            first_seen=str(self.first_seen) if self.first_seen else None,
        )
        self.log.debug(f"Basic Properties dump: {asdict(self.basic_properties)}")

    def extract(self):
        self.log.debug(inspect.currentframe().f_code.co_name)
        try:
            self._extract_basic_properties()
            # self.export_to_elastic([self.basic_properties])
            return self.basic_properties
        except Exception as e:
            self.log.error(f"Extract basic properties error {self.hash.sha256} Exception: {e}")
            return None

    def prepare_export_data(self, exporter_type: str) -> Any:
        if exporter_type == "ElasticsearchExporter":
            return self.basic_properties
        elif exporter_type == "ClickHouseExporter":
            data = [[
                self.sha256,
                self.md5,
                self.sha1,
                self.parent_sha256,  # NULL for standalone/FAT, fat_hash for slices
                self.basic_properties.child_sha256 or [],  # SHA256 hashes of children
                self.basic_properties.child_architecture or [],  # Architecture names for FAT slices
                self.basic_properties.child_filetype or [],  # Magika filetypes for children
                self.basic_properties.is_fat,  # True for FAT Mach-O containers, NULL otherwise
                self.basic_properties.filename,
                self.basic_properties.sample_name,
                self.basic_properties.filesize,
                self.basic_properties.file_entropy,
                self.basic_properties.filetype,
                self.basic_properties.filetype_mime,
                self.basic_properties.filetype_magika,
                self.first_seen or datetime(1970, 1, 1, tzinfo=timezone.utc),  # From catalog_samples, epoch zero for local files (uses original datetime, not string)
                datetime.now(timezone.utc)
            ]]

            column_names = [
                'sha256', 'md5', 'sha1', 'parent_sha256', 'child_sha256', 'child_architecture', 'child_filetype',
                'is_fat', 'filename', 'sample_name',
                'filesize', 'file_entropy', 'filetype', 'filetype_mime',
                'filetype_magika', 'first_seen', 'analysis_date'
            ]

            column_type_names = [
                'String', 'String', 'String', 'Nullable(String)',
                'Array(FixedString(64))', 'Array(LowCardinality(String))', 'Array(LowCardinality(String))',
                'Nullable(UInt8)', 'Nullable(String)', 'String',
                'UInt64', 'Float64', 'LowCardinality(String)',
                'LowCardinality(String)', 'LowCardinality(String)',
                'DateTime64(3, \'UTC\')',
                'DateTime64(3, \'UTC\')'
            ]

            return data, column_names, column_type_names

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