Xiaohua Huang

68 papers A* 1A 3B 6Misc 1Journal 48Unranked 9
YearRankTypeTitle / Venue / Authors
2026 J jnl
IEEE Trans. Comput. Soc. Syst.
Xiaohua Huang, Xiaopeng Hong, Qirong Mao, Wenming Zheng, Abhinav Dhall
2026 J jnl
IEEE Trans. Affect. Comput.
Qing Zhu, Qirong Mao, Wenlong Dong, Xiuyan Shao, Xiaohua Huang, Wenming Zheng
2026 J jnl
Expert Syst. J. Knowl. Eng.
Xiaohua Huang, Peilin Li
2026 J jnl
IEEE Trans. Comput. Soc. Syst.
Xiaohua Huang, Jinke Xu
2025 J jnl
IEEE Trans. Affect. Comput.
Ling Zhou, Mingpei Wang, Xiaohua Huang, Wenming Zheng, Qirong Mao, Guoying Zhao
2025 J jnl
CoRR
Qing Zhu, Wangdong Guo, Qirong Mao, Xiaohua Huang, Xiuyan Shao, Wenming Zheng
2025 J jnl
IEEE Trans. Affect. Comput.
Qing Zhu, Qirong Mao, Jialin Zhang, Xiaohua Huang, Wenming Zheng
2024 J jnl
CoRR
Xiaohua Huang, Jinke Xu, Wenming Zheng, Qirong Mao, Abhinav Dhall
2024 J jnl
Displays
Lixiu Jia, Lixin Jia, Jian Zhao, Lihang Feng, Xiaohua Huang
2024 J jnl
IEEE Trans. Instrum. Meas.
Xiaohua Huang, Yang Li, Yongqiang Bao, Wenming Zheng
2024 conf
ICPR (13)
Yan Zhao, Xiaohua Huang, Chuangao Tang
2024 J jnl
IEEE Trans. Instrum. Meas.
Xiaohua Huang, Jiahao Zhu, Ying Huo
2023 J jnl
Internet Res.
Xiuyan Shao, Hemin Jiang, Mikko T. Siponen, Cong Cao, Xiaohua Huang
2023 conf
ICMSSP
Xiaoyu Yuan, Zhibo Zhang, Yabo Sun, Zekai Xue, Xiuyan Shao, Xiaohua Huang
2023 J jnl
CoRR
Ling Zhou, Mingpei Wang, Xiaohua Huang, Wenming Zheng, Qirong Mao, Guoying Zhao
2023 J jnl
Displays
Lixiu Jia, Lixin Jia, Zhong Lin, Lihang Feng, Xiaohua Huang
2023 J jnl
IEEE Trans. Geosci. Remote. Sens.
Xiang Yu, Ying Qian, Zhe Geng, Xiaohua Huang, Qinglu Wang, Daiyin Zhu
2023 J jnl
CoRR
Qing Zhu, Qirong Mao, Jialin Zhang, Xiaohua Huang, Wenming Zheng
2022 J jnl
CoRR
Xiaoyu Yuan, Zhibo Zhang, Yabo Sun, Zekai Xue, Xiuyan Shao, Xiaohua Huang
2022 J jnl
IEEE Trans. Affect. Comput.
Xiaohua Huang, Abhinav Dhall, Roland Goecke, Matti Pietikäinen, Guoying Zhao
2022 J jnl
CoRR
Xiang Yu, Zhe Geng, Xiaohua Huang, Qinglu Wang, Daiyin Zhu
2022 J jnl
IEEE Trans. Affect. Comput.
Muhterem Dindar, Sanna Järvelä, Sara Ahola, Xiaohua Huang, Guoying Zhao
2022 J jnl
IEEE Trans. Affect. Comput.
Qirong Mao, Ling Zhou, Wenming Zheng, Xiuyan Shao, Xiaohua Huang
2021 J jnl
Sensors
Lei Han, Xiaohua Huang, Zhan Shi, Shengnan Zheng
2021 J jnl
Image Vis. Comput.
Xiaohua Huang, Abhinav Dhall, Guoying Zhao, Wenming Zheng, Matti Pietikäinen
2021 J jnl
IEEE Trans. Image Process.
Yante Li, Xiaohua Huang, Guoying Zhao
2021 J jnl
Neurocomputing
Yante Li, Xiaohua Huang, Guoying Zhao
2021 J jnl
CoRR
Qirong Mao, Ling Zhou, Wenming Zheng, Xiuyan Shao, Xiaohua Huang
2020 conf
ICBDS
Lei Han, Xiaohua Huang, Zhan Shi, Shengnan Zheng
2020 J jnl
Frontiers Inf. Technol. Electron. Eng.
Luoyang Xue, Qirong Mao, Xiaohua Huang, Jie Chen
2019 J jnl
IEEE Trans. Affect. Comput.
Xiaohua Huang, Sujing Wang, Xin Liu, Guoying Zhao, Xiaoyi Feng, Matti Pietikäinen
2018 J jnl
CoRR
Xiaohua Huang, Abhinav Dhall, Roland Goecke, Matti Pietikäinen, Guoying Zhao
2018 J jnl
IEEE Trans. Circuits Syst. Video Technol.
Xin Liu, Jiawen Yao, Xiaopeng Hong, Xiaohua Huang, Ziheng Zhou, Chun Qi, Guoying Zhao
2018 B conf
ICIP
Yante Li, Xiaohua Huang, Guoying Zhao
2018 J jnl
IEEE Trans. Image Process.
Yuan Zong, Wenming Zheng, Xiaohua Huang, Jingang Shi, Zhen Cui, Guoying Zhao
2018 J jnl
IEEE Trans. Multim.
Yuan Zong, Xiaohua Huang, Wenming Zheng, Zhen Cui, Guoying Zhao
2018 J jnl
Neurocomputing
Sujing Wang, Bing-Jun Li, Yong-Jin Liu, Wen-Jing Yan, Xinyu Ou, Xiaohua Huang, Feng Xu, Xiaolan Fu
2018 J jnl
IEEE Trans. Multim.
Xiaohua Huang, Abhinav Dhall, Roland Goecke, Matti Pietikäinen, Guoying Zhao
2018 J jnl
IEEE Trans. Affect. Comput.
Xiaobai Li, Xiaopeng Hong, Antti Moilanen, Xiaohua Huang, Tomas Pfister, Guoying Zhao, Matti Pietikäinen
2018 B conf
FG
Bobin Zhang, Weidong Fang, Wei Chen, Fangming Bi, Chaogang Tang, Xiaohua Huang
2017 A conf
ICME
Zhiyuan Zha, Xin Liu, Xiaohua Huang, Henglin Shi, Yingyue Xu, Qiong Wang, Lan Tang, Xinggan Zhang
2017 Misc conf
ICASSP
Zhiyuan Zha, Xin Liu, Ziheng Zhou, Xiaohua Huang, Jingang Shi, Zhenhong Shang, Lan Tang, Yechao Bai, Qiong Wang, Xinggan Zhang
2017 A* conf
ACM Multimedia
Yuan Zong, Xiaohua Huang, Wenming Zheng, Zhen Cui, Guoying Zhao
2017 J jnl
CoRR
Yuan Zong, Xiaohua Huang, Wenming Zheng, Zhen Cui, Guoying Zhao
2016 J jnl
CoRR
Xiaohua Huang, Abhinav Dhall, Xin Liu, Guoying Zhao, Jingang Shi, Roland Goecke, Matti Pietikäinen
2016 J jnl
CoRR
Zhiyuan Zha, Xin Liu, Xiaohua Huang, Xiaopeng Hong, Henglin Shi, Yingyue Xu, Qiong Wang, Lan Tang, Xinggan Zhang
2016 J jnl
IEEE Signal Process. Lett.
Yuan Zong, Wenming Zheng, Tong Zhang, Xiaohua Huang
2016 J jnl
J. Multimodal User Interfaces
Yuan Zong, Wenming Zheng, Xiaohua Huang, Keyu Yan, Jingwei Yan, Tong Zhang
2016 J jnl
CoRR
Zhiyuan Zha, Xin Liu, Ziheng Zhou, Xiaohua Huang, Jingang Shi, Zhenhong Shang, Lan Tang, Yechao Bai, Qiong Wang, Xinggan Zhang
2016 J jnl
Comput. Vis. Image Underst.
Xiaohua Huang, Jukka Kortelainen, Guoying Zhao, Xiaobai Li, Antti Moilanen, Tapio Seppänen, Matti Pietikäinen
2016 J jnl
CoRR
Xiaohua Huang, Sujing Wang, Xin Liu, Guoying Zhao, Xiaoyi Feng, Matti Pietikäinen
2016 J jnl
Neurocomputing
Xiaohua Huang, Guoying Zhao, Xiaopeng Hong, Wenming Zheng, Matti Pietikäinen
2015 conf
ICCV Workshops
Xiaohua Huang, Sujing Wang, Guoying Zhao, Matti Pietikäinen
2015 J jnl
CoRR
Xiaobai Li, Xiaopeng Hong, Antti Moilanen, Xiaohua Huang, Tomas Pfister, Guoying Zhao, Matti Pietikäinen
2015 A conf
BMVC
Xiaohua Huang, Abhinav Dhall, Guoying Zhao, Roland Goecke, Matti Pietikäinen
2015 B conf
ICMI
Yuan Zong, Wenming Zheng, Xiaohua Huang, Jingwei Yan, Tong Zhang
2014 B conf
ICMI
Xiaohua Huang, Qiuhai He, Xiaopeng Hong, Guoying Zhao, Matti Pietikäinen
2014 B conf
ICPR
Xiaohua Huang, Guoying Zhao, Matti Pietikäinen, Wenming Zheng
2013 B conf
FG
Xiaobai Li, Tomas Pfister, Xiaohua Huang, Guoying Zhao, Matti Pietikäinen
2013 A conf
BMVC
Xiaohua Huang, Guoying Zhao, Matti Pietikäinen
2013 conf
SCIA
Xiaohua Huang, Guoying Zhao, Xiaopeng Hong, Matti Pietikäinen, Wenming Zheng
2012 conf
EMBC
Jukka Kortelainen, Suvi Tiinanen, Xiaohua Huang, Xiaobai Li, Seppo J. Laukka, Matti Pietikäinen, Tapio Seppänen
2012 J jnl
IEEE Signal Process. Lett.
Xiaohua Huang, Guoying Zhao, Wenming Zheng, Matti Pietikäinen
2012 J jnl
Pattern Recognit. Lett.
Xiaohua Huang, Guoying Zhao, Wenming Zheng, Matti Pietikäinen
2011 conf
SCIA
Xiaohua Huang, Guoying Zhao, Matti Pietikäinen, Wenming Zheng
2011 J jnl
Image Vis. Comput.
Guoying Zhao, Xiaohua Huang, Matti Taini, Stan Z. Li, Matti Pietikäinen
2010 conf
MiFor@MM
Guoying Zhao, Xiaohua Huang, Yulia Gizatdinova, Matti Pietikäinen
2010 conf
ACIVS (2)
Xiaohua Huang, Guoying Zhao, Matti Pietikäinen, Wenming Zheng
redb/extractors/js_extractors/js_suspicious_apis.py
← Index redb/extractors/js_extractors/js_suspicious_apis.py python
import inspect
from datetime import datetime, timezone
from typing import Any

from redb.extractors.enum import Tag
from redb.extractors.js_extractor import JSExtractor
from redb.extractors.js_extractors.js_patterns import CATEGORIES, PATTERNS


# Backwards-compatible export: `{category: [(raw_pattern_string, api_name), ...]}`
# in canonical PATTERNS insertion order (code_execution, network, filesystem,
# process, registry, crypto_encoding, dom_manipulation). Kept so external
# callers (notably JSDeobfuscationExtractor pre-cleanup) keep working until
# they are migrated to PATTERNS directly.
SUSPICIOUS_APIS: "dict[str, list[tuple[str, str]]]" = {}
for _name, _compiled in PATTERNS.items():
    SUSPICIOUS_APIS.setdefault(CATEGORIES[_name], []).append((_compiled.pattern, _name))


class JSSuspiciousAPIsExtractor(JSExtractor):

    def __init__(
        self, filepath, log, exporters=None, index_prefix=None,
        known_benign=False, known_malicious=False, source=None, context=None,
    ):
        super().__init__(
            filepath, log, exporters, index_prefix,
            known_benign, known_malicious, source, context=context,
        )
        self.api_findings = None
        self.log.debug(inspect.currentframe().f_code.co_name)

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

    def _get_context_snippet(self, line, max_len=200):
        """Get a truncated context snippet around a match."""
        line = line.strip()
        if len(line) > max_len:
            return line[:max_len] + "..."
        return line

    def extract(self):
        src = self.js_source
        if not src:
            return None

        # Pass 1: shared per-sample scan over the raw source. The dict contains
        # entries for both PATTERNS and FEATURE_PATTERNS; the loop below only
        # consults PATTERNS keys, so feature-only entries are ignored.
        raw_scan = self._context.scan or {}
        raw_lines = self.lines

        # Pass 2: same patterns over the deobfuscated text, when the
        # deobfuscator produced something meaningfully different. APIs hidden
        # behind one obfuscation layer (Vjw0rm-style array.join + eval,
        # Dean-Edwards packers, jjencode, ...) only surface here. The scan is
        # cached on JSContext so JSDeobfuscationExtractor (which computes the
        # new_apis_found diff) reuses the same result.
        deobf_scan = self._context.scan_deobfuscated
        if deobf_scan:
            deobf_text, _ = self._context.deobfuscated
            deobf_lines = deobf_text.splitlines()
        else:
            deobf_lines = []

        findings = []
        # Iterate PATTERNS in canonical order so output is deterministic and
        # matches the historical category/pattern ordering. For each api_name,
        # raw findings take precedence; if an API is found only in the
        # deobfuscated text, we surface it as a row tagged revealed_by_deobf=1
        # with line numbers / snippets pulled from the deobfuscated source.
        for api_name in PATTERNS:
            raw_info = raw_scan.get(api_name)
            if raw_info:
                line_numbers = raw_info["lines"]
                lines_for_snippets = raw_lines
                revealed_by_deobf = 0
            else:
                deobf_info = deobf_scan.get(api_name)
                if not deobf_info:
                    continue
                line_numbers = deobf_info["lines"]
                lines_for_snippets = deobf_lines
                revealed_by_deobf = 1

            snippets = [
                self._get_context_snippet(lines_for_snippets[ln - 1])
                for ln in line_numbers[:3]
                if 0 < ln <= len(lines_for_snippets)
            ]
            findings.append({
                "api_name": api_name,
                "api_category": CATEGORIES[api_name],
                # Historical semantics: count = number of unique lines with a
                # match, not total in-source match count.
                "call_count": len(line_numbers),
                "line_numbers": line_numbers,
                "context_snippet": " | ".join(snippets),
                "revealed_by_deobf": revealed_by_deobf,
            })

        if not findings:
            return None

        self.api_findings = findings
        return findings

    def prepare_export_data(self, exporter_type: str) -> Any:
        if exporter_type == "ClickHouseExporter":
            if not self.api_findings:
                return None

            current_time = datetime.now(timezone.utc)
            data = []
            for f in self.api_findings:
                data.append([
                    self.sha256,
                    f['api_name'],
                    f['api_category'],
                    f['call_count'],
                    f['line_numbers'],
                    f['context_snippet'],
                    f['revealed_by_deobf'],
                    current_time,
                ])

            column_names = [
                "sha256", "api_name", "api_category",
                "call_count", "line_numbers", "context_snippet",
                "revealed_by_deobf",
                "analysis_date",
            ]

            column_type_names = [
                "FixedString(64)", "String", "LowCardinality(String)",
                "UInt32", "Array(UInt32)", "String",
                "UInt8",
                "DateTime64(3, 'UTC')",
            ]

            return (data, column_names, column_type_names)

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