Kaili Zhang

43 papers A 2C 3Misc 1Journal 29Unranked 7
YearRankTypeTitle / Venue / Authors
2026 J jnl
Microelectron. J.
Yefan Xu, Kaili Zhang, Deming Zhang, Yu Gong, Hao Cai, You Wang, Weiqiang Liu
2025 J jnl
IEEE Access
Kaili Zhang, Xiaoxu Zhu
2025 J jnl
IEEE Trans. Circuits Syst. I Regul. Pap.
Zhongzhen Tong, Sifan Sun, Kaili Zhang, Chenghang Li, Jiye Yao, Yulong Qiu, Chao Wang, Zhaohao Wang, Ke Zhang, Amara Amara, Xiaoyang Lin, Weisheng Zhao
2025 J jnl
Expert Syst. Appl.
Pengfei Zhao, Kaili Zhang, Haibin Zhang, Haibin Chen
2025 J jnl
Comput. Electron. Agric.
Yiwen Chen, Taifeng Guo, Xiaoyi Shi, Huanbo Yang, Kaili Zhang, Liangliang Yang, Yaohua Hu
2025 A conf
ICCAD
Bojun Zhang, Jinkai Wang, Xianan Zhu, Ziyuan Guo, Zhengkun Gu, Kaili Zhang, Zhizhong Zhang, Kun Zhang, Weisheng Zhao, Yue Zhang
2025 J jnl
IEEE Trans. Circuits Syst. II Express Briefs
Zhongzhen Tong, Sifan Sun, Kaili Zhang, Chenghang Li, Daming Zhou, Zhaohao Wang, Xiaoyang Lin, Weisheng Zhao
2025 J jnl
Int. J. Inf. Commun. Technol.
Honghua Qiu, Kaili Zhang
2025 J jnl
Knowl. Based Syst.
Xijun Liang, Kaili Zhu, An Xiao, Ya Wen, Kaili Zhang, Suhang Wang, Ling Jian
2024 J jnl
IEEE Trans. Circuits Syst. II Express Briefs
Kaili Zhang, Zhongzhen Tong, XinXin Liang, Chengzhi Wang, You Wang, Yue Zhang, Weisheng Zhao, Lang Zeng, Deming Zhang
2024 J jnl
IEEE Trans. Circuits Syst. II Express Briefs
Zhipeng Guo, Deming Zhang, Kaili Zhang, Mingyang Song, Yue Zhang, Lang Zeng
2024 J jnl
Ecol. Informatics
Chengyu Meng, Yimei Chen, Jiexin Yang, Xinyi Su, Wei Guo, Kaili Zhang
2023 J jnl
IEEE Trans. Circuits Syst. I Regul. Pap.
Kaili Zhang, Deming Zhang, Mingyang Song, Zhipeng Guo, You Wang, Chengzhi Wang, Yue Zhang, Lang Zeng
2023 J jnl
Concurr. Comput. Pract. Exp.
Junkai Feng, Haibin Zhang, Kaili Zhang, Pengfei Zhao
2023 J jnl
Appl. Intell.
Xijun Liang, Qi Yu, Kaili Zhang, Pan Zeng, Ling Jian
2023 J jnl
Remote. Sens.
Yipeng Wang, Hongyi Cheng, Naiang Wang, Chufang Huang, Kaili Zhang, Bin Qiao, Yuanyuan Wang, Penghui Wen
2022 J jnl
Remote. Sens.
Kaili Zhang, Yonggang Chen, Bokun Zhang, Junjie Hu, Wentao Wang
2022 Misc conf
ICASSP
Kaili Zhang, Cheng Gong, Wenhuan Lu, Longbiao Wang, Jianguo Wei, Dawei Liu
2022 ch.
Approximate Computing
You Wang, Hao Cai, Kaili Zhang, Bo Wu, Bo Liu, Deming Zhang, Weisheng Zhao
2022 J jnl
CCF Trans. High Perform. Comput.
Jia Wei, Mo Chen, Longxiang Wang, Pei Ren, Yujia Lei, Yuqi Qu, Qiyu Jiang, Xiaoshe Dong, Weiguo Wu, Qiang Wang, Kaili Zhang, Xingjun Zhang
2021 J jnl
Asia Pac. J. Oper. Res.
Kaili Zhang, Haibin Zhang, Pengfei Zhao, Haibin Chen
2021 conf
NVMSA
Xian Wang, Deming Zhang, Kaili Zhang, Erya Deng, You Wang, Weisheng Zhao
2021 C conf
ISCAS
Deming Zhang, Xian Wang, Kaili Zhang, Lang Zeng, You Wang, Bi Wang, Erya Deng, Chuanjie Wang, Peng Wu, Youguang Zhang, Weisheng Zhao
2021 J jnl
CoRR
Xudong Dai, Cheng Gong, Longbiao Wang, Kaili Zhang
2021 A conf
Interspeech
Xudong Dai, Cheng Gong, Longbiao Wang, Kaili Zhang
2021 conf
CECNet
Xiaobo Li, Guoli Feng, Run Ma, Lu Lu, Kaili Zhang, Xinnan Ha, Wenbin Wei, Ning Wang, Xiaosong Yu, Yongli Zhao
2021 conf
ICTA
Bo Wu, Kaili Zhang, Peng Wu, Deming Zhang, You Wang
2020 J jnl
IEEE Access
Kaili Zhang, Deming Zhang, Chengzhi Wang, Lang Zeng, You Wang, Weisheng Zhao
2020 J jnl
Comput. Animat. Virtual Worlds
Xianxuan Lin, Xun Wang, Frederick W. B. Li, Jinyu Li, Bailin Yang, Kaili Zhang, Tianxiang Wei
2020 C conf
ISCAS
Kaili Zhang, Deming Zhang, Chengzhi Wang, Lang Zeng, Weisheng Zhao
2019 J jnl
Int. J. Comput. Math.
Kaili Zhang, Haibin Zhang, Pengfei Zhao, Xueyong Wang
2019 conf
NANOARCH
Chengzhi Wang, Deming Zhang, Lang Zeng, Kaili Zhang, Youguang Zhang, Weisheng Zhao
2018 J jnl
IEEE Access
Zhongke Gao, Zibo Wang, Chao Ma, Wei-Dong Dang, Kaili Zhang
2018 J jnl
Knowl. Based Syst.
Zhongke Gao, Kaili Zhang, Wei-Dong Dang, Yuxuan Yang, Zibo Wang, Haibin Duan, Guanrong Chen
2018 conf
VRCAI
Xianxuan Lin, Xun Wang, Frederick W. B. Li, Bailin Yang, Kaili Zhang, Tianxiang Wei
2018 J jnl
Neurocomputing
Yan Tian, Kaili Zhang, Jianyuan Li, Xianxuan Lin, Bailin Yang
2018 J jnl
Comput. Electron. Agric.
Ning Liang, Fupeng Ni, Kaili Zhang, Yi Tang, Yaohua Hu
2017 J jnl
Cogn. Process.
Pei Wang, Qin Zhang, Yuting Liu, He Bai, Kaili Zhang
2017 J jnl
J. Sensors
Peng Guo, Bo Deng, Xiang Lan, Kaili Zhang, Hongyuan Li, Zhenhua Tian, Hong Xu
2016 J jnl
J. Comput. Appl. Math.
Kaili Zhang, Yiju Wang
2015 conf
ChinaSIP
Kaili Zhang, Qian He, Zishu He, Yimin D. Zhang
2015 C conf
ICICS
Kaili Zhang, Qian He, Zishu He, Yimin D. Zhang
2012 conf
ICIRA (1)
Min Lei, Guang Meng, Yudong Gu, Kaili Zhang
redb/extractors/js_extractors/js_deobfuscator.py
← Index redb/extractors/js_extractors/js_deobfuscator.py python
"""Subprocess-driven JavaScript deobfuscator with jsbeautifier fallback.

Owns the heavy lifting that was previously embedded inside
`JSDeobfuscationExtractor` (`_run_deobfuscator` + `_try_jsbeautifier`). Exposed
as a single module-level entry point `deobfuscate(source, log)` so it can be
called from `JSContext.deobfuscated` (cached per sample) without dragging
extractor state through the call.

Configuration (env vars):
    JS_DEOBFUSCATOR_PATH    Path or name of the external tool (default: webcrack).
    JS_DEOBFUSCATE_TIMEOUT  Seconds before the external tool is killed
                            (process-group SIGTERM, then SIGKILL). Default: 60.

If the external tool produces non-empty output and exits 0, that wins. Otherwise
the source is run through jsbeautifier (which only normalises formatting, but
already exposes strings hidden by minification). If neither path produces
output, returns (None, None).

`FileNotFoundError` for the external tool is treated as routine — the analysis
server is either provisioned with the tool or it isn't — and demoted to a
debug-level log.
"""

