Haiqing Huang

37 papers Misc 1Journal 34Unranked 2
YearRankTypeTitle / Venue / Authors
2026 J jnl
Eng. Appl. Artif. Intell.
Jin Qi, Haiqing Huang, Jie Hu, Yinghong Peng
2026 J jnl
IEEE Trans. Cybern.
Haiqing Huang, Yi Niu, Xiao Zheng, Ben Niu, Xudong Zhao, Ding Wang
2026 J jnl
IEEE Trans. Syst. Man Cybern. Syst.
Yi Niu, Haiqing Huang, Ben Niu, Guangdeng Zong, Wenqi Zhou, Xiao Zheng, Yunfei Mu
2025 J jnl
CoRR
Chao Ding, Mouxiao Bian, Pengcheng Chen, Hongliang Zhang, Tianbin Li, Lihao Liu, Jiayuan Chen, Zhuoran Li, Yabei Zhong, Yongqi Liu, Haiqing Huang, Dongming Shan, Junjun He, Jie Xu
2025 J jnl
Simul. Model. Pract. Theory
Jing Guo, Jin Qi, Jie Hu, Chengan Hong, Yuliang Shen, Haiqing Huang, Weijie Liu
2024 J jnl
IEEE Trans. Geosci. Remote. Sens.
Youzhi Li, Zhihua Mao, Zhenge Qiu, Bangyi Tao, Haiqing Huang, Hui Li, Zhengyi Wang, Xianliang Zhang, Longwei Zhang
2024 J jnl
IEEE Trans. Geosci. Remote. Sens.
Yan Zhou, Zhihua Mao, Zexi Mao, Xianliang Zhang, Longwei Zhang, Haiqing Huang
2024 J jnl
Remote. Sens.
Chengxin Zhang, Bangyi Tao, Yunzhou Li, Libo Ai, Yixian Zhu, Liansong Liang, Haiqing Huang, Changpeng Li
2024 J jnl
Remote. Sens.
Congshuang Xie, Peng Chen, Siqi Zhang, Haiqing Huang
2024 J jnl
Remote. Sens.
Xuan Sang, Zhihua Mao, Youzhi Li, Xianliang Zhang, Chang Han, Longwei Zhang, Haiqing Huang
2024 J jnl
IEEE Trans. Geosci. Remote. Sens.
Tianjing Luan, Bangyi Tao, Yan He, Jizhe Li, Xiaoming Fu, Jiayong Yu, Yunzhou Li, Haiqing Huang, Zhihua Mao, Hongtao Wang
2023 J jnl
IEEE Geosci. Remote. Sens. Lett.
Youzhi Li, Zhihua Mao, Zhenge Qiu, Kuifeng Luan, Bangyi Tao, Haiqing Huang, Chunling Zhang
2023 J jnl
IEEE Trans. Geosci. Remote. Sens.
Zhongqiang Wu, Bangyi Tao, Zhihua Mao, Haiqing Huang
2023 J jnl
Remote. Sens.
Zhengyi Wang, Zhihua Mao, Longwei Zhang, Xianliang Zhang, Dapeng Yuan, Youzhi Li, Zhongqiang Wu, Haiqing Huang, Qiankun Zhu
2023 J jnl
Remote. Sens.
Rui Niu, Yiyang Tan, Feng Ye, Fang Gong, Haiqing Huang, Qiankun Zhu, Zengzhou Hao
2022 J jnl
Remote. Sens.
He Cui, Jianyu Chen, Zhenyi Cao, Haiqing Huang, Fang Gong
2022 J jnl
Remote. Sens.
Changpeng Li, Bangyi Tao, Yalin Liu, Shugang Zhang, Zhao Zhang, Qingjun Song, Zhibing Jiang, Shuangyan He, Haiqing Huang, Zhihua Mao
2022 J jnl
Adv. Eng. Informatics
Jin Qi, Jie Hu, Haiqing Huang, Yinghong Peng
2022 J jnl
IEEE Trans. Geosci. Remote. Sens.
Zhihua Mao, Peng Chen, Bangyi Tao, Jing Ding, Jianqiang Liu, Jianyu Chen, Zengzhou Hao, Qiankun Zhu, Haiqing Huang
2022 J jnl
IEEE Trans. Geosci. Remote. Sens.
Jizhe Li, Bangyi Tao, Yan He, Youzhi Li, Haiqing Huang, Zhihua Mao, Jiayong Yu
2022 J jnl
Remote. Sens.
Zhihua Mao, Yiwei Zhang, Bangyi Tao, Jianyu Chen, Zengzhou Hao, Qiankun Zhu, Haiqing Huang
2021 J jnl
IEEE Trans. Geosci. Remote. Sens.
Zhihua Mao, Bangyi Tao, Jianyu Chen, Peng Chen, Zengzhou Hao, Qiankun Zhu, Haiqing Huang
2021 J jnl
Artif. Intell. Eng. Des. Anal. Manuf.
Siyu Zhu, Jin Qi, Jie Hu, Haiqing Huang
2020 J jnl
Remote. Sens.
Zhihua Mao, Bangyi Tao, Peng Chen, Jianyu Chen, Zengzhou Hao, Qiankun Zhu, Haiqing Huang
2020 J jnl
Libr. Trends
Xing Zhao, Li Shu'ning, Xiao Ya'nan, Haiqing Huang
2019 J jnl
IEEE Trans. Geosci. Remote. Sens.
Hao Li, Xianqiang He, Palanisamy Shanmugam, Yan Bai, Difeng Wang, Haiqing Huang, Qiankun Zhu, Fang Gong
2019 J jnl
Remote. Sens.
Anpeng He, Xianqiang He, Yan Bai, Qiankun Zhu, Fang Gong, Haiqing Huang, Delu Pan
2017 J jnl
J. Cogn. Neurosci.
Nathan M. Petro, L. Forest Gruss, Siyang Yin, Haiqing Huang, Vladimir Miskovic, Mingzhou Ding, Andreas Keil
2016 J jnl
Remote. Sens.
Zhihua Mao, Delu Pan, Xianqiang He, Jianyu Chen, Bangyi Tao, Peng Chen, Zengzhou Hao, Yan Bai, Qiankun Zhu, Haiqing Huang
2016 J jnl
Brain Connect.
Haiqing Huang, Mingzhou Ding
2014 J jnl
Remote. Sens.
Xiaoping Zhang, Delu Pan, Jianyu Chen, Jianhua Zhao, Qiankun Zhu, Haiqing Huang
2014 conf
Earth Observing Systems
Peng Chen, Delu Pan, Chuanwen Hu, Jianyu Chen, Haiqing Huang
2013 J jnl
NeuroImage
Jue Mo, Yuelu Liu, Haiqing Huang, Mingzhou Ding
2013 Misc conf
ICNC
Haiqing Huang, Xiangzhong Fang, Xiangyang Li, Qingchun Lu, Hang Ren
2013 conf
FSKD
Haiqing Huang, Xiangzhong Fang, Xiangyang Li, Qingchun Lu, Hang Ren
2010 J jnl
Ecol. Informatics
Zhihua Mao, Venetia Stuart, Delu Pan, Jianyu Chen, Fang Gong, Haiqing Huang, Qiankun Zhu
2010 J jnl
Sci. China Inf. Sci.
Zhihua Mao, Jianyu Chen, Haiqing Huang, Xianqiang He, Fang Gong
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)