Weimin Chen

57 papers A* 3A 2B 3C 2Journal 27Unranked 20
YearRankTypeTitle / Venue / Authors
2025 J jnl
Proc. ACM Softw. Eng.
Kunsong Zhao, Zihao Li, Weimin Chen, Xiapu Luo, Ting Chen, Guozhu Meng, Yajin Zhou
2025 J jnl
IEEE Geosci. Remote. Sens. Lett.
Hanlin Guo, Weimin Chen, Zhao Deng, Si Chen, Xin Hong, Shuting Chen, Da-Han Wang
2024 A* conf
ICSE
Shuohan Wu, Zihao Li, Luyi Yan, Weimin Chen, Muhui Jiang, Chenxu Wang, Xiapu Luo, Hao Zhou
2024 J jnl
CoRR
Shuohan Wu, Zihao Li, Luyi Yan, Weimin Chen, Muhui Jiang, Chenxu Wang, Xiapu Luo, Hao Zhou
2024 B conf
LCTES
Weimin Chen, Xiapu Luo, Haoyu Wang, Heming Cui, Shuyu Zheng, Xuanzhe Liu
2024 C conf
CSCWD
Xin Zhang, Xueping Peng, Weimin Chen, Weiyu Zhang, Xiaoqiang Ren, Wenpeng Lu
2024 J jnl
Sensors
Weimin Chen, Feng Tang, Fang Cui, Chen Chen
2024 C conf
CSCWD
Yishuo Li, Zhufeng Shao, Weimin Chen, Shoujin Wang, Yuehan Du, Wenpeng Lu
2024 B conf
CEC
Weimin Chen, Yuxin Liu, Jin Liu
2024 A* conf
SP
Weimin Chen, Xiapu Luo, Haipeng Cai, Haoyu Wang
2023 J jnl
J. Frankl. Inst.
Ming Lei, Weimin Chen
2023 J jnl
Comput. Networks
Hao Chen, Hua Qin, Weimin Chen, Ni Li, Tao Wang, Jianxin He, Gelan Yang, Yang Peng
2023 J jnl
Comput. Methods Programs Biomed.
Kelvin Kian Loong Wong, Wanni Xu, Muhammad Ayoub, You-Lei Fu, Huasen Xu, Ruizheng Shi, Mu Zhang, Feng Su, Zhiguo Huang, Weimin Chen
2023 J jnl
J. Netw. Comput. Appl.
Hua Qin, Weimin Chen, Ni Li, Tao Wang, Hao Chen, Gelan Yang, Yang Peng
2023 A conf
ICDCS
Weimin Chen, Zihan Sun, Haoyu Wang, Xiapu Luo, Haipeng Cai, Lei Wu
2023 J jnl
Comput. Methods Programs Biomed.
Kelvin KL Wong, Muhammad Ayoub, Zaijie Cao, Cang Chen, Weimin Chen, Dhanjoo N. Ghista, Chris W. J. Zhang
2023 A* conf
ASE
Shiyao Zhou, Muhui Jiang, Weimin Chen, Hao Zhou, Haoyu Wang, Xiapu Luo
2022 J jnl
Sensors
Yizhou Zhuang, Weimin Chen, Tao Jin, Bin Chen, He Zhang, Wen Zhang
2022 J jnl
Comput. Methods Programs Biomed.
Weimin Chen, Hongyuan Huang, Jing Huang, Ke Wang, Hua Qin, Kelvin Kian Loong Wong
2022 J jnl
Entropy
Weimin Chen, Kelvin Kian Loong Wong, Sifan Long, Zhili Sun
2022 A conf
ISSTA
Weimin Chen, Zihan Sun, Haoyu Wang, Xiapu Luo, Haipeng Cai, Lei Wu
2021 J jnl
Comput. Networks
Hua Qin, Weihong Chen, Weimin Chen, Ni Li, Min Zeng, Yang Peng
2021 J jnl
IEEE Access
Weimin Chen, Fang Cui, Kelvin Kian Loong Wong
2021 conf
AIAM (ACM)
Ruian Lu, Nan Xie, Siyuan Wang, Weimin Chen
2021 conf
AIAM (ACM)
Wanchun Zhang, Nan Xie, Xiaoqin Yuan, Weimin Chen
2021 conf
CIPAE
Ying Wang, Weimin Chen, Di Zheng
2021 conf
SIGMETRICS (Abstracts)
Weimin Chen, Xinran Li, Yuting Sui, Ningyu He, Haoyu Wang, Lei Wu, Xiapu Luo
2021 J jnl
Proc. ACM Meas. Anal. Comput. Syst.
Weimin Chen, Xinran Li, Yuting Sui, Ningyu He, Haoyu Wang, Lei Wu, Xiapu Luo
2021 conf
AIAM (ACM)
Jianming Chen, Ruijin Dai, Yilin He, Weimin Chen
2020 J jnl
IEEE Access
Wei Zhang, Bing Xiong, Bin Shao, Xiaohua Lei, Weimin Chen
2020 J jnl
Sensors
Bin Shao, Wei Zhang, Peng Zhang, Weimin Chen
2019 J jnl
Sensors
Weimin Chen, Zhigang Chen, Fang Cui
2016 conf
IIKI
Weimin Chen, Zhigang Chen, Wenjia Li, Feng Zeng
2015 J jnl
Sensors
Cunlong Li, Weimin Chen, Gang Liu, Rong Yan, Hengyi Xu, Yi Qi
2015 J jnl
Microelectron. Reliab.
Wei Lai, Xianming Liu, Weimin Chen, Xiaohua Lei, Xueying Cao
2015 J jnl
Appl. Math. Comput.
Wei Lai, Xianming Liu, Weimin Chen, Xiaohua Lei, Xiaosheng Tang, Zhigang Zang
2014 J jnl
IEICE Electron. Express
Daqing Zheng, Weimin Chen, Li Chen, Cunlong Li
2012 conf
BIFE
Weimin Chen, Youjin Liu, Guocheng Xiang, Yongqing Liu, Kexi Wang
2012 conf
BMEI
Jianyong Cai, Man Yan, Jiexing Gao, Youjia Chen, Weimin Chen, Qin Hong, Hua Zheng, Lili Luo
2011 conf
FSKD
Kai Guo, Weimin Chen, Han Li, Cheng Xu
2009 J jnl
Sensors
Wei Wei, Shanglian Huang, Ning Wang, Zhu Jin, Jie Zhang, Weimin Chen
2009 J jnl
Inf. Process. Manag.
Xiaofeng Song, Weimin Chen, Yi-Ping Phoebe Chen, Bin Jiang
2009 conf
IFITA (3)
Nan Xie, Haibo Zhang, Shenyong Gao, Yan Ma, Weimin Chen
2009 J jnl
Expert Syst. Appl.
Weimin Chen, Chaoqun Ma, Lin Ma
2008 conf
ICNC (7)
Wenbing Xiao, Qi Fei, Weimin Chen
2006 conf
ISNN (2)
Xiaomin Dong, Miao Yu, Changrong Liao, Weimin Chen, Hong Hui Zhang, Shanglian Huang
2006 conf
ICB
Xuchu Wang, Jianwei Li, Yanmin Niu, Weimin Chen, Wei Wang
2006 conf
ICPR (3)
Weihong Li, Weiguo Gong, Liping Yang, Weimin Chen, Xiaohua Gu
2006 conf
ICPR (4)
Wei Wang, Jianwei Li, Weimin Chen
2006 conf
ISDA (1)
Shunren Hu, Weimin Chen
2006 conf
ROBIO
Rui Li, Weimin Chen, Miao Yu, Changrong Liao, Yinguo Li
2006 J jnl
Microelectron. J.
D. Noonan, Patrick J. McNally, Weimin Chen, Aapo Lankinen, L. Knuuttila, Turkka O. Tuomi, Andreas N. Danilewsky, Rolf Simon
2005 B conf
AINA
Yun-Sheng Yen, Weimin Chen, Jia-Cheng Zhuang, Han-Chieh Chao
2005 conf
ISNN (3)
Changrong Liao, Hong Hui Zhang, Miao Yu, Weimin Chen, Jiansheng Weng
2005 conf
IWBRS
Xuchu Wang, Jianwei Li, Yanmin Niu, Weimin Chen, Wei Wang
2005 conf
ICAPR (2)
Weihong Li, Weiguo Gong, Yixiong Liang, Weimin Chen
2004 J jnl
IEEE Trans. Ind. Electron.
Seán Cian O'Mathuna, Patrick Byrne, Gerald Duffy, Weimin Chen, Matthias Ludwig, Terence O'Donnell, Paul McCloskey, Maeve Duffy
redb/extractors/js_extractors/js_deobfuscation.py
← Index redb/extractors/js_extractors/js_deobfuscation.py python
import hashlib
import inspect
import re
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 PATTERNS

# String literals of 4+ characters; only used by the deobfuscation diff to count
# strings revealed after deobfuscation. Compiled once at module load.
_STRING_LITERAL_4PLUS_RE = re.compile(r"[\"\']([^\"\']{4,})[\"\']")


class JSDeobfuscationExtractor(JSExtractor):
    """Compute pre/post-deobfuscation metrics for a JS sample.

    The actual deobfuscation pass (external tool with jsbeautifier fallback)
    lives on `JSContext.deobfuscated` and is cached per sample, so any other
    extractor that needs the deobfuscated text reads the same value without
    re-running the subprocess. Configure the external tool via env vars:
        JS_DEOBFUSCATOR_PATH    Path or name (default: webcrack)
        JS_DEOBFUSCATE_TIMEOUT  Seconds (default: 60)
    """

    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.deobfuscation_result = None
        self.log.debug(inspect.currentframe().f_code.co_name)

    def tag(self):
        return Tag.JS_DEOBFUSCATION.value

    def extract(self):
        src = self.js_source
        if not src:
            return None

        deobfuscated, deobfuscator_used = self._context.deobfuscated
        if deobfuscated is None:
            return None

        original_size = len(src)
        original_entropy = self._context.text_entropy
        deobfuscated_size = len(deobfuscated)
        deobfuscated_entropy = self._calculate_text_entropy(deobfuscated)
        size_change_ratio = round(deobfuscated_size / original_size, 4) if original_size else 0.0

        # Strings revealed by deobfuscation: matched literals are extracted from
        # both versions and the set difference is the count of "new" strings.
        original_strings = set(_STRING_LITERAL_4PLUS_RE.findall(src))
        deobfuscated_strings = set(_STRING_LITERAL_4PLUS_RE.findall(deobfuscated))
        new_strings = deobfuscated_strings - original_strings

        # Suspicious APIs revealed by deobfuscation. Both sides of the diff
        # come from JSContext caches: the raw scan is computed once for the
        # whole pipeline; the deobfuscated scan is computed once and reused
        # by JSSuspiciousAPIsExtractor's revealed_by_deobf rows.
        original_apis = {n for n in self._context.scan if n in PATTERNS}
        deobfuscated_apis = set(self._context.scan_deobfuscated)
        new_apis = deobfuscated_apis - original_apis

        deobfuscated_sha256 = hashlib.sha256(deobfuscated.encode('utf-8')).hexdigest()

        self.deobfuscation_result = {
            'deobfuscator_used': deobfuscator_used,
            'deobfuscation_successful': True,
            'original_size': original_size,
            'deobfuscated_size': deobfuscated_size,
            'size_change_ratio': size_change_ratio,
            'original_entropy': original_entropy,
            'deobfuscated_entropy': deobfuscated_entropy,
            'new_strings_found': len(new_strings),
            'new_apis_found': len(new_apis),
            'deobfuscated_sha256': deobfuscated_sha256,
        }
        return self.deobfuscation_result

    def prepare_export_data(self, exporter_type: str) -> Any:
        if exporter_type == "ClickHouseExporter":
            if not self.deobfuscation_result:
                return None

            r = self.deobfuscation_result
            current_time = datetime.now(timezone.utc)
            data = [[
                self.sha256,
                r['deobfuscator_used'],
                int(r['deobfuscation_successful']),
                r['original_size'],
                r['deobfuscated_size'],
                r['size_change_ratio'],
                r['original_entropy'],
                r['deobfuscated_entropy'],
                r['new_strings_found'],
                r['new_apis_found'],
                r['deobfuscated_sha256'],
                current_time,
            ]]

            column_names = [
                "sha256", "deobfuscator_used", "deobfuscation_successful",
                "original_size", "deobfuscated_size", "size_change_ratio",
                "original_entropy", "deobfuscated_entropy",
                "new_strings_found", "new_apis_found",
                "deobfuscated_sha256", "analysis_date",
            ]

            column_type_names = [
                "FixedString(64)", "LowCardinality(String)", "UInt8",
                "UInt64", "UInt64", "Float64",
                "Float64", "Float64",
                "UInt32", "UInt32",
                "FixedString(64)", "DateTime64(3, 'UTC')",
            ]

            return (data, column_names, column_type_names)

    def get_clickhouse_table(self) -> str:
        return "redb_js_deobfuscation"