import os
import signal
import subprocess
import tempfile
from typing import Optional, Tuple

DEFAULT_DEOBFUSCATOR = "webcrack"
DEFAULT_TIMEOUT_SECS = 60


def _run_external(
    source: str, deobfuscator_path: str, timeout: int, log
) -> Tuple[Optional[str], int]:
    """Run the configured external deobfuscator over `source` and capture stdout.

    Returns (text, returncode). `text` is `None` and `returncode` is `-1` when
    the binary is missing, the run timed out, or any other unexpected failure
    occurred. Missing-binary is logged at debug; timeouts and unexpected errors
    surface at warning/error.
    """
    try:
        with tempfile.NamedTemporaryFile(
            suffix=".js", mode="w", delete=False, encoding="utf-8"
        ) as tmp:
            tmp.write(source)
            tmp_path = tmp.name

        try:
            process = subprocess.Popen(
                [deobfuscator_path, tmp_path],
                stdout=subprocess.PIPE,
                stderr=subprocess.PIPE,
                preexec_fn=os.setsid,
            )

            try:
                stdout, _ = process.communicate(timeout=timeout)
                return stdout.decode("utf-8", errors="replace"), process.returncode
            except subprocess.TimeoutExpired:
                # Kill the entire process group so spawned helpers (e.g. node
                # subprocesses webcrack itself launches) get cleaned up too.
                try:
                    os.killpg(os.getpgid(process.pid), signal.SIGTERM)
                    process.wait(timeout=5)
                except Exception:
                    try:
                        os.killpg(os.getpgid(process.pid), signal.SIGKILL)
                    except Exception:
                        pass
                log.warning(f"Deobfuscation timed out after {timeout}s")
                return None, -1
        finally:
            try:
                os.unlink(tmp_path)
            except Exception:
                pass
    except FileNotFoundError:
        log.debug(f"Deobfuscator binary not found at {deobfuscator_path}")
        return None, -1
    except Exception as e:
        log.error(f"Error running deobfuscator: {e}")
        return None, -1


def _try_jsbeautifier(source: str, log) -> Tuple[Optional[str], Optional[str]]:
    """Fallback path: format the source with jsbeautifier. Returns
    `(text, "jsbeautifier")` or `(None, None)` if jsbeautifier isn't installed
    or the call raised."""
    try:
        import jsbeautifier
        opts = jsbeautifier.default_options()
        opts.indent_size = 2
        return jsbeautifier.beautify(source, opts), "jsbeautifier"
    except ImportError:
        log.debug("jsbeautifier not available")
        return None, None
    except Exception as e:
        log.warning(f"jsbeautifier failed: {e}")
        return None, None


def deobfuscate(source: str, log) -> Tuple[Optional[str], Optional[str]]:
    """Run the configured external deobfuscator, falling back to jsbeautifier.

    Returns `(text, normalizer_used)` on success, or `(None, None)` when neither
    path produced non-empty output. `normalizer_used` is the basename of the
    external tool (e.g. `"webcrack"`) or the literal `"jsbeautifier"`.
    """
    if not source:
        return None, None

    deobfuscator_path = os.getenv("JS_DEOBFUSCATOR_PATH", DEFAULT_DEOBFUSCATOR)
    timeout = int(os.getenv("JS_DEOBFUSCATE_TIMEOUT", str(DEFAULT_TIMEOUT_SECS)))

    text, returncode = _run_external(source, deobfuscator_path, timeout, log)
    if text and returncode == 0 and text.strip():
        return text, os.path.basename(deobfuscator_path)

    return _try_jsbeautifier(source, log)