C. Chen

36 papers A* 1B 4Misc 2Journal 15Unranked 14
YearRankTypeTitle / Venue / Authors
2025 J jnl
CoRR
D. Nash, D. A. Gates, W. S. Walsh, M. Slepchenkov, D. Guan, A. D. Cate, Bingyu Chen, M. Dickerson, W. Harris, U. Khera, M. Korman, S. Srinivasan, C. P. S. Swanson, A. van Riel, R. H. Wu, A. S. Basurto, B. Berzin, E. Brown, C. Chen, T. Ikuss, W. B. Kalb, C. Khurana, B. D. Koehne, T. G. Kruger, S. Noronha, J. Olatunji, R. Powser, K. Tamhankar, K. Tang, A. Tarifa, M. Savastianov, J. Wasserman, C. Yang
2024 conf
VLSI Technology and Circuits
Walid M. Hafez, D. Abanulo, M. Abdelkader, S. An, C. Auth, D. Bahr, V. Balakrishnan, Rohan Bambery, M. Beck, M. Bhargava, S. Bhowmick, J. Biggs-houck, J. Birdsall, D. Caselli, H.-Y. Chang, Y. Chang, R. Chaudhuri, S. Chauhan, C. Chen, V. Chikarmane, K. Chikkadi, T. Chu, C. Connor, R. De Alba, Y. Deng, C. Destefano, D. Diana, Y. Dong, P. Elfick, Tyler Elko-Hansen, B. Fallahazad, Y. Fang, D. Gala, D. Garg, C. Geppert, S. Govindaraju, W. Grimm, H. Grunes, L. Guler, Z. Guo, A. Gupta, M. Hattendorf, S. Havelia, J. Hazra, A. Islam, A. Jain, S. Jaloviar, M. Jamil, M. Jang, M. Kabir, J. Kameswaran, Eric Karl, S. Kelgeri, A. Kennedy, C. Kilroy, J. Kim, Y. Kim, D. Krishnan, G. Lee, H.-P. Lee, Q. Li, H. Lin, A. Luk, Y. Luo, P. Macfarlane, A. Mamun, K. Marla, D. Mayeri, Eamonn McKenna, A. Miah, K. Mistry, M. Mleczko, S. Moon, D. Nardi, S. Natarajan, J. Nathawat, C. Nolph, C. Nugroho, P. Nyhus, A. Oni, P. Packan, D. Pak, A. Paliwal, R. Pandey, I. Paredes, K. Park, L. Paulson, A. Pierre, P. Plekhanov, C. Prasad, R. Ramaswamy, J. Riley, Johann Rode, R. Russell, S. Ryu, H. Saavedra, T. Salisbury, Justin Sandford, Faisal Ahmed Shah, K. Shang, P. Shekhar, A. Shu, E. Skoug, J. Sohn, J. Song, M. Sprinkle, J. Su, A. Tan, T. Troeger, R. Tsao, A. Vaidya, C. Wallace, X. Wang, H. Wang, C. Ward, S. Wickramaratne, M. Wills, T. Wu, Z. Xia-hua, S. Xu, P. Yashar, J. Yaung, Y. Yu, M. Zilm, Bernhard Sell
2023 conf
IRPS
S. Mukhopadhyay, C. Chen, M. Jamil, Jihan Standfest, Inanc Meric, Balkaran Gill, Stephen Ramey
2022 J jnl
CoRR
C. Chen, Y. P. Huang, William H. K. Lam, T. L. Pan, S. C. Hsu, Agachai Sumalee, R. X. Zhong
2021 J jnl
Appl. Soft Comput.
Yunping Huang, C. Chen, Z. C. Su, Tianshi Chen, Agachai Sumalee, Tianlu Pan, Renxin Zhong
2020 J jnl
CoRR
J. Tu, C. Chen, X. Huang, J. He, X. Guan
2017 conf
AIM
Shao-feng Bian, Yanfeng Hu, C. Chen, Z. M. Li, B. Ji
2017 B conf
CEC
Lei Zhou, Liang Feng, Abhishek Gupta, Yew-Soon Ong, K. Liu, C. Chen, Edwin Hsing-Mean Sha, B. Yang, B. W. Yan
2016 conf
MISNC
C. Chen, J. Iglesias, X. Lin, J. Jenny Li, Patricia Morreale, Linda Ness
2016 B conf
RTCSA
Md. Ashiqur Rahman, G. G. Md. Nawaz Ali, Peter H. J. Chong, Syeda Khairunnesa Samantha, M. F. Muntasir, C. Chen
2016 conf
MISNC
Jennifer Nelson, X. Lin, C. Chen, J. Iglesias, J. Jenny Li
2015 conf
IRPS
Pieter Weckx, Ben Kaczer, C. Chen, Jacopo Franco, Erik Bury, Kaushik Chanda, J. Watt, Philippe J. Roussel, Francky Catthoor, Guido Groeseneken
2015 conf
ECOC
Alberto Castro, Lluis Gifre, C. Chen, J. Yin, Zuqing Zhu, Luis Velasco, S. J. Ben Yoo
2014 J jnl
Adv. Eng. Softw.
Zhen Xu, Xinzheng Lu, Hong Guan, C. Chen, Aizhu Ren
2013 J jnl
Int. J. Geogr. Inf. Sci.
C. Chen, Y. Li
2013 conf
MILCOM
Mario A. Blanco, Nicholas V. Burkhardt, C. Chen
2013 conf
OFC/NFOEC
C. Chen, Michael J. Crisp, Richard V. Penty, Ian H. White
2012 conf
BCFIC
Ka Lok Man, T. O. Ting, Tomas Krilavicius, Kaiyu Wan, C. Chen, J. Chang, Sheung-Hung Poon
2012 conf
Computer-Aided Diagnosis
C. Chen, Lauge Sørensen, François Lauze, Christian Igel, Marco Loog, Aasa Feragen, Marleen de Bruijne, Mads Nielsen
2011 J jnl
IEEE J. Solid State Circuits
Hooman Darabi, Paul Chang, Henrik Jensen, Alireza Zolfaghari, Paul Lettieri, John C. Leete, Behnam Mohammadi, Janice Chiu, Qiang (Tom) Li, Shr-Lung Chen, Zhimin Zhou, Morteza Vadipour, C. Chen, Yuyu Chang, Ahmad Mirzaei, Ahmad Yazdi, Mohammad Nariman, Amir Hadji-Abdolhamid, Ethan Chang, Barry Zhao, Kevin Juan, Puneet Suri, Claire Guan, Louie Serrano, John Leung, J. Shin, Jay Kim, Huey Tran, Patrick Kilcoyne, H. Vinh, Eric Raith, M. Koscal, Ajat Hukkoo, C. Hayek, V. Rakhshani, Charlie Wilcoxson, Maryam Rofougaran, Ahmadreza Rofougaran
2010 Misc conf
CISS
C. Chen, Ali Abdi, Aijun Song, Mohsen Badiey
2009 J jnl
Artif. Life Robotics
Tao Zhang, C. Chen, Masatoshi Nakamura
2007 conf
MMM (2)
C. Chen, Zheng Guo Li, Yeng Chai Soh
2006 J jnl
Medical Biol. Eng. Comput.
C. Chen, S. W. Smye, M. P. Robinson, J. A. Evans
2002 J jnl
IEEE J. Solid State Circuits
Yves Baeyens, George Georgiou, Joseph S. Weiner, Andreas Leven, Vincent Houtsma, Peter Paschke, Q. Lee, Rose F. Kopf, Yang Yang, L. Chua, C. Chen, C. T. Liu, Young-Kai Chen
2002 J jnl
Int. J. Netw. Manag.
Sheng-Tzong Cheng, C. Chen, C. Li, Chia-Mei Chen
2001 B conf
DASFAA
Chiang Lee, C. Chen
2001 J jnl
Comput. Chem.
C. Chen, J. C. Wu
1997 Misc conf
AMIA
Adam B. Wilcox, George Hripcsak, C. Chen
1994 J jnl
J. Intell. Manuf.
C. Chen, S. Lee, G. Santamarina
1994 J jnl
J. Intell. Manuf.
C. Chen, F. Swift, S. Lee, R. Ege, Q. Shen
1991 conf
FTCS
C. Chen, An Feng, Tohru Kikuno, Koji Torii
1990 B conf
IJCNN
G. Chinn, K. A. Grajski, C. Chen, C. Kuszmaul, S. Tomboulian
1986 J jnl
J. Inf. Sci. Eng.
Yue-Sun Kuo, C. Chen
1985 A* conf
DAC
Yue-Sun Kuo, C. Chen, T. C. Hu
1970 conf
AFIPS Fall Joint Computing Conference
Y. Koga, C. Chen, K. Naemura
redb/extractors/js_extractors/js_suspicious_apis.py
← Index redb/extractors/js_extractors/js_suspicious_apis.py python
import inspect
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 CATEGORIES, PATTERNS


