Vincent Garonne

17 papers A 1B 1C 2Journal 10Unranked 3
YearRankTypeTitle / Venue / Authors
2025 J jnl
CoRR
Mohammad Atif, Vincent Garonne, Eric Lancon, Jerome Lauret, Alexandr Prozorov, Michal Vranovsky
2025 J jnl
Comput. Softw. Big Sci.
Diego Ciangottini, Alessandra Forti, Lukas Heinrich, Nicola Skidmore, C. Alpigiani, M. Aly, D. Benjamin, B. Bockelman, L. Bryant, J. Catmore, M. D'Alfonso, Antonio Delgado Peris, Caterina Doglioni, G. Duckeck, Peter Elmer, Jonas Eschle, Matthew Feickert, J. Frost, Robert W. Gardner, Vincent Garonne, M. Giffels, J. Gooding, E. Gramstad, Lindsey Gray, Benedikt Hegner, A. Held, José M. Hernández, Burt Holzman, F. Hu, Brij Kishor Jashal, D. Kondratyev, Evangelos Kourlitis, Luke Kreczko, I. Krommydas, T. Kuhr, Eric Lancon, Clemens Lange, David Lange, J. Lange, P. Lenzi, Tomas Lindén, Verena Ingrid Martinez Outschoorn, Shawn McKee, J. F. Molina, Mark S. Neubauer, A. Novak, Ianna Osborne, Farid Ould-Saada, Adela Pagès-Bernaus, Kevin Pedro, Antonio Perez-Calero Yzquierdo, S. Piperov, James Pivarski, Eduardo Rodrigues, Niladri Sahoo, Andrea Sciabà, M. Schulz, L. Sexton-Kennedy, Oksana Shadura, Tibor Simko, Nicholas Smith, Daniele Spiga, Giordon Stark, Graeme A. Stewart, Ilija Vukotic, Gordon Watts
2019 J jnl
CoRR
Martin Barisits, Thomas Beermann, Frank Berghaus, Brian Bockelman, Joaquín Bogado, David Cameron, Dimitrios Christidis, Diego Ciangottini, Gancho Dimitrov, Markus Elsing, Vincent Garonne, Alessandro Di Girolamo, Luc Goossens, Wen Guan, Jaroslav Guenther, Tomas Javurek, Dietmar Kuhn, Mario Lassnig, Fernando Lopez, Nicolò Magini, Angelos Molfetas, Armin Nairz, Farid Ould-Saada, Stefan Prenner, Cedric Serfon, Graeme A. Stewart, Eric Vaandering, Petya Vasileva, Ralph Vigne, Tobias Wegner
2019 J jnl
Comput. Softw. Big Sci.
Martin Barisits, Thomas Beermann, Frank Berghaus, Brian Bockelman, Joaquín Bogado, David Cameron, Dimitrios Christidis, Diego Ciangottini, Gancho Dimitrov, Markus Elsing, Vincent Garonne, Alessandro Di Girolamo, Luc Goossens, Wen Guan, Jaroslav Guenther, Tomas Javurek, Dietmar Kuhn, Mario Lassnig, Fernando Lopez, Nicolò Magini, Angelos Molfetas, Armin Nairz, Farid Ould-Saada, Stefan Prenner, Cedric Serfon, Graeme A. Stewart, Eric Vaandering, Petya Vasileva, Ralph Vigne, Tobias Wegner
2018 C conf
PDP
A. Paul Millar, Olufemi Adeyemi, Gerd Behrmann, Patrick Fuhrmann, Vincent Garonne, Dmitry Litvintsev, Tigran Mkrtchyan, Albert Rossi, Marina Sahakyan, Jürgen Starek
2011 A conf
SC
Mario Lassnig, Thomas Fahringer, Vincent Garonne, Angelos Molfetas, Martin Barisits
2010 B conf
CCGRID
Mario Lassnig, Thomas Fahringer, Vincent Garonne, Angelos Molfetas, Miguel Branco
2010 J jnl
Concurr. Comput. Pract. Exp.
Miguel Branco, Ed Zaluska, David De Roure, Mario Lassnig, Vincent Garonne
2009 conf
eScience
Mario Lassnig, Thomas Fahringer, Vincent Garonne, Angelos Molfetas, Miguel Branco
2008 conf
OTM Conferences (1)
Miguel Branco, Ed Zaluska, David De Roure, Pedro Salgado, Vincent Garonne, Mario Lassnig, Ricardo Rocha
2007 J jnl
Future Gener. Comput. Syst.
Eddy Caron, Vincent Garonne, Andrei Tsaregorodtsev
2007 J jnl
Concurr. Comput. Pract. Exp.
Ian Stokes-Rees, Andrei Tsaregorodtsev, Vincent Garonne, Ricardo Graciani Diaz, Manuel Sanchez, Markus Frank, Joel Closier
2005 C conf
ISPDC
Vincent Garonne, Andrei Tsaregorodtsev, Eddy Caron
2004 conf
GRID
Andrei Tsaregorodtsev, Vincent Garonne, Ian Stokes-Rees
2004 J jnl
J. Grid Comput.
Stephen Burke, F. Harris, Ian Stokes-Rees, I. Augustin, F. Carminati, Joel Closier, Eric van Herwijnen, Andrea Sciabà, D. Boutigny, J. J. Blaising, Vincent Garonne, Andrei Tsaregorodtsev, P. Capiluppi, Alessandra Fanfani, Claudio Grandi, Roberto Barbera, Eleonora Luppi, Guido Negri, Laura Perini, Silvia Resconi, Mario Reale, Alessandro De Salvo, Stefano Bagnasco, Piergiorgio Cerello, K. Bos, David L. Groep, W. van Leeuwen, Jeffrey Templon, Oxana Smirnova, Owen J. E. Maroney, Frederic Brochu, D. Colling
2003 J jnl
CoRR
N. Brook, A. Bogdanchikov, Andy Buckley, Joel Closier, Ulrik Egede, M. Frank, Domenico Galli, Miriam Gandelman, Vincent Garonne, Clara Gaspar, Roberto Graciani Diaz, Karl Harrison, Eric van Herwijnen, A. Khan, Sander Klous, Ivan Korolko, Genady Kuznetsov, Francoise Loverre, Umberto Marconi, Juan P. Palacios, Glen N. Patrick, Andrew Pickford, Sebastien Ponce, Vladimir Romanovski, Juan J. Saborido, Michael Schmelling, Alexander Soroko, Andrei Tsaregorodtsev, Vincenzo Vagnoni, Andrew Washbrook
2003 J jnl
CoRR
I. Augustin, F. Carminati, Joel Closier, Eric van Herwijnen, J. J. Blaising, D. Boutigny, C. Charlot, Vincent Garonne, Andrei Tsaregorodtsev, K. Bos, Jeffrey Templon, P. Capiluppi, Alessandra Fanfani, Roberto Barbera, Guido Negri, Laura Perini, Silvia Resconi, Mario Sitta, Mario Reale, Domenico Vicinanza, Stefano Bagnasco, Piergiorgio Cerello, Andrea Sciabà, Oxana Smirnova, D. Colling, F. Harris, Stephen Burke
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)