Oguz 'Oz' Buruk

71 papers A* 10A 6B 4C 1Misc 2Journal 16Unranked 30
YearRankTypeTitle / Venue / Authors
2026 A* conf
CHI
Shiva Jabari, Asif Shaikh, Çaglar Genç, Velvet Spors, Johanna Virkki, Oguz 'Oz' Buruk, Juho Hamari
2026 B conf
TEI
Shan Luo, Weitao Jiang, Jinlin Miao, Hongyue Wang, Dawei Zhao, Jiangnan Xu, Çaglar Genç, Oguz 'Oz' Buruk
2026 J jnl
Int. J. Hum. Comput. Interact.
Eshtiak Ahmed, Laura Diana Cosio, Çaglar Genç, Juho Hamari, Oguz 'Oz' Buruk
2026 conf
CHI Extended Abstracts
Ferran Altarriba Bertran, Heidi Biggs, Oguz 'Oz' Buruk, Angella Mackey, William Odom, Oscar Tomico
2026 conf
CHI Extended Abstracts
Narda De la Flor Enciso, Eshtiak Ahmed, Aino Ahtinen, Oguz 'Oz' Buruk
2026 conf
CHI Extended Abstracts
Eshtiak Ahmed, Narda De la Flor Enciso, Isak de Villiers Bosman, Iuliia Avgustis, Shiva Jabari, Juho Hamari, Oguz 'Oz' Buruk
2026 A* conf
CHI
Eshtiak Ahmed, Çaglar Genç, Velvet Spors, Juho Hamari, Oguz 'Oz' Buruk
2025 conf
MindTrek
Eshtiak Ahmed, Bakhtawar Khan, Jiangnan Xu, Linas Kristupas Gabrielaitis, Juho Hamari, Oguz 'Oz' Buruk
2025 conf
ICSR+AI (1)
Eshtiak Ahmed, Juho Hamari, Oguz 'Oz' Buruk
2025 ed.
CHI PLAY (Companion)
Erik Harpstead, Jessica Hammer, Elizabeth M. Bonsignore, Mitchell W. McEwan, Katja Rogers, Oguz 'Oz' Buruk
2025 J jnl
Virtual Real.
Isak de Villiers Bosman, Mila Bujic, Laura Diana Cosio, Oguz 'Oz' Buruk, Kristine Jørgensen, Juho Hamari
2025 J jnl
Virtual Real.
Isak de Villiers Bosman, Mila Bujic, Laura Diana Cosio, Oguz 'Oz' Buruk, Kristine Jørgensen, Juho Hamari
2025 conf
CHI PLAY (Companion)
Eshtiak Ahmed, Philip Chambers, Timo Nummenmaa, Mari Selkimäki, Teppo Hujala, Juho Hamari, Oguz 'Oz' Buruk
2025 A* conf
CHI
Ferran Altarriba Bertran, Oguz 'Oz' Buruk, Jordi Márquez Puig, Juho Hamari
2025 A* conf
CHI
Velvet Spors, Oguz 'Oz' Buruk, Juho Hamari
2025 conf
CHI PLAY (Companion)
Oguz 'Oz' Buruk, Max V. Birk, Ferran Altarriba Bertran, Alena Denisova, Aakash Johry, Rakesh Patibanda, Velvet Spors, Xin Tong, Rina R. Wehbe
2025 J jnl
Int. J. Hum. Comput. Stud.
Zhenxing Li, Oguz 'Oz' Buruk, Mila Bujic, Bojan Kerous, Juho Hamari
2025 J jnl
Int. J. Hum. Comput. Stud.
Florian 'Floyd' Mueller, Oguz 'Oz' Buruk, Louise Petersen Matjeka, Aryan Saini
2024 J jnl
Int. J. Hum. Comput. Interact.
Shiva Jabari, Asif Shaikh, Çaglar Genç, Oguz 'Oz' Buruk, Johanna Virkki, Juho Hamari
2024 conf
MindTrek
Margarita Osipova, Jordi Tost, Oguz 'Oz' Buruk, Konstantina Marra, Britta F. Schulte, Jeffrey Bardzell, Eva Hornecker
2024 ed.
CHI PLAY (Companion)
Oguz 'Oz' Buruk, Guo Freeman, Juho Hamari
2024 A* conf
CHI
Velvet Spors, Oguz 'Oz' Buruk, Juho Hamari
2024 B conf
TEI
Çaglar Genç, Velvet Spors, Oguz 'Oz' Buruk, Mattia Thibault, Leland Masek, Juho Hamari
2024 J jnl
Frontiers Virtual Real.
Zhenxing Li, Mila Bujic, Oguz 'Oz' Buruk, Elpida Bampouni, Simo Järvelä, Juho Hamari
2024 J jnl
Int. J. Soc. Robotics
Eshtiak Ahmed, Oguz 'Oz' Buruk, Juho Hamari
2024 conf
CHI PLAY (Companion)
Oguz 'Oz' Buruk, Shiva Jabari, Ella Dagan, Benedikt Morschheuser, Santeri Saarinen, Emma Varjo, Nikoletta Zampeta Legaki, Mattia Thibault
2024 conf
MindTrek
Laura D. Cosio, Saurav Sarkar, Salik Tariq, Oguz 'Oz' Buruk, Juho Hamari
2024 conf
CHI PLAY (Companion)
Oguz 'Oz' Buruk, Ahmet Börütecene
2024 conf
CHI PLAY (Companion)
Linas K. Gabrielaitis, Oguz 'Oz' Buruk
2024 conf
RFID-TA
Asif Shaikh, Sari Merilampi, Ruowei Xiao, Shiva Jabari, Oguz 'Oz' Buruk, Juho Hamari, Johanna Virkki
2024 A conf
Conference on Designing Interactive Systems
Oscar Tomico, Anton Poikolainen Rosén, Svenja Keune, Ferran Altarriba Bertran, Danielle Wilde, Daniel Fernández Galeote, Tau Ulv Lenskjold, Ruut Tikkanen, Oguz 'Oz' Buruk, Velvet Spors
2024 conf
CHI PLAY (Companion)
Çaglar Genç, Ferran Altarriba Bertran, Oguz 'Oz' Buruk, Sangwon Jung, Velvet Spors, Juho Hamari
2024 conf
CHI PLAY (Companion)
Isak de Villiers Bosman, Ross Tordiffe, Tianyou 'Jackie' Huang, Oguz 'Oz' Buruk, Kristine Jørgensen, Juho Hamari
2024 conf
MindTrek
Harun Kaygan, Çaglar Genç, Oguz 'Oz' Buruk, Ida Kathrine Hammeleff Jørgensen, Linas Kristupas Gabrielaitis
2024 J jnl
Behav. Inf. Technol.
Isak de Villiers Bosman, Oguz 'Oz' Buruk, Kristine Jørgensen, Juho Hamari
2024 J jnl
Proc. ACM Hum. Comput. Interact.
Çaglar Genç, Velvet Spors, Oguz 'Oz' Buruk, Mattia Thibault, Leland Masek, Juho Hamari
2024 conf
MindTrek
Isak de Villiers Bosman, Mila Bujic, Laura Diana Cosio, Oguz 'Oz' Buruk, Kristine Jørgensen, Juho Hamari
2024 B conf
RO-MAN
Eshtiak Ahmed, Çaglar Genç, Velvet Spors, Juho Hamari, Oguz 'Oz' Buruk
2024 J jnl
Int. J. Hum. Comput. Stud.
Nannan Xi, Oguz 'Oz' Buruk, Juan Chen, Shiva Jabari, Juho Hamari
2023 conf
MindTrek
Oguz 'Oz' Buruk
2023 J jnl
CoRR
Oguz 'Oz' Buruk
2023 C conf
ISM
Samuli Laato, Sampsa Rauti, Alexander Espeseth, Heinrich Söbke, Juho Hamari, Oguz 'Oz' Buruk
2023 conf
MindTrek
Çaglar Genç, Velvet Spors, Oguz 'Oz' Buruk, Mattia Thibault, Leland Masek, Juho Hamari
2023 A conf
Conference on Designing Interactive Systems
Ferran Altarriba Bertran, Jordi Márquez Puig, Maria Llop Cirera, Eva Forest Illas, Joan Planas Bertran, Ernest Forts Plana, Oguz 'Oz' Buruk, Çaglar Genç, Mattia Thibault, Juho Hamari
2023 A* conf
CHI
Velvet Spors, Samuli Laato, Oguz 'Oz' Buruk, Juho Hamari
2023 A conf
Conference on Designing Interactive Systems
Ferran Altarriba Bertran, Oguz 'Oz' Buruk, Velvet Spors, Juho Hamari
2023 conf
GamiFIN
Mila Bujic, Anna-Leena Macey, Bojan Kerous, Anatolii Belousov, Oguz 'Oz' Buruk, Juho Hamari
2023 J jnl
CoRR
Eshtiak Ahmed, Laura D. Cosio, Juho Hamari, Oguz 'Oz' Buruk
2023 A conf
Conference on Designing Interactive Systems (Companion Volume)
Ferran Altarriba Bertran, Núria Jordán Sánchez, Jordi Márquez Puig, Maria Llop Cirera, Ernest Forts Plana, Ester Montero Collell, Oriol Martín Capdeferro, Oguz 'Oz' Buruk, Juho Hamari
2023 conf
AfriCHI
Isak de Villiers Bosman, Mila Bujic, Laura Diana Cosio, Oguz 'Oz' Buruk, Kristine Jørgensen, Juho Hamari
2023 A* conf
CHI
Oguz 'Oz' Buruk, Louise Petersen Matjeka, Florian 'Floyd' Mueller
2023 A* conf
CHI
Laura D. Cosio, Oguz 'Oz' Buruk, Daniel Fernández Galeote, Isak de Villiers Bosman, Juho Hamari
2022 Misc conf
NordiCHI
Sangwon Jung, Oguz 'Oz' Buruk, Juho Hamari
2022 conf
SeGAH
Charlotta Elo, Emmi-Lotta Rauhala, Tiina Ihalainen, Oguz 'Oz' Buruk, Tanja Vihriälä, Erja Sipilä, Taru Kosonen, Johanna Virkki
2022 J jnl
IEEE Access
Ruowei Xiao, Aleksi Vianto, Asif Shaikh, Oguz 'Oz' Buruk, Juho Hamari, Johanna Virkki
2022 J jnl
Proc. ACM Hum. Comput. Interact.
Ruowei Xiao, Sangwon Jung, Oguz 'Oz' Buruk, Juho Hamari
2022 conf
CHI Extended Abstracts
Ferran Altarriba Bertran, Oguz 'Oz' Buruk, Juho Hamari
2022 conf
MindTrek
Sangwon Jung, Oguz 'Oz' Buruk, Juho Hamari
2022 conf
PACIS
Eshtiak Ahmed, Oguz 'Oz' Buruk, Juho Hamari
2022 conf
CHI Extended Abstracts
Çaglar Genç, Oguz 'Oz' Buruk, Shiva Jabari, Lee Jones, Kirill Ragozin, Kate Hartman, Johanna Virkki, Kai Kunze, Oskar Juhlin, Jonna Häkkilä
2021 B conf
TEI
Sangwon Jung, Ruowei Xiao, Oguz 'Oz' Buruk, Juho Hamari
2021 A conf
Conference on Designing Interactive Systems
Saumya Gupta, Ferran Altarriba Bertran, Oguz 'Oz' Buruk, Sara Milkes Espinosa, Theresa Jean Tanenbaum, Minerva Wu
2021 A* conf
CHI
Oguz 'Oz' Buruk, Çaglar Genç, Ihsan Ozan Yildirim, Mehmet Cengiz Onbasli, Oguzhan Özcan
2021 conf
CHI Extended Abstracts
Oguz 'Oz' Buruk, Juho Hamari
2021 A* conf
CHI
Oguz 'Oz' Buruk, Mikko Salminen, Nannan Xi, Timo Nummenmaa, Juho Hamari
2020 conf
CHI Extended Abstracts
Oguz 'Oz' Buruk, Oguzhan Özcan, Gökçe Elif Baykal, Tilbe Göksun, Selçuk Acar, Güler Akduman, Mehmet Aydin Baytas, Ceylan Besevli, Joe Best, Aykut Coskun, Hüseyin Ugur Genç, Ahmet Baki Kocaballi, Samuli Laato, Cassia Mota, Konstantinos Papangelis, Marigo Raftopoulos, Richard Ramchurn, Juan Sádaba, Mattia Thibault, Annika Wolff, Mert Yildiz
2020 J jnl
Adv. Hum. Comput. Interact.
Adnan Mehmood, Han He, Xiaochen Chen, Aleksi Vianto, Ville Vianto, Oguz 'Oz' Buruk, Johanna Virkki
2020 Misc conf
NordiCHI
Çaglar Genç, Ashley Colley, Oguz 'Oz' Buruk, Minna Pakanen, Jan Gugenheimer
2020 conf
CHI PLAY (Companion)
Ferran Altarriba Bertran, Ahmet Börütecene, Oguz 'Oz' Buruk, Mattia Thibault, Katherine Isbister
2020 A conf
Conference on Designing Interactive Systems
Mattia Thibault, Oguz 'Oz' Buruk, Seda Suman Buruk, Juho Hamari
2019 conf
HTTF
Ahmet Börütecene, Oguz 'Oz' Buruk
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"