Kasidit Toprasertpong

36 papers C 1Journal 7Unranked 28
YearRankTypeTitle / Venue / Authors
2025 conf
ECOC
Hiroya Sakumoto, Kasidit Toprasertpong, Shinichi Takagi, Mitsuru Takenaka
2025 conf
ECOC
Tomohiro Akazawa, Rui Tang, Yuto Miyatake, Makoto Okano, Kasidit Toprasertpong, Shinichi Takagi, Mitsuru Takenaka
2025 J jnl
Sci. China Inf. Sci.
Shinichi Takagi, Mitsuru Takenaka, Kasidit Toprasertpong
2025 J jnl
CoRR
Chengli Chai, Rui Tang, Makoto Okano, Kasidit Toprasertpong, Shinichi Takagi, Mitsuru Takenaka
2024 J jnl
CoRR
Rui Tang, Shuhei Ohno, Ken Tanizawa, Kazuhiro Ikeda, Makoto Okano, Kasidit Toprasertpong, Shinichi Takagi, Mitsuru Takenaka
2024 J jnl
IEEE Trans. Very Large Scale Integr. Syst.
Chihiro Matsui, Kasidit Toprasertpong, Shinichi Takagi, Ken Takeuchi
2024 conf
VLSI Technology and Circuits
Shuhan Liu, Shengjun Qin, Koustav Jana, Jian Chen, Kasidit Toprasertpong, H.-S. Philip Wong
2024 conf
OFC
Rui Tang, Shuhei Ohno, Ken Tanizawa, Kazuhiro Ikeda, Makoto Okano, Kasidit Toprasertpong, Shinichi Takagi, Mitsuru Takenaka
2024 conf
VLSI Technology and Circuits
Qi Jiang, Koustav Jana, Kasidit Toprasertpong, Shuhan Liu, H.-S. Philip Wong
2024 conf
VLSI Technology and Circuits
M. Otomo, Kasidit Toprasertpong, Z. Cai, Zhenhong Liu, Mitsuru Takenaka, S. Takagi
2024 conf
IRPS
Kasidit Toprasertpong, Eishin Nako, Shin-Yi Min, Zuocheng Cai, Seong-Kun Cho, Rikuo Suzuki, Ryosho Nakane, Mitsuru Takenaka, Shinichi Takagi
2024 J jnl
CoRR
Rui Tang, Makoto Okano, Chao Zhang, Kasidit Toprasertpong, Shinichi Takagi, Mitsuru Takenaka
2023 conf
VLSI Technology and Circuits
Kasidit Toprasertpong, Shuhan Liu, Jian Chen, Sumaiya Wahid, Koustav Jana, Wei-Chen Chen, Shengman Li, Eric Pop, H.-S. Philip Wong
2023 conf
VLSI Technology and Circuits
Zuocheng Cai, Kasidit Toprasertpong, Mitsuru Takenaka, Shinichi Takagi
2023 conf
ICICDT
Shinichi Takagi, Kasidit Toprasertpong, Eishin Nako, Zeyu Wang, Rikuo Suzuki, Shin-Yi Min, Mitsuru Takenaka, Ryosho Nakane
2023 J jnl
IEICE Trans. Electron.
Shinsei Yoshikiyo, Naoko Misawa, Kasidit Toprasertpong, Shinichi Takagi, Chihiro Matsui, Ken Takeuchi
2022 conf
IMW
Shinsei Yoshikiyo, Naoko Misawa, Kasidit Toprasertpong, Shinichi Takagi, Chihiro Matsui, Ken Takeuchi
2022 conf
VLSI Technology and Circuits
Eishin Nako, Kasidit Toprasertpong, Ryosho Nakane, Mitsuru Takenaka, Shinichi Takagi
2022 conf
OECC/PSC
Mitsuru Takenaka, Hanzhi Tang, Kouhei Watanabe, Takaya Ochiai, Tomohiro Akazawa, Yuto Miyatake, Shuhei Ohno, Kei Sumita, Stéphane Monfray, Frédéric Boeuf, Rui Tang, Kasidit Toprasertpong, Shinichi Takagi
2022 conf
VLSI Technology and Circuits
Tomohiro Akazawa, D. Wu, Kai Sumita, N. Sekine, Makoto Okano, Kasidit Toprasertpong, Shinichi Takagi, Mitsuru Takenaka
2022 C conf
ISCAS
Chihiro Matsui, Eitaro Kobayashi, Kasidit Toprasertpong, Shinichi Takagi, Ken Takeuchi
2021 conf
VLSI Circuits
Naoki Sekine, Kasidit Toprasertpong, Shinichi Takagi, Mitsuru Takenaka
2021 conf
IRPS
Tsung-En Lee, Kasidit Toprasertpong, Mitsuru Takenaka, Shinichi Takagi
2021 conf
VLSI Circuits
Chihiro Matsui, Kasidit Toprasertpong, Shinichi Takagi, Ken Takeuchi
2021 conf
ECOC
Ziqiang Zhao, Chong Pei Ho, Qiang Li, Kasidit Toprasertpong, Shinichi Takagi, Mitsuru Takenaka
2021 conf
OFC
Shuhei Ohno, Stéphane Monfray, Frédéric Boeuf, Kasidit Toprasertpong, Shinichi Takagi, Mitsuru Takenaka
2021 J jnl
CoRR
Shuhei Ohno, Kasidit Toprasertpong, Shinichi Takagi, Mitsuru Takenaka
2021 conf
OFC
Hanzhi Tang, Shuhei Ohno, Yuto Miyatake, Kasidit Toprasertpong, Shinichi Takagi, Mitsuru Takenaka
2020 conf
ECOC
Shuhei Ohno, Kasidit Toprasertpong, Shinichi Takagi, Mitsuru Takenaka
2020 conf
OFC
Qiang Li, Chong Pei Ho, Junichi Fujikata, Masataka Noguchi, Shigeki Takahashi, Kasidit Toprasertpong, Shinichi Takagi, Mitsuru Takenaka
2020 conf
ECOC
Yuto Miyatake, Chong Pei Ho, Prakash Pitchappa, Ranjan Singh, Kotaro Makino, Junji Tominaga, Noriyuki Miyata, Takashi Nakano, Naoki Sekine, Kasidit Toprasertpong, Shinichi Takagi, Mitsuru Takenaka
2020 conf
OFC
Ziqiang Zhao, Chongpei Ho, Qiang Li, Kasidit Toprasertpong, Shinichi Takagi, Mitsuru Takenaka
2020 conf
ECOC
Shuhei Ohno, Qiang Li, Naoki Sekine, Hanzhi Tang, Stéphane Monfray, Frédéric Boeuf, Kasidit Toprasertpong, Shinichi Takagi, Mitsuru Takenaka
2020 conf
OFC
Shuhei Ohno, Qiang Li, Naoki Sekine, Junichi Fujikata, Masataka Noguchi, Shigeki Takahashi, Kasidit Toprasertpong, Shinichi Takagi, Mitsuru Takenaka
2019 conf
MIXDES
Shinichi Takagi, Kimihiko Kato, Kei Sumita, Kwangwon Jo, Cheol-Min Lim, Ryotaro Takaguchi, Dae-Hwan Ahn, Jun Takeyasu, Kasidit Toprasertpong, Mitsuru Takenaka
2019 conf
3DIC
Kei Sumita, Jun Takeyasu, Kimihiko Kato, Kasidit Toprasertpong, Mitsuru Takenaka, Shinichi Takagi
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"