Haixiang Guo

54 papers B 4Journal 44Unranked 6
YearRankTypeTitle / Venue / Authors
2026 J jnl
Comput. Oper. Res.
Qin Guo, Ya Qiu, Yong Shi, Qiaoxian Zheng, Haixiang Guo
2026 J jnl
Ann. Oper. Res.
Yang Wu, Haixiang Guo, Jianming Yao, Hongyuan Luo
2025 J jnl
Complex Intell. Syst.
Kehong Yuan, Youlin Shang, Haixiang Guo, Yongsheng Dong, Zhonghua Liu
2025 J jnl
Inf. Sci.
Wenkai Zhang, Hengxia Gao, Haixiang Guo, Dragan Pamucar
2025 J jnl
IEEE J. Sel. Top. Appl. Earth Obs. Remote. Sens.
Yue Shen, Xianmin Wang, Xiaoyu Yi, Li Cao, Haixiang Guo, Haixia Mao, Xubing Zhang, Chen Liu, Xuewen Wang
2025 J jnl
ISPRS Int. J. Geo Inf.
Xin Gao, Xianmin Wang, Li Cao, Haixiang Guo, Wenxue Chen, Xing Zhai
2024 J jnl
Int. J. Appl. Earth Obs. Geoinformation
Xuewen Wang, Xianmin Wang, Yuchen Zheng, Zhiwei Liu, Wenxiang Xia, Haixiang Guo, Dongdong Li
2024 J jnl
Remote. Sens.
Aomei Zhang, Xianmin Wang, Chong Xu, Qiyuan Yang, Haixiang Guo, Dongdong Li
2024 J jnl
IEEE Trans. Geosci. Remote. Sens.
Xuewen Wang, Xianmin Wang, Haixiang Guo, Aomei Zhang
2024 J jnl
Comput. Ind. Eng.
Yang Wu, Haixiang Guo, Yong Shi, Wenkai Zhang, Lei Wang
2023 J jnl
Remote. Sens.
Qiyuan Yang, Xianmin Wang, Xinlong Zhang, Jianping Zheng, Yu Ke, Lizhe Wang, Haixiang Guo
2023 J jnl
Soft Comput.
Fang Wan, Haixiang Guo, Wenwen Pan, Jundong Hou, Shengli Chen
2023 J jnl
Int. J. Digit. Earth
Xuewen Wang, Xianmin Wang, Xinlong Zhang, Lizhe Wang, Haixiang Guo, Dongdong Li
2023 J jnl
Comput. Ind. Eng.
Haixiang Guo, Lijuan Gao, Yong Shi, Yang Wu, Lei Wang, Wenkai Zhang
2022 J jnl
Eng. Appl. Artif. Intell.
Junwei Ma, Ding Xia, Yankun Wang, Xiaoxu Niu, Sheng Jiang, Zhiyang Liu, Haixiang Guo
2022 J jnl
Sensors
Junwei Ma, Sheng Jiang, Zhiyang Liu, Zhiyuan Ren, Dongze Lei, Chunhai Tan, Haixiang Guo
2022 J jnl
Sensors
Sheng Jiang, Junwei Ma, Zhiyang Liu, Haixiang Guo
2021 J jnl
Appl. Soft Comput.
Fang Wan, Haixiang Guo, Jinling Li, Mingyun Gu, Wenwen Pan, Yangjian Ying
2021 J jnl
Comput. Geosci.
Linfei Chen, Haixiang Guo, Peisong Gong, Yuying Yang, Zhili Zuo, Mingyun Gu
2019 conf
ICNC-FSKD
Jinling Li, Yuying Yang, Thomas L. Saaty, Haixiang Guo
2019 J jnl
Comput. Ind. Eng.
Can Liao, Haixiang Guo, Kejun Zhu, Jennifer Shang
2019 J jnl
Complex.
Can Liao, Kejun Zhu, Haixiang Guo, Jian Tang
2018 J jnl
Soft Comput.
Haixiang Guo, Wenwen Pan, Xiao Liu, Yijing Li, Bo Zeng
2018 J jnl
Knowl. Based Syst.
Yijing Li, Haixiang Guo, Qingpeng Zhang, Mingyun Gu, Jianying Yang
2018 J jnl
CoRR
Yanan Li, Haixiang Guo, Andrew P. Paplinski
2018 J jnl
Int. J. Model. Simul. Sci. Comput.
Kejun Zhu, Jian Tang, Haixiang Guo, Chengzhu Gong, Jinling Li
2018 J jnl
Simul. Model. Pract. Theory
Jian Tang, Kejun Zhu, Haixiang Guo, Chengzhu Gong, Can Liao, Shuwen Zhang
2017 J jnl
Expert Syst. Appl.
Haixiang Guo, Yijing Li, Jennifer Shang, Mingyun Gu, Huang Yuanyue, Gong Bing
2017 J jnl
Knowl. Based Syst.
Shuwen Zhang, Haixiang Guo, Kejun Zhu, Shiwei Yu, Jinling Li
2017 J jnl
Soft Comput.
Yanan Li, Haixiang Guo, Xiao Liu, Yijing Li, Wenwen Pan, Bing Gong, Shaoning Pang
2017 J jnl
Algorithms
Jian Tang, Kejun Zhu, Haixiang Guo, Can Liao, Shuwen Zhang
2016 J jnl
Knowl. Based Syst.
Yijing Li, Haixiang Guo, Xiao Liu, Yanan Li, Jinling Li
2016 J jnl
Appl. Intell.
Haixiang Guo, Yanan Li, Xiao Liu, Yijing Li, Han Sun
2016 J jnl
Eng. Appl. Artif. Intell.
Haixiang Guo, Yijing Li, Yanan Li, Xiao Liu, Jinling Li
2014 J jnl
Int. J. Comput. Appl. Technol.
Han Sun, Huan Zhang, Haixiang Guo, Jinhua Cheng
2014 J jnl
Swarm Evol. Comput.
Haixiang Guo, Yanan Li, Jinling Li, Han Sun, Deyun Wang, Xiaohong Chen
2014 J jnl
Int. J. Manuf. Res.
Deyun Wang, Haixiang Guo, Kejun Zhu
2013 B conf
IJCNN
Bo Zhou, Cheng Yang, Haixiang Guo, Jinglu Hu
2013 B conf
IJCNN
Yuling Lin, Haixiang Guo, Jinglu Hu
2013 J jnl
J. Digit. Inf. Manag.
Jinling Li, Haixiang Guo, Kejun Zhu, Deyun Wang, Jinglu Hu
2012 J jnl
Appl. Soft Comput.
Han Sun, Haixiang Guo, Jinglu Hu, Kejun Zhu
2012 J jnl
Expert Syst. Appl.
Haixiang Guo, Jinglu Hu, Shiwei Yu, Han Sun, Yuyan Chen
2012 conf
ICSI (2)
Zhi Li, Haixiang Guo, Longhui Liu, Juan Yang, Peng Yuan
2011 J jnl
Appl. Soft Comput.
Haixiang Guo, Xiuwu Liao, Kejun Zhu, Chang Ding, Yanhui Gao
2010 J jnl
Expert Syst. Appl.
Haixiang Guo, Kejun Zhu, Chang Ding, Lanlan Li
2010 conf
ACFIE
Haixiang Guo, Kejun Zhu, Lanlan Li, Juan Yang
2009 B conf
IJCNN
Haixiang Guo, Lanlan Li, Kejun Zhu, Chang Ding
2009 J jnl
Expert Syst. Appl.
Haixiang Guo, Kejun Zhu, Si-wei Gao, Yue Li, Jing-Jing Zhou
2008 J jnl
Expert Syst. Appl.
Kejun Zhu, Haixiang Guo, Fengqin Diao, Sixin Xu
2008 J jnl
Appl. Soft Comput.
Haixiang Guo, Fengqin Diao, Kejun Zhu, Jinling Li, Yanmin Xing
2008 B conf
FUZZ-IEEE
Yong He, Kejun Zhu, Si-wei Gao, Ting Liu, Haixiang Guo
2007 conf
ICNC (4)
Haixiang Guo, Kejun Zhu, Deyun Wang, Jinjin Zhou, Yue Li
2006 conf
ISNN (2)
Haixiang Guo, Kejun Zhu, Jinling Li, Yanmin Xing
2006 conf
ICDM Workshops
Haixiang Guo, Kejun Zhu, Si-wei Gao, Ting Liu
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"