Nadia Essoussi

48 papers B 6C 9Journal 12Unranked 19
YearRankTypeTitle / Venue / Authors
2024 C conf
INISTA
Sirine Ben Ghozzi, Mohamed Aymen Ben HajKacem, Nadia Essoussi
2024 J jnl
J. Intell. Inf. Syst.
Maha Fraj, Mohamed Aymen Ben HajKacem, Nadia Essoussi
2022 ch.
Machine Learning and Data Analytics for Solving Business Problems
Maha Fraj, Mohamed Aymen Ben HajKacem, Nadia Essoussi
2022 C conf
iiWAS
Maha Fraj, Mohamed Aymen Ben HajKacem, Nadia Essoussi
2021 J jnl
Computing
Mohamed Aymen Ben HajKacem, Chiheb-Eddine Ben N'cir, Nadia Essoussi
2021 J jnl
SN Comput. Sci.
Chiheb-Eddine Ben N'cir, Mohamed Ismail Maiza, Waad Bouaguel, Nadia Essoussi
2021 B conf
DaWaK
Mohamed Aymen Ben HajKacem, Chiheb-Eddine Ben N'cir, Nadia Essoussi
2020 J jnl
J. Inf. Telecommun.
Maha Fraj, Mohamed Aymen Ben HajKacem, Nadia Essoussi
2020 B conf
DaWaK
Hiba Jridi, Mohamed Aymen Ben HajKacem, Nadia Essoussi
2020 B conf
DaWaK
Maha Fraj, Mohamed Aymen Ben HajKacem, Nadia Essoussi
2019 conf
AMLTA
Bochra Zaghdoudi, Waad Bouaguel, Nadia Essoussi
2019 conf
ICDEc
Kenza Rziga, Mohamed Aymen Ben HajKacem, Nadia Essoussi
2019 conf
ICCCI (1)
Maha Fraj, Mohamed Aymen Ben HajKacem, Nadia Essoussi
2019 ch.
Machine Learning Paradigms
Rania Saidi, Waad Bouaguel, Nadia Essoussi
2019 J jnl
J. Intell. Inf. Syst.
Mohamed Aymen Ben HajKacem, Chiheb-Eddine Ben N'cir, Nadia Essoussi
2019 J jnl
Int. J. Pattern Recognit. Artif. Intell.
Mohamed Aymen Ben HajKacem, Chiheb-Eddine Ben N'cir, Nadia Essoussi
2018 C conf
MEDI
Ikram Abdelkhalek, Afef Ben Brahim, Nadia Essoussi
2018 C conf
AICCSA
Maha Fraj, Mohamed Aymen Ben HajKacem, Nadia Essoussi
2018 conf
ICDEc
Marwa El Abri, Philippe Leray, Nadia Essoussi
2018 conf
AMLTA
Rania Saidi, Waad Bouaguel Ncir, Nadia Essoussi
2018 B conf
DaWaK
Mohamed Aymen Ben HajKacem, Chiheb-Eddine Ben N'cir, Nadia Essoussi
2017 C conf
AICCSA
Mohamed Aymen Ben HajKacem, Chiheb-Eddine Ben N'cir, Nadia Essoussi
2017 C conf
AICCSA
Marwa El Abri, Philippe Leray, Nadia Essoussi
2017 conf
ICDEc
Chiheb-Eddine Ben N'cir, Nadia Essoussi
2017 conf
ICDEc
Mohamed Ismail Maiza, Chiheb-Eddine Ben N'cir, Nadia Essoussi
2016 C conf
HIS
Wassila Jerbi, Afef Ben Brahim, Nadia Essoussi
2016 conf
ICCCI (2)
Jamila Yazidi, Waad Bouaguel, Nadia Essoussi
2016 conf
STAF Workshops
Mohamed Aymen Ben HajKacem, Chiheb-Eddine Ben N'cir, Nadia Essoussi
2016 B conf
RCIS
Mohamed Ismail Maiza, Chiheb-Eddine Ben N'cir, Nadia Essoussi
2016 conf
IEEE BigData
Abir Zayani, Chiheb-Eddine Ben N'cir, Nadia Essoussi
2015 J jnl
J. Classif.
Chiheb-Eddine Ben N'cir, Nadia Essoussi, Mohamed Limam
2015 B conf
DSAA
Mohamed Aymen Ben HajKacem, Chiheb-Eddine Ben N'cir, Nadia Essoussi
2015 conf
ICCCI (2)
Mohamed Aymen Ben HajKacem, Chiheb-Eddine Ben N'cir, Nadia Essoussi
2015 J jnl
Int. J. Pattern Recognit. Artif. Intell.
Chiheb-Eddine Ben N'cir, Nadia Essoussi
2014 J jnl
Pattern Recognit. Lett.
Chiheb-Eddine Ben N'cir, Guillaume Cleuziou, Nadia Essoussi
2014 conf
EGC
Chiheb-Eddine Ben N'cir, Guillaume Cleuziou, Nadia Essoussi
2014 conf
EGC
Hela Masmoudi, Chiheb-Eddine Ben N'cir, Nadia Essoussi
2014 C conf
ICPRAM
Amira Rezgui, Chiheb-Eddine Ben N'cir, Nadia Essoussi
2013 C conf
MODELSWARD
Haïfa Nakouri, Nadia Essoussi
2013 conf
MIKE
Chiheb-Eddine Ben N'cir, Nadia Essoussi
2013 conf
EGC
Chiheb-Eddine Ben N'cir, Afef Zenned, Nadia Essoussi
2013 conf
KDIR/KMIS
Chiheb-Eddine Ben N'cir, Nadia Essoussi
2012 J jnl
CoRR
Chiheb-Eddine Ben N'cir, Nadia Essoussi
2012 J jnl
CoRR
Chiheb-Eddine Ben N'cir, Nadia Essoussi, Patrice Bertrand
2011 conf
DEXA Workshops
Sondes Fayech, Nadia Essoussi, Mohamed Limam
2010 conf
KDIR
Chiheb-Eddine Ben N'cir, Nadia Essoussi, Patrice Bertrand
2009 J jnl
BioData Min.
Sondes Fayech, Nadia Essoussi, Mohamed Limam
2001 conf
DIWeb
Nadia Essoussi, Mohamed Ben Ahmed
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)));