X. Jin

12 papers Misc 1Journal 8Unranked 3
YearRankTypeTitle / Venue / Authors
2025 Misc conf
ICNC
Michal Aibin, F. Chen, M. Menzi, Liam Scholte, Z. Jiang, Yiwu Chen, X. Jin, C. Liu, Ania Aibin
2025 J jnl
Nat.
Nathan Lacroix, Alexandre Bourassa, Francisco J. H. Heras, L. M. Zhang, Johannes Bausch, Andrew W. Senior, Thomas Edlich, Noah Shutty, V. Sivak, Andreas Bengtsson, Matthew J. McEwen, Oscar Higgott, Dvir Kafri, Jahan Claes, Alexis Morvan, Zijun Chen, Adam Zalcman, S. Madhuk, R. Acharya, Laleh Aghababaie Beni, G. Aigeldinger, R. Alcaraz, Trond I. Andersen, Markus Ansmann, Frank Arute, Kunal Arya, A. Asfaw, Juan Atalaya, Ryan Babbush, B. Ballard, Joseph C. Bardin, A. Bilmes, Sam Blackwell, J. Bovaird, D. Bowers, L. Brill, Michael Broughton, D. A. Browne, B. Buchea, B. B. Buckley, T. Burger, Brian Burkett, N. Bushnell, A. Cabrera, J. Campero, Hung-Shen Chang, Benjamin Chiaro, Liang-Ying Chih, A. Y. Cleland, J. Cogan, Roberto Collins, P. Conner, W. Courtney, A. L. Crook, Benjamin Curtin, Sayan Das, Sean Demura, L. De Lorenzo, Agustin Di Paolo, P. Donohoe, Ilya K. Drozdov, Andrew Dunsworth, A. Eickbusch, A. Moshe Elbag, M. Elzouka, Catherine Erickson, V. S. Ferreira, L. Flores Burgos, E. Forati, Austin G. Fowler, Brooks Foxen, S. Ganjam, G. Garcia, R. Gasca, Élie Genois, W. Giang, Dar Gilboa, Raja Gosula, A. Grajales Dau, D. Graumann, Amy L. Greene, Jonathan A. Gross, T. Ha, Stephen Habegger, M. Hansen, Matthew P. Harrigan, Sean D. Harrington, S. Heslin, P. Heu, R. Hiltermann, J. Hilton, Sabrina Hong, H.-Y. Huang, A. Huff, William J. Huggins, Evan Jeffrey, Zhang Jiang, X. Jin, C. Joshi, Pavol Juhas, A. Kabel, H. Kang, Amir H. Karamlou, Kostyantyn Kechedzhi, T. Khaire, Tanuj Khattar, M. Khezri, S. Kim, Paul V. Klimov, B. Kobrin, Alexander N. Korotkov, F. Kostritsa, J. Mark Kreikebaum, V. D. Kurilovich, David Landhuis, T. Lange-Dei, B. W. Langley, P. Laptev, K.-M. Lau, Justin Ledford, K. Lee, Brian Lester, Loïck Le Guevel, W. Yan Li, Y. Li, A. T. Lill, William P. Livingston, Aditya Locharla, Erik Lucero, D. Lundahl, A. Lunt, A. Maloney, Salvatore Mandrà, L. S. Martin, O. Martin, C. Maxfield, Jarrod R. McClean, S. Meeks, Anthony Megrant, K. C. Miao, R. Molavi, S. Molina, Shirin Montazeri, Ramis Movassagh, Charles J. Neill, Michael Newman, A. Nguyen, M. Nguyen, C.-H. Ni, Murphy Yuezhen Niu, L. Oas, W. D. Oliver, R. Orosco, K. Ottosson, Alex Pizzuto, R. Potter, O. Pritchard, Chris Quintana, G. Ramachandran, Matthew J. Reagor, R. Resnick, David M. Rhodes, G. Roberts, E. Rosenberg, E. Rosenfeld, E. Rossi, Pedram Roushan, Kannan A. Sankaragomathi, Henry F. Schurkus, M. J. Shearn, A. Shorter, V. Shvarts, S. Small, W. Clarke Smith, S. Springer, George Sterling, J. Suchard, Aaron Szasz, A. Sztein, D. Thor, E. Tomita, A. Torres, Mustafa Mert Torunbalci, A. Vaishnav, J. Vargas, S. Vdovichev, G. Vidal, Catherine Vollgraff Heidweiller, S. Waltman, Jonathan Waltz, S. X. Wang, Brayden Ware, T. Weidel, Ted White, K. Wong, Bryan W. K. Woo, Madison Woodson, C. Xing, Z. Jamie Yao, Ping Yeh, B. Ying, J. Yoo, Noureldin Yosri, G. Young, Y. Zhang, Ningfeng Zhu, N. Zobrist, Hartmut Neven, Pushmeet Kohli, Alex Davies, Sergio Boixo, Julian Kelly, Cody Jones, Craig Gidney, Kevin J. Satzinger
2023 J jnl
CoRR
X. Jin, Daniel W. C. Ho, Yang Tang
2019 conf
ICAC
Q. Zhang, Wenhan Zeng, Shan Lou, X. Jin, Paul J. Scott, Xiangqian Jiang
2018 J jnl
Comput. Electron. Agric.
K. Zhao, J. M. Bewley, Dongjian He, X. Jin
2013 conf
ROBIO
Kundong Wang, Yao Ge, X. Jin
2012 J jnl
Autom.
X. Jin, Biao Huang
2012 conf
ROBIO
K. Wang, X. Jin
2011 J jnl
Parallel Comput.
Mukaram M. Khan, Alexander D. Rast, Javier Navaridas, X. Jin, Luis A. Plana, Mikel Luján, Steve Temple, Cameron Patterson, Dominic Richards, John V. Woods, José Miguel-Alonso, Stephen B. Furber
2006 J jnl
Adv. Eng. Softw.
Y. Guo, X. Jin, J. Ding
2006 J jnl
Trans. SDPS
X. Jin, Michail Kagioglou, Ghassan Aouad
2002 J jnl
J. Comput. Biol.
Sanguthevar Rajasekaran, X. Jin, John L. Spouge
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"