Wei Su

42 papers Journal 38Unranked 4
YearRankTypeTitle / Venue / Authors
2026 J jnl
Comput. Electron. Agric.
Jia Yin, Rundong Zhang, Yelu Zeng, Peng Zhu, Leikun Yin, Yuchi Ma, Wei Su, Jianxi Huang, Xuecao Li, Dalei Hao
2025 J jnl
IEEE Trans. Geosci. Remote. Sens.
Yongyuan Gao, Yelu Zeng, Nadezhda N. Voropay, Anne Gobin, Jianxi Huang, Wei Su, Xuecao Li, Shuangxi Miao, Zhe Liu, Bingbo Gao, Yachang He, Wendi Lu, Huiren Tian, Liang Zhu, Si Gao, Kai Yan, Dalei Hao
2025 J jnl
IEEE Trans. Geosci. Remote. Sens.
Wancheng Tao, Wei Su, Yelu Zeng, Xiaoyao Li, Jing M. Chen, Sheng Wang, Xianda Huang, Yi Dong, Fu Xuan, Jianxi Huang
2025 J jnl
Comput. Electron. Agric.
Qing Li, Jia Yin, Xiaoxin Zhang, Dalei Hao, Matheus Pinheiro Ferreira, Wenhui Yan, Ye Tian, Da Zhang, Shen Tan, Sheng Nie, Tianyu An, Xiaoyao Li, Jianxi Huang, Wei Su, Yelu Zeng
2024 J jnl
Comput. Electron. Agric.
Jiameng Chen, Junming Liu, Zhirong Xia, Wei Su, Jianxi Huang, Pengxin Wang, Ying Li
2024 J jnl
Int. J. Appl. Earth Obs. Geoinformation
Ziqian Li, Fu Xuan, Yi Dong, Xianda Huang, Hui Liu, Yelu Zeng, Wei Su, Jianxi Huang, Xuecao Li
2024 J jnl
Int. J. Appl. Earth Obs. Geoinformation
Fu Xuan, Hui Liu, Jinghao Xue, Ying Li, Junming Liu, Xianda Huang, Zihao Tan, Mohamed A. M. Abd Elbasit, Xiaohe Gu, Wei Su
2023 J jnl
Remote. Sens.
Shuangxi Miao, Yixuan Zhao, Jianxi Huang, Xuecao Li, Ruohan Wu, Wei Su, Yelu Zeng, Haixiang Guan, Mohamed A. M. Abd Elbasit, Junxiao Zhang
2023 J jnl
Remote. Sens.
Ying Zhang, Wei Su, Wancheng Tao, Ziqian Li, Xianda Huang, Ziyue Zhang, Caisen Xiong
2023 J jnl
Remote. Sens.
Xianda Huang, Fu Xuan, Yi Dong, Wei Su, Xinsheng Wang, Jianxi Huang, Xuecao Li, Yelu Zeng, Shuangxi Miao, Jiayu Li
2023 J jnl
Int. J. Appl. Earth Obs. Geoinformation
Fu Xuan, Yi Dong, Jiayu Li, Xuecao Li, Wei Su, Xianda Huang, Jianxi Huang, Zixuan Xie, Ziqian Li, Hui Liu, Wancheng Tao, Yanan Wen, Ying Zhang
2023 J jnl
Remote. Sens.
Yi Dong, Fu Xuan, Ziqian Li, Wei Su, Hui Guo, Xianda Huang, Xuecao Li, Jianxi Huang
2023 J jnl
IEEE Trans. Geosci. Remote. Sens.
Hai Huang, Jianxi Huang, YanTong Wu, Wen Zhuo, Jianjian Song, Xuecao Li, Li Li, Wei Su, Han Ma, Shunlin Liang
2022 J jnl
Int. J. Appl. Earth Obs. Geoinformation
Haixiang Guan, Jianxi Huang, Xuecao Li, Yelu Zeng, Wei Su, Yuyang Ma, Jinwei Dong, Quandi Niu, Wei Wang
2021 J jnl
Remote. Sens.
Wancheng Tao, Zixuan Xie, Ying Zhang, Jiayu Li, Fu Xuan, Jianxi Huang, Xuecao Li, Wei Su, Dongqin Yin
2021 J jnl
Remote. Sens.
Haowei Mu, Xuecao Li, Xiaoping Du, Jianxi Huang, Wei Su, Tengyun Hu, Yanan Wen, Peiyi Yin, Yuan Han, Fei Xue
2021 J jnl
Remote. Sens.
Bitam Ali, Feng Zhao, Zhenjiang Li, Qichao Zhao, Jiabei Gong, Lin Wang, Peng Tong, Yanhong Jiang, Wei Su, Yunfei Bao, Juan Li
2021 J jnl
Remote. Sens.
Yi Dong, Dongqin Yin, Xiang Li, Jianxi Huang, Wei Su, Xuecao Li, Hongshuo Wang
2020 J jnl
Remote. Sens.
Quan Xiong, Yuan Wang, Diyou Liu, Sijing Ye, Zhenbo Du, Wei Liu, Jianxi Huang, Wei Su, Dehai Zhu, Xiaochuang Yao, Xiaodong Zhang
2020 J jnl
Remote. Sens.
Xuli Zan, Xinlu Zhang, Ziyao Xing, Wei Liu, Xiaodong Zhang, Wei Su, Zhe Liu, Yuanyuan Zhao, Shaoming Li
2020 J jnl
Int. J. Digit. Earth
Jianxi Huang, Wen Zhuo, Ying Li, Ran Huang, Fernando Sedano, Wei Su, Jinwei Dong, Liyan Tian, Yanbo Huang, Dehai Zhu, Xiaodong Zhang
2020 J jnl
Remote. Sens.
Wen Zhuo, Jianxi Huang, Xinran Gao, Hongyuan Ma, Hai Huang, Wei Su, Jihua Meng, Ying Li, Huailiang Chen, Dongqin Yin
2020 J jnl
Int. J. Digit. Earth
Wei Su, Daniel Z. Sui, Xiaodong Zhang
2019 J jnl
Comput. Electron. Agric.
Hao Guo, Zhenbo Li, Qin Ma, Dehai Zhu, Wei Su, Ke Wang, Francesco Marinello
2019 J jnl
Comput. Electron. Agric.
Ke Wang, Dehai Zhu, Hao Guo, Qin Ma, Wei Su, Yang Su
2019 J jnl
Remote. Sens.
Mingzheng Zhang, Dehai Zhu, Wei Su, Jianxi Huang, Xiaodong Zhang, Zhe Liu
2019 J jnl
Remote. Sens.
Wei Su, Zhongping Sun, Wen-Hua Chen, Xiaodong Zhang, Chan Yao, Jiayu Wu, Jianxi Huang, Dehai Zhu
2019 J jnl
Remote. Sens.
Wei Su, Mingzheng Zhang, Dahong Bian, Zhe Liu, Jianxi Huang, Wei Wang, Jiayu Wu, Hao Guo
2019 J jnl
Remote. Sens.
Wei Su, Jianxi Huang, Desheng Liu, Mingzheng Zhang
2019 J jnl
ISPRS Int. J. Geo Inf.
Ziyao Xing, Xiaohui Su, Junming Liu, Wei Su, Xiaodong Zhang
2018 J jnl
Comput. Electron. Agric.
Ke Wang, Hao Guo, Qin Ma, Wei Su, Luochao Chen, Dehai Zhu
2018 J jnl
Comput. Electron. Agric.
Wei Su, Dehai Zhu, Jianxi Huang, Hao Guo
2018 J jnl
Remote. Sens.
Sijing Ye, Diyou Liu, Xiaochuang Yao, Huaizhi Tang, Quan Xiong, Wen Zhuo, Zhenbo Du, Jianxi Huang, Wei Su, Shi Shen, Zuliang Zhao, Shaolong Cui, Lixin Ning, Dehai Zhu, Changxiu Cheng, Changqing Song
2017 J jnl
Comput. Electron. Agric.
Hao Guo, Xiaodong Ma, Qin Ma, Ke Wang, Wei Su, Dehai Zhu
2015 J jnl
IEEE J. Sel. Top. Appl. Earth Obs. Remote. Sens.
Jianxi Huang, Hongyuan Ma, Wei Su, Xiaodong Zhang, Yanbo Huang, Jinlong Fan, Wenbin Wu
2013 J jnl
Math. Comput. Model.
Ruofei Zhong, Jiangxia Wei, Wei Su, Yun Fang Chen
2013 J jnl
Math. Comput. Model.
Hongyuan Ma, Jianxi Huang, Dehai Zhu, Junming Liu, Wei Su, Chao Zhang, Jinlong Fan
2012 conf
CCTA (2)
Wei Su, Rui Liu, Ting Liu, Jianxi Huang, Xiaodong Zhang, Junming Liu
2011 J jnl
Math. Comput. Model.
Wei Su, Xiaodong Zhang, Zhen Wang, Xiaohui Su, Jianxi Huang, Siquan Yang, Sanchao Liu
2011 conf
CCTA (3)
Wenhao Ou, Wei Su, Chen Wu, Zhongzheng Zhu, Yanmin Li, Shi Shen
2011 conf
CCTA (2)
Ruofei Zhong, Jianxi Huang, Jiangxia Wei, Qin Li, Jiao Guo, Wei Su
2011 conf
ICSDM
Jianxi Huang, Jingyu Xu, Xiaohui Su, Xiaodong Zhang, Wei Su, Yanqing Chen
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)