Wei Hua

56 papers A* 6A 1B 3C 1Journal 35Unranked 10
YearRankTypeTitle / Venue / Authors
2026 A* conf
AAAI
Liangyi Kang, Wei Hua, Yan Yang, Jie Liu, Dan Ye
2026 J jnl
Biomed. Signal Process. Control.
Xiaoling Xie, Xianghu Wu, Lei Pan, Wei Hua, Xin Shu
2026 J jnl
Expert Syst. Appl.
Chengying Hua, Wei (David) Fan, Wei Hua, Shuichao Zhang
2025 J jnl
Artif. Intell. Rev.
Wei Hua, Qili Chen
2025 J jnl
Appl. Soft Comput.
Xin Shu, Aoping Zhang, Zhaoyang Xu, Feng Zhu, Wei Hua
2025 J jnl
Signal Image Video Process.
Meihua Gu, Xiaoxiao Dong, Wei Hua
2025 J jnl
Comput. Electron. Agric.
Peilin Li, Jiqing Chen, Quan Chen, Lixiang Huang, Zhiwu Jiang, Wei Hua, Yanzhou Li
2025 J jnl
IEEE Trans. Big Data
Shaojie Qiao, Yuhe Jiang, Nan Han, Wei Hua, Yufeng Lin, Shengjie Min, Xindong Wu
2025 A* conf
IJCAI
Wei Hua, Chenlin Zhou, Jibin Wu, Yansong Chua, Yangyang Shu
2025 J jnl
CoRR
Wei Hua, Chenlin Zhou, Jibin Wu, Yansong Chua, Yangyang Shu
2025 J jnl
CoRR
Yechi Ma, Wei Hua, Shu Kong
2024 A* conf
KDD
Xujiang Zhao, Chen Zhao, Feng Chen, Jin-Hee Cho, Wei Hua, Haifeng Chen
2024 conf
LKM@IJCAI
Hongbin Ye, Tong Liu, Aijia Zhang, Wei Hua, Weiqiang Jia
2024 conf
BigComp
Bowen Gan, X. Sean Wang, Yibing Shi, Wei Hua
2024 J jnl
CoRR
Yechi Ma, Shuoquan Wei, Churun Zhang, Wei Hua, Yanan Li, Shu Kong
2024 J jnl
Inf. Fusion
Aijia Zhang, Weiqiang Jia, Zhiguo Wan, Wei Hua, Zisong Zhao
2023 J jnl
IEEE Geosci. Remote. Sens. Lett.
Lisheng Song, Zhonghao Ding, William P. Kustas, Wei Hua, Xinjie Liu, Liangyun Liu, Shaomin Liu, Mingguo Ma, Yan Bai, Ziwei Xu
2023 J jnl
CoRR
Hongbin Ye, Honghao Gui, Aijia Zhang, Tong Liu, Wei Hua, Weiqiang Jia
2023 J jnl
Signal Image Video Process.
Meihua Gu, Wei Hua, Jie Liu
2023 J jnl
CoRR
Hongbin Ye, Tong Liu, Aijia Zhang, Wei Hua, Weiqiang Jia
2023 J jnl
CoRR
Yechi Ma, Neehar Peri, Shuoquan Wei, Wei Hua, Deva Ramanan, Yanan Li, Shu Kong
2023 A conf
ICME
Hui Su, Yue Ye, Wei Hua, Lechao Cheng, Mingli Song
2022 J jnl
CoRR
Hui Su, Yue Ye, Wei Hua, Lechao Cheng, Mingli Song
2022 J jnl
Comput. Methods Programs Biomed.
Tingting Chen, Bing Xu, Hui Chen, Yuanyuan Sun, Jiahang Song, Xinchen Sun, Xizhi Zhang, Wei Hua
2021 J jnl
J. Am. Medical Informatics Assoc.
Teresa B. Gibson, Michael D. Nguyen, Timothy Burrell, Frank Yoon, Jenna Wong, Sai Dharmarajan, Rita Ouellet-Hellstrom, Wei Hua, Yong Ma, Elande Baro, Sarah Bloemers, Cory Pack, Adee Kennedy, Sengwee Toh, Robert Ball
2021 J jnl
Remote. Sens.
Wei Hua, Miaole Hou, Yunfei Qiao, Xuesheng Zhao, Shishuo Xu, Songnian Li
2020 conf
ECCV (8)
Xiaofang Wang, Xuehan Xiong, Maxim Neumann, A. J. Piergiovanni, Michael S. Ryoo, Anelia Angelova, Kris M. Kitani, Wei Hua
2020 J jnl
CoRR
Xiaofang Wang, Xuehan Xiong, Maxim Neumann, A. J. Piergiovanni, Michael S. Ryoo, Anelia Angelova, Kris M. Kitani, Wei Hua
2019 A* conf
CVPR
Chenxi Liu, Liang-Chieh Chen, Florian Schroff, Hartwig Adam, Wei Hua, Alan L. Yuille, Li Fei-Fei
2019 J jnl
CoRR
Chenxi Liu, Liang-Chieh Chen, Florian Schroff, Hartwig Adam, Wei Hua, Alan L. Yuille, Li Fei-Fei
2019 J jnl
CoRR
Camillo Lugaresi, Jiuqiang Tang, Hadon Nash, Chris McClanahan, Esha Uboweja, Michael Hays, Fan Zhang, Chuo-Ling Chang, Ming Guang Yong, Juhyun Lee, Wan-Teh Chang, Wei Hua, Manfred Georg, Matthias Grundmann
2019 J jnl
IEICE Electron. Express
Donglin He, Yizhen Wei, Shuang Cui, Wei Hua, Xueyu Duan, Liang Liu
2018 conf
CISP-BMEI
Wei Hua, Youshen Xia
2018 conf
ECCV (1)
Chenxi Liu, Barret Zoph, Maxim Neumann, Jonathon Shlens, Wei Hua, Li-Jia Li, Li Fei-Fei, Alan L. Yuille, Jonathan Huang, Kevin Murphy
2017 J jnl
Multim. Tools Appl.
Wei Hua, Xiaofeng Liao
2017 J jnl
Biomed. Signal Process. Control.
Shanshan Chen, Wei Hua, Zhi Li, Jian Li, Xingjiao Gao
2017 J jnl
CoRR
Chenxi Liu, Barret Zoph, Jonathon Shlens, Wei Hua, Li-Jia Li, Li Fei-Fei, Alan L. Yuille, Jonathan Huang, Kevin Murphy
2017 conf
ICIG (2)
Wei Hua, Fei Chen
2015 J jnl
Database J. Biol. Databases Curation
Jingyin Yu, Tao Ke, Sadia Tehrim, Fengming Sun, Boshou Liao, Wei Hua
2011 J jnl
Neurocomputing
Guanhong Yao, Wei Hua, Binbin Lin, Deng Cai
2010 J jnl
Vis. Comput.
Chunxia Xiao, Yongwei Nie, Wei Hua, Wenting Zheng
2008 J jnl
Mach. Vis. Appl.
Yi Li, Wei Hua, Chengen Guo, Haisong Gu, Jinman Kang, Xiangrong Chen
2006 J jnl
IEEE Trans. Veh. Technol.
Lie-Liang Yang, Wei Hua, Lajos Hanzo
2006 J jnl
Appl. Math. Comput.
Jian-Qiang Sun, Zhong-Qi Ma, Wei Hua, Meng-Zhao Qin
2006 B conf
AVSS
Xingzhi Luo, Suchendra M. Bhandarkar, Wei Hua, Haisong Gu
2006 conf
ICPR (1)
Qi Zhao, Jinman Kang, Hai Tao, Wei Hua
2006 conf
Edutainment
Liying Wang, Wei Hua
2004 B conf
ICIP
Mei Han, Amit Sethi, Wei Hua, Yihong Gong
2004 J jnl
Comput. Vis. Image Underst.
Yihong Gong, Mei Han, Wei Hua, Wei Xu
2003 C conf
CAIP
Terrence Chen, Mei Han, Wei Hua, Yihong Gong, Thomas S. Huang
2003 B conf
PIMRC
Lie-Liang Yang, Wei Hua, Lajos Hanzo
2002 A* conf
ACM Multimedia
Mei Han, Wei Hua, Wei Xu, Yihong Gong
2002 conf
ICME (1)
Wei Hua, Mei Han, Yihong Gong
2002 conf
ICME (1)
Yihong Gong, Xin Liu, Wei Hua
2001 A* conf
ICRA
Wei Hua, Chen Zhou
1999 J jnl
Appl. Math. Comput.
Prabir Daripa, Wei Hua
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"