Hai-Jun Huang

38 papers C 1Journal 28Unranked 9
YearRankTypeTitle / Venue / Authors
2025 J jnl
Transp. Sci.
Ren-Yong Guo, Hai Yang, Hai-Jun Huang
2025 J jnl
IEEE Trans. Neural Networks Learn. Syst.
Yunqi Huang, Chang Liu, Bohao Li, Hai-Jun Huang, Ronghui Zhang, Wei Ke, Xiaojun Jing
2023 J jnl
Transp. Sci.
Ren-Yong Guo, Hai Yang, Hai-Jun Huang
2020 J jnl
J. Intell. Transp. Syst.
Meng Li, Xuan Di, Henry X. Liu, Hai-Jun Huang
2019 J jnl
Comput. Ind. Eng.
Hua-Yan Shang, Hai-Jun Huang, Wen-Xiang Wu
2019 J jnl
Simul. Model. Pract. Theory
Liang Chen, Tie-Qiao Tang, Ziqi Song, Hai-Jun Huang, Ren-Yong Guo
2018 J jnl
Transp. Sci.
Ren-Yong Guo, Hai Yang, Hai-Jun Huang
2018 J jnl
Simul. Model. Pract. Theory
Liang Chen, Tie-Qiao Tang, Hai-Jun Huang, Jianjun Wu, Ziqi Song
2017 conf
ICCA
Gui-Mei Fan, Hai-Jun Huang
2016 J jnl
Transp. Sci.
Ren-Yong Guo, Hai Yang, Hai-Jun Huang, Zhijia Tan
2015 J jnl
Transp. Sci.
Lingling Xiao, Hai-Jun Huang, Ronghui Liu
2015 J jnl
Eur. J. Oper. Res.
Li-Jun Tian, Hai-Jun Huang
2014 J jnl
J. Appl. Math.
Wen-Xiang Wu, Hai-Jun Huang
2014 J jnl
Eur. J. Oper. Res.
Jiancheng Long, Wai Yuen Szeto, Hai-Jun Huang
2014 conf
ITSC
Chuan-Lin Zhao, Hai-Jun Huang
2014 J jnl
Oper. Res.
Ziyou Gao, Yunchao Qu, Xingang Li, Jiancheng Long, Hai-Jun Huang
2013 J jnl
Oper. Res.
Jiancheng Long, Hai-Jun Huang, Ziyou Gao, Wai Yuen Szeto
2013 J jnl
Int. J. Syst. Sci.
Xiao-Shan Lu, Hai-Jun Huang, Jiancheng Long
2012 J jnl
Public Transp.
Qiong Tian, Hai Yang, Hai-Jun Huang
2012 J jnl
Simul.
Ren-Yong Guo, Hai-Jun Huang
2010 conf
ITSC
Qiong Tian, Hai-Jun Huang, Hai Yang, Hui Mou
2010 J jnl
Oper. Res. Lett.
Qiong Tian, Hai Yang, Hai-Jun Huang
2009 conf
CSO (2)
Jian-Xun Ding, Hai-Jun Huang, Qiong Tian
2009 conf
CSO (2)
Wen-Xiang Wu, Hai-Jun Huang
2009 conf
CSO (2)
Qiong Tian, William H. K. Lam, Hai-Jun Huang, Hui Mou
2008 J jnl
Eur. J. Oper. Res.
Xiaoning Zhang, Hai Yang, Hai-Jun Huang
2007 conf
ICNC (4)
Hua-Yan Shang, Hai-Jun Huang
2007 J jnl
J. Math. Model. Algorithms
Zhi-Chun Li, Hai-Jun Huang, William H. K. Lam, Sze Chun Wong
2007 J jnl
Eur. J. Oper. Res.
Hai-Jun Huang, Zhi-Chun Li
2007 conf
ICNC (5)
Tian-Liang Liu, Hai-Jun Huang
2005 J jnl
Ann. Oper. Res.
Hai-Jun Huang, William H. K. Lam
2005 C conf
AAIM
Hai-Jun Huang, Qiong Tian, Ziyou Gao
2005 conf
WINE
Zhi-Chun Li, Hai-Jun Huang
2003 J jnl
J. Math. Model. Algorithms
Hai-Jun Huang, William H. K. Lam
2003 J jnl
J. Math. Model. Algorithms
William H. K. Lam, Hai-Jun Huang
2002 J jnl
Eur. J. Oper. Res.
Hai-Jun Huang
2002 J jnl
J. Oper. Res. Soc.
Hai-Jun Huang, William H. K. Lam
1998 J jnl
Eur. J. Oper. Res.
Hai-Jun Huang, Gang Xu
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"