# Backwards-compatible export: `{category: [(raw_pattern_string, api_name), ...]}`
# in canonical PATTERNS insertion order (code_execution, network, filesystem,
# process, registry, crypto_encoding, dom_manipulation). Kept so external
# callers (notably JSDeobfuscationExtractor pre-cleanup) keep working until
# they are migrated to PATTERNS directly.
SUSPICIOUS_APIS: "dict[str, list[tuple[str, str]]]" = {}
for _name, _compiled in PATTERNS.items():
    SUSPICIOUS_APIS.setdefault(CATEGORIES[_name], []).append((_compiled.pattern, _name))


class JSSuspiciousAPIsExtractor(JSExtractor):

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

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

    def _get_context_snippet(self, line, max_len=200):
        """Get a truncated context snippet around a match."""
        line = line.strip()
        if len(line) > max_len:
            return line[:max_len] + "..."
        return line

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

        # Pass 1: shared per-sample scan over the raw source. The dict contains
        # entries for both PATTERNS and FEATURE_PATTERNS; the loop below only
        # consults PATTERNS keys, so feature-only entries are ignored.
        raw_scan = self._context.scan or {}
        raw_lines = self.lines

        # Pass 2: same patterns over the deobfuscated text, when the
        # deobfuscator produced something meaningfully different. APIs hidden
        # behind one obfuscation layer (Vjw0rm-style array.join + eval,
        # Dean-Edwards packers, jjencode, ...) only surface here. The scan is
        # cached on JSContext so JSDeobfuscationExtractor (which computes the
        # new_apis_found diff) reuses the same result.
        deobf_scan = self._context.scan_deobfuscated
        if deobf_scan:
            deobf_text, _ = self._context.deobfuscated
            deobf_lines = deobf_text.splitlines()
        else:
            deobf_lines = []

        findings = []
        # Iterate PATTERNS in canonical order so output is deterministic and
        # matches the historical category/pattern ordering. For each api_name,
        # raw findings take precedence; if an API is found only in the
        # deobfuscated text, we surface it as a row tagged revealed_by_deobf=1
        # with line numbers / snippets pulled from the deobfuscated source.
        for api_name in PATTERNS:
            raw_info = raw_scan.get(api_name)
            if raw_info:
                line_numbers = raw_info["lines"]
                lines_for_snippets = raw_lines
                revealed_by_deobf = 0
            else:
                deobf_info = deobf_scan.get(api_name)
                if not deobf_info:
                    continue
                line_numbers = deobf_info["lines"]
                lines_for_snippets = deobf_lines
                revealed_by_deobf = 1

            snippets = [
                self._get_context_snippet(lines_for_snippets[ln - 1])
                for ln in line_numbers[:3]
                if 0 < ln <= len(lines_for_snippets)
            ]
            findings.append({
                "api_name": api_name,
                "api_category": CATEGORIES[api_name],
                # Historical semantics: count = number of unique lines with a
                # match, not total in-source match count.
                "call_count": len(line_numbers),
                "line_numbers": line_numbers,
                "context_snippet": " | ".join(snippets),
                "revealed_by_deobf": revealed_by_deobf,
            })

        if not findings:
            return None

        self.api_findings = findings
        return findings

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

            current_time = datetime.now(timezone.utc)
            data = []
            for f in self.api_findings:
                data.append([
                    self.sha256,
                    f['api_name'],
                    f['api_category'],
                    f['call_count'],
                    f['line_numbers'],
                    f['context_snippet'],
                    f['revealed_by_deobf'],
                    current_time,
                ])

            column_names = [
                "sha256", "api_name", "api_category",
                "call_count", "line_numbers", "context_snippet",
                "revealed_by_deobf",
                "analysis_date",
            ]

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

            return (data, column_names, column_type_names)

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