Xiaojun Huang

40 papers B 1C 1Journal 27Unranked 11
YearRankTypeTitle / Venue / Authors
2026 J jnl
Expert Syst. Appl.
Kong Li, Zhe Dai, Xiaojun Huang, Shi Dong, Shuling Wang
2025 J jnl
Vis. Comput.
Jinyang Wang, Xuequan Lu, Haoxuan Li, Xiaojun Huang, Jun Xia
2025 J jnl
Int. J. Digit. Earth
Shubo Zhang, Siqin Tong, Jinyuan Ren, Gang Bao, Xiaojun Huang, Yuhai Bao, Altantuya Dorjsuren
2025 J jnl
Vis. Comput.
Jinyang Wang, Xuequan Lu, Haoxuan Li, Xiaojun Huang, Jun Xia
2025 J jnl
PLoS Comput. Biol.
Zhongyuan Cui, Xia Lei, Yani Gou, Zhixian Wu, Xiaojun Huang
2025 J jnl
IEEE Trans. Veh. Technol.
Xiaojun Huang, Jun Zhang, Wenchao Xia, Shu Cai, Fada Fan, Chau Yuen
2025 J jnl
Vis. Comput.
Jinyang Wang, Jihong Wang, Haoxuan Li, Xiaojun Huang, Jun Xia, Zhen Li, Weibing Wu, Bin Sheng
2025 J jnl
Vis. Comput.
Jinyang Wang, Xuequan Lu, Haoxuan Li, Xiaojun Huang, Jun Xia
2024 J jnl
Axioms
Sheng Wang, Xiaojun Huang
2024 J jnl
Int. J. Digit. Earth
Li Mei, Siqin Tong, Shan Yin, Yuhai Bao, Yongfang Wang, Enliang Guo, Fei Li, Xiaojun Huang, Alateng Tuya, Dongwei Liu, Lumen Chao, Jinyuan Ren
2024 J jnl
Int. J. Bifurc. Chaos
Mingshan Li, Naiming Xie, Lei Shi, Xiaojun Huang
2024 J jnl
IEEE Trans. Veh. Technol.
Xiaojun Huang, Kaizhe Xu, Yu Han, Jun Zhang, Shi Jin, Shaodan Ma
2024 J jnl
Ecol. Informatics
Siyuan Zhang, Xiaojun Huang, Lei Ma, Ganbat Dashzebeg, Mungunkhuyag Ariunaa, Gang Bao, Siqin Tong, Yuhai Bao, Altanchimeg Dorjsuren, Davaadorj Enkhnasan
2024 J jnl
IEEE Trans. Commun.
Jun Zhang, Xiaojun Huang, Yu Han, Kaizhe Xu, Shi Jin, Shaodan Ma
2023 J jnl
Sensors
Guoliang Luo, Guoming Xiong, Xiaojun Huang, Xin Zhao, Yang Tong, Qiang Chen, Zhiliang Zhu, Hao-Peng Lei, Juncong Lin
2023 J jnl
IEEE J. Sel. Top. Appl. Earth Obs. Remote. Sens.
Haoqiang Zhou, Gang Bao, Fei Li, Jiquan Chen, Siqin Tong, Xiaojun Huang, Enliang Guo, Yuhai Bao, Wendu Rina
2023 J jnl
IEICE Trans. Commun.
Feng Tian, Wan Liu, Weibo Fu, Xiaojun Huang
2023 J jnl
Phys. Commun.
Xiaojun Huang, Jiacheng Lu, Jun Zhang, Qi Zhang, Shu Cai, Wenwan Xu
2023 C conf
ICCC
Xiaojun Huang, Jun Zhang, Yu Han, Kaizhe Xu, Shi Jin, Shaodan Ma
2022 J jnl
Remote. Sens.
Guilin Xi, Xiaojun Huang, Yaowen Xie, Gang Bao, Yuhai Bao, Ganbat Dashzebeg, Tsagaantsooj Nanzad, Altanchimeg Dorjsuren, Davaadorj Enkhnasan, Mungunkhuyag Ariunaa
2022 J jnl
Int. J. Bifurc. Chaos
Mingshan Li, Naiming Xie, Ran Zhang, Xiaojun Huang
2022 J jnl
Remote. Sens.
Xiujuan Li, Yongxin Liu, Pingping Huang, Tong Tong, Linyuan Li, Yuejuan Chen, Ting Hou, Yun Su, Xiaoqi Lv, Wenxue Fu, Xiaojun Huang
2022 J jnl
Int. J. Gen. Syst.
Xiaojun Huang, Xian Wang
2022 J jnl
Remote. Sens.
Li Mei, Siqin Tong, Shan Yin, Yuhai Bao, Xiaojun Huang, Alateng Tuya
2021 J jnl
Comput. Electron. Agric.
Xu Li, Jiandong Pan, Fangping Xie, Jinping Zeng, Qiao Li, Xiaojun Huang, Dawei Liu, Xiushan Wang
2021 conf
Agro-Geoinformatics
Jie Shan, Lin Qiu, Miao Tian, Jingjing Wang, Zhiming Wang, Xiaojun Huang
2021 conf
Agro-Geoinformatics
Jingjing Wang, Lin Qiu, Zhiming Wang, Xiaojun Huang, Jie Shan, Mu Li
2020 J jnl
IEEE Access
Wendu Rina, Gang Bao, Siqin Tong, Yuhai Bao, Yin Shan, Xiaojun Huang, Hong Ying, Lingtong Du
2018 J jnl
Sensors
Mingzhen Li, Chengke Zhou, Wenjun Zhou, Chunlin Wang, Leiming Yao, Mengting Su, Xiaojun Huang
2018 conf
Agro-Geoinformatics
Jingjing Wang, Ling Sun, Zhiming Wang, Kun Yu, Xiaojun Huang, Jie Shan, Lin Qiu, Bihui Lu
2017 conf
ICIBE
Haihua Xie, Xiaoqing Lu, Zhi Tang, Xiaojun Huang
2017 conf
Agro-Geoinformatics
Jingjing Wang, Yong Hu, Ling Sun, Zhiming Wang, Kun Yu, Lin Qiu, Jie Shan, Xiaojun Huang
2017 conf
Agro-Geoinformatics
Jing Wang, Bihui Lu, Kun Yu, Miao Tian, Xiaojun Huang, Zhiming Wang
2016 conf
NLPCC/ICCPOL
Haihua Xie, Xiaoqing Lu, Zhi Tang, Xiaojun Huang
2015 conf
HCI (12)
Xiaojun Huang, Linong Dai
2015 conf
Color Imaging: Displaying, Processing, Hardcopy, and Applications
Xin Zhang, Weixing Wang, Xiaojun Huang, Lingxiao Huang, Zhiwei Wang
2011 conf
VTC Fall
Peng Du, Weixia Zou, Zheng Zhou, Wanxin Gao, Xiaojun Huang, Haiyang Xin
2010 J jnl
IEEE Signal Process. Lett.
Fen Chen, Xiaojun Huang, Wufan Chen
2005 conf
ICECS
Xiaojun Huang, Jian Gong, Xiaolai Yang
2002 B conf
PIMRC
Xiaofeng Tao, Haiyan Qin, Zhuizhuan Yu, Xiaojun Huang, Ping Zhang, Elena Costa
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)