Neehar Peri

48 papers A* 8B 1Misc 2Journal 26Unranked 11
YearRankTypeTitle / Venue / Authors
2026 J jnl
CoRR
Gautam Rajendrakumar Gare, Neehar Peri, Matvei Popov, Shruti Jain, John M. Galeotti, Deva Ramanan
2025 J jnl
CoRR
Zihan Wang, Jeff Tan, Tarasha Khurana, Neehar Peri, Deva Ramanan
2025 A* conf
ICLR
Kyle Vedder, Neehar Peri, Ishan Khatri, Siyi Li, Eric Eaton, Mehmet Kemal Kocamaz, Yue Wang, Zhiding Yu, Deva Ramanan, Joachim Pehserl
2025 A* conf
ICRA
Arun Balajee Vasudevan, Neehar Peri, Jeff Schneider, Deva Ramanan
2025 conf
HCI (60)
Daniel Syomichev, Padmini Gopinath, Guang-Lin Wei, Eric Chang, Ian Gordon, Amanuel Seifu, Rahul Pemmaraju, Neehar Peri, James Purtilo
2025 J jnl
CoRR
Daniel Syomichev, Padmini Gopinath, Guang-Lin Wei, Eric Chang, Ian Gordon, Amanuel Seifu, Rahul Pemmaraju, Neehar Peri, James Purtilo
2025 J jnl
CoRR
Isaac Robinson, Peter Robicheaux, Matvei Popov, Deva Ramanan, Neehar Peri
2025 J jnl
CoRR
Cainan Davidson, Deva Ramanan, Neehar Peri
2025 J jnl
CoRR
Peter Robicheaux, Matvei Popov, Anish Madan, Isaac Robinson, Joseph Nelson, Deva Ramanan, Neehar Peri
2025 A* conf
ICML
Ayça Takmaz, Cristiano Saltori, Neehar Peri, Tim Meinhardt, Riccardo de Lutio, Laura Leal-Taixé, Aljosa Osep
2025 J jnl
CoRR
Ayça Takmaz, Cristiano Saltori, Neehar Peri, Tim Meinhardt, Riccardo de Lutio, Laura Leal-Taixé, Aljosa Osep
2025 J jnl
CoRR
Siyi Li, Qingwen Zhang, Ishan Khatri, Kyle Vedder, Deva Ramanan, Neehar Peri
2024 conf
ECCV (39)
Aljosa Osep, Tim Meinhardt, Francesco Ferroni, Neehar Peri, Deva Ramanan, Laura Leal-Taixé
2024 J jnl
CoRR
Aljosa Osep, Tim Meinhardt, Francesco Ferroni, Neehar Peri, Deva Ramanan, Laura Leal-Taixé
2024 J jnl
IEEE Trans. Biom. Behav. Identity Sci.
Thirimachos Bourlai, Jacob Rose, Suha Reddy Mokalla, Ananya Zabin, Lawrence A. Hornak, Christopher B. Nalty, Neehar Peri, Joshua Gleason, Carlos Domingo Castillo, Vishal M. Patel, Rama Chellappa
2024 conf
ECCV (18)
Ishan Khatri, Kyle Vedder, Neehar Peri, Deva Ramanan, James Hays
2024 J jnl
CoRR
Ishan Khatri, Kyle Vedder, Neehar Peri, Deva Ramanan, James Hays
2024 J jnl
CoRR
Kyle Vedder, Neehar Peri, Ishan Khatri, Siyi Li, Eric Eaton, Mehmet Kemal Kocamaz, Yue Wang, Zhiding Yu, Deva Ramanan, Joachim Pehserl
2024 J jnl
CoRR
Arun Balajee Vasudevan, Neehar Peri, Jeff Schneider, Deva Ramanan
2024 A* conf
NeurIPS
Anish Madan, Neehar Peri, Shu Kong, Deva Ramanan
2024 Misc conf
CoRL
Mehar Khurana, Neehar Peri, James Hays, Deva Ramanan
2024 J jnl
CoRR
Mehar Khurana, Neehar Peri, Deva Ramanan, James Hays
2024 A* conf
ICLR
Kyle Vedder, Neehar Peri, Nathaniel Chodosh, Ishan Khatri, Eric Eaton, Dinesh Jayaraman, Yang Liu, Deva Ramanan, James Hays
2023 conf
ICCV (Workshops)
Neehar Peri, Mengtian Li, Benjamin Wilson, Yu-Xiong Wang, James Hays, Deva Ramanan
2023 J jnl
CoRR
Neehar Peri, Mengtian Li, Benjamin Wilson, Yu-Xiong Wang, James Hays, Deva Ramanan
2023 J jnl
CoRR
Yechi Ma, Neehar Peri, Shuoquan Wei, Wei Hua, Deva Ramanan, Yanan Li, Shu Kong
2023 conf
AutomationXP@CHI
Wesley Chen, Andrew Edgley, Raunak Hota, Joshua Liu, Ezra Schwartz, Aminah Yizar, James Purtilo, Neehar Peri
2023 J jnl
CoRR
Wesley Chen, Andrew Edgley, Raunak Hota, Joshua Liu, Ezra Schwartz, Aminah Yizar, Neehar Peri, James Purtilo
2023 J jnl
CoRR
Anish Madan, Neehar Peri, Shu Kong, Deva Ramanan
2023 J jnl
CoRR
Kyle Vedder, Neehar Peri, Nathaniel Chodosh, Ishan Khatri, Eric Eaton, Dinesh Jayaraman, Yang Liu, Deva Ramanan, James Hays
2022 conf
IEEECONF
Chrisopher B. Nalty, Neehar Peri, Joshua Gleason, Carlos Domingo Castillo, Shuowen Hu, Thirimachos Bourlai, Rama Chellappa
2022 J jnl
CoRR
Chrisopher B. Nalty, Neehar Peri, Joshua Gleason, Carlos Domingo Castillo, Shuowen Hu, Thirimachos Bourlai, Rama Chellappa
2022 conf
HCI (9)
Alexandra A. Shaver, Neehar Peri, Remy Mezebish, George Matthew, Alyza Berson, Christopher Gaskins, Gregory P. Davis, Garrett E. Katz, Immanuel Babu Henry Samuel, Matthew J. Reinhard, Michelle E. Costanzo, James A. Reggia, James Purtilo, Rodolphe J. Gentili
2022 A* conf
CVPR
Neehar Peri, Jonathon Luiten, Mengtian Li, Aljosa Osep, Laura Leal-Taixé, Deva Ramanan
2022 J jnl
CoRR
Neehar Peri, Jonathon Luiten, Mengtian Li, Aljosa Osep, Laura Leal-Taixé, Deva Ramanan
2022 Misc conf
CoRL
Neehar Peri, Achal Dave, Deva Ramanan, Shu Kong
2022 J jnl
CoRR
Neehar Peri, Achal Dave, Deva Ramanan, Shu Kong
2021 B conf
FG
Neehar Peri, Joshua Gleason, Carlos Domingo Castillo, Thirimachos Bourlai, Vishal M. Patel, Rama Chellappa
2021 J jnl
CoRR
Neehar Peri, Joshua Gleason, Carlos Domingo Castillo, Thirimachos Bourlai, Vishal M. Patel, Rama Chellappa
2021 A* conf
NeurIPS
Neehar Peri, Michael J. Curry, Samuel Dooley, John Dickerson
2021 J jnl
CoRR
Neehar Peri, Michael J. Curry, Samuel Dooley, John P. Dickerson
2020 conf
ECCV Workshops (1)
Neehar Peri, Neal Gupta, W. Ronny Huang, Liam Fowl, Chen Zhu, Soheil Feizi, Tom Goldstein, John P. Dickerson
2020 conf
ECCV (14)
Pirazh Khorramshahi, Neehar Peri, Jun-Cheng Chen, Rama Chellappa
2020 J jnl
CoRR
Pirazh Khorramshahi, Neehar Peri, Jun-Cheng Chen, Rama Chellappa
2020 conf
CVPR Workshops
Neehar Peri, Pirazh Khorramshahi, Sai Saketh Rambhatla, Vineet R. Shenoy, Saumya Rawat, Jun-Cheng Chen, Rama Chellappa
2019 J jnl
CoRR
Pirazh Khorramshahi, Amit Kumar, Neehar Peri, Sai Saketh Rambhatla, Jun-Cheng Chen, Rama Chellappa
2019 A* conf
ICCV
Pirazh Khorramshahi, Amit Kumar, Neehar Peri, Sai Saketh Rambhatla, Jun-Cheng Chen, Rama Chellappa
2019 conf
CVPR Workshops
Pirazh Khorramshahi, Neehar Peri, Amit Kumar, Anshul Shah, Rama Chellappa
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)));