Ilias Kalamaras

29 papers B 3C 2Misc 2Journal 12Unranked 10
YearRankTypeTitle / Venue / Authors
2025 conf
VISIGRAPP (1): GRAPP, HUCAPP, IVAPP
Maria Tsiobra, Georgios Nikolis, Christos Diamantakis, Matthew Salanitro, Ilias Kalamaras, Vasilis Lwlis, Thomas Penzel, Konstantinos Votis, Dimitrios Tzovaras
2023 J jnl
Neural Comput. Appl.
Alexander Scherrer, Tobias Zimmermann, Sinan Riedel, Stefanos Venios, Sotiris Koussouris, Maria Plakia, Sotiris Diamantopoulos, Sotiris Athanassopoulos, Paris Laras, Fihmi Mousa, Robert Zifrid, Hartmut Tillil, Isa Wasswa-Musisi, Thanos Kosmidis, Joaquim Reis, Markus Möhler, Gabrielle Oestreicher, Ilias Kalamaras, Konstantina Pantelidou, Konstantinos Votis, Charalampos Vassiliou
2023 conf
NLDL
Georgios Agrafiotis, Eftychia Makri, Ilias Kalamaras, Antonios Lalas, Konstantinos Votis, Dimitrios Tzovaras
2023 J jnl
Health Informatics J.
Ilias Kalamaras, George E. Dafoulas, Alexandra Bargiota, Konstantinos Votis
2023 conf
PETRA
Konstantina Pantelidou, Christoforos Papastergiopoulos, Ilias Kalamaras, Konstantinos Votis, Dimitrios Tzovaras
2022 conf
AIAI (Workshops)
Alexander Scherrer, Tobias Zimmermann, Sinan Riedel, Fihmi Mousa, Isa Wasswa-Musisi, Robert Zifrid, Hartmut Tillil, Philip Ulrich, Thanos Kosmidis, Joaquim Reis, Gabrielle Oestreicher, Markus Möhler, Ilias Kalamaras, Konstantinos Votis, Stefanos Venios, Maria Plakia, Sotiris Diamantopoulos
2022 J jnl
Multim. Tools Appl.
Ilias Kalamaras, Konstantinos Glykos, Vasilis Megalooikonomou, Konstantinos Votis, Dimitrios Tzovaras
2022 B conf
DCC
Eftychia Makri, Georgios Agrafiotis, Ilias Kalamaras, Antonios Lalas, Konstantinos Votis, Dimitrios Tzovaras
2021 J jnl
Sensors
Tiago Veiga, Arne Munch-Ellingsen, Christoforos Papastergiopoulos, Dimitrios Tzovaras, Ilias Kalamaras, Kerstin Bach, Konstantinos Votis, Sigmund Akselsen
2020 J jnl
IEEE J. Biomed. Health Informatics
Evangelia I. Zacharaki, Konstantinos Deltouzos, Spyridon Kalogiannis, Ilias Kalamaras, Luca Bianconi, Cristiana Degano, Roberto Orselli, Javier Montesa, Konstantinos Moustakas, Konstantinos Votis, Dimitrios Tzovaras, Vasileios Megalooikonomou
2020 conf
IOT Companion
Kerstin Bach, Sigmund Akselsen, Tiago Veiga, Ilias Kalamaras
2020 J jnl
SN Comput. Sci.
Thomas I. Tegou, Aristeides D. Papadopoulos, Ilias Kalamaras, Konstantinos Votis, Dimitrios Tzovaras
2019 J jnl
Sensors
Thomas I. Tegou, Ilias Kalamaras, Markos G. Tsipouras, Nikolaos Giannakeas, Konstantinos Votis, Dimitrios Tzovaras
2019 C conf
CIBCB
Eleftheria Polychronidou, Ilias Kalamaras, Konstantinos Votis, Dimitrios Tzovaras
2019 C conf
MEDES
Ilias Kalamaras, Ioannis Xygonakis, Konstantinos Glykos, Sigmund Akselsen, Arne Munch-Ellingsen, Hai Thanh Nguyen, Andreas Jacobsen Lepperod, Kerstin Bach, Konstantinos Votis, Dimitrios Tzovaras
2018 Misc conf
AIAI
Ilias Kalamaras, Anastasios Drosou, Konstantinos Votis, Dionysios D. Kehagias, Dimitrios Tzovaras
2018 conf
WMNC
Thomas I. Tegou, Ilias Kalamaras, Konstantinos Votis, Dimitrios Tzovaras
2018 J jnl
IEEE Trans. Intell. Transp. Syst.
Ilias Kalamaras, Alexandros Zamichos, Athanasios Salamanis, Anastasios Drosou, Dionysios D. Kehagias, Georgios Margaritis, Stavros Papadopoulos, Dimitrios Tzovaras
2018 B conf
WiMob
Markos G. Tsipouras, Nikolaos Giannakeas, Thomas I. Tegou, Ilias Kalamaras, Konstantinos Votis, Dimitrios Tzovaras
2018 J jnl
BMC Bioinform.
Eleftheria Polychronidou, Ilias Kalamaras, Andreas Agathangelidis, Lesley Ann Sutton, Xiao-Jie Yan, Vasilis Bikos, Anna Vardi, Konstantinos Mochament, Nicholas Chiorazzi, Chrysoula Belessi, Richard Rosenquist, Paolo Ghia, Kostas Stamatopoulos, Panayiotis M. Vlamos, Anna Chailyan, Nanna Overby, Paolo Marcatili, Anastasia Hatzidimitriou, Dimitrios Tzovaras
2018 conf
ICC Workshops
Stavros Papadopoulos, Anastasios Drosou, Ilias Kalamaras, Dimitrios Tzovaras
2018 conf
AIAI (Workshops)
Ilias Kalamaras, Nikolaos Kaklanis, Konstantinos Votis, Dimitrios Tzovaras
2018 conf
SETN
Eleftheria Polychronidou, Ilias Kalamaras, Konstantinos Votis, Dimitrios Tzovaras
2017 B conf
DSAA
Ilias Kalamaras, Anastasios Drosou, Eleftheria Polychronidou, Dimitrios Tzovaras
2017 J jnl
Multim. Tools Appl.
Ilias Kalamaras, Nikolaos Dimitriou, Anastasios Drosou, Dimitrios Tzovaras
2016 J jnl
J. Innov. Digit. Ecosyst.
Anastasios Drosou, Ilias Kalamaras, Stavros Papadopoulos, Dimitrios Tzovaras
2015 conf
ICC Workshops
Ilias Kalamaras, Anastasios Drosou, Dimitrios Tzovaras
2015 Misc conf
AIAI
Ilias Kalamaras, Stavros Papadopoulos, Anastasios Drosou, Dimitrios Tzovaras
2014 J jnl
IEEE Trans. Multim.
Ilias Kalamaras, Anastasios Drosou, Dimitrios Tzovaras
redb/extractors/js_extractors/scripts/js-xray-runner.js
← Index redb/extractors/js_extractors/scripts/js-xray-runner.js javascript
#!/usr/bin/env node
// Bridge between the Python JS pipeline and @nodesecure/js-x-ray.
//
// Usage: node js-xray-runner.js <path-to-js-file>
//   stdout  one JSON object: {"obfuscator": <name|null>, "warnings": [...]}
//   stderr  human-readable error on failure
//   exit 0  analysis ran (the file may still be benign — see "obfuscator")
//   exit 1  the file could not be read or analysed
//
// Each warning is emitted as {kind, value} so the Python side can tag
// supporting signals (encoded-literal, short-identifiers, suspicious-literal,
// unsafe-stmt) without having to mirror js-x-ray's whole schema.
//
// js-x-ray ≥7 ships as an ES module, which CommonJS `require()` cannot load
// from a `.js` script — the dynamic `import()` below is what makes the
// bridge work without renaming the file to `.mjs` or adding `"type":
// "module"` to package.json (which would break tools that still
// `require()` from this directory).

const fs = require("fs");
const path = require("path");

function fail(msg) {
  process.stderr.write(msg + "\n");
  process.exit(1);
}

async function main() {
  const target = process.argv[2];
  if (!target) fail("usage: js-xray-runner.js <file>");

  let source;
  try {
    source = fs.readFileSync(target, "utf8");
  } catch (e) {
    fail(`read failed: ${e.message}`);
  }

  // The legacy `runASTAnalysis` function is deprecated (removed in v8); the
  // current API is the `AstAnalyser` class. Both produce a result with the
  // same `warnings` shape, so the rest of the bridge is unchanged.
  let AstAnalyser;
  try {
    ({ AstAnalyser } = await import("@nodesecure/js-x-ray"));
  } catch (e) {
    fail(`@nodesecure/js-x-ray not installed (run \`npm install\` in ${path.dirname(__filename)}): ${e.message}`);
  }

  // js-x-ray defaults to module-mode parsing, which rejects scripts that
  // (legally) use reserved words as identifiers, top-level `return`, etc.
  // A lot of real-world JS malware is script-style (WScript/HTA bodies,
  // pasted snippets) — retrying in script mode catches those without
  // pulling in a more lenient parser. Both attempts share the same
  // analyser; only the parse mode flips. If both fail, the original error
  // (module-mode) is reported because that's the more informative one for
  // genuinely broken sources.
  let result;
  const analyser = new AstAnalyser();
  let firstErr;
  try {
    result = await analyser.analyse(source, { module: true });
  } catch (e) {
    firstErr = e;
    try {
      result = await analyser.analyse(source, { module: false });
    } catch (e2) {
      fail(`js-x-ray analysis failed: ${firstErr.message}`);
    }
  }

  const warnings = (result.warnings || []).map((w) => ({
    kind: w.kind,
    value: w.value !== undefined ? w.value : null,
  }));

  // js-x-ray flags the obfuscator family in a warning whose kind is
  // "obfuscated-code" and whose value names the family (jsfuck, obfuscator.io,
  // freejsobfuscator, morse, jjencode, ...). Absent => not detected.
  const obfWarning = warnings.find((w) => w.kind === "obfuscated-code");
  const obfuscator = obfWarning ? obfWarning.value : null;

  // js-x-ray runs its own AST internally with a modern parser, so its
  // identifier-length average is the only path the Python pipeline has to
  // that signal on ES2015+ sources — pyjsparser is ES5.1-only and silently
  // drops to 0 the moment it hits destructuring, classes, optional chaining,
  // etc. Surfacing this lets the heuristic's `avg_identifier_length<2`
  // strong signal fire on real obfuscator.io output. `null` when the value
  // is missing or non-numeric (defensive — older js-x-ray builds may differ).
  const idsLengthAvg =
    typeof result.idsLengthAvg === "number" && !Number.isNaN(result.idsLengthAvg)
      ? result.idsLengthAvg
      : null;

  process.stdout.write(JSON.stringify({ obfuscator, warnings, idsLengthAvg }));
}

main().catch((e) => fail(e.message || String(e)));