I’ve modified v8 slightly to print the URL JS originates from before it’s parsed.
Background: I’m also printing the JS itself so as to deobfuscate potential malicious JS step-by-step. jmrk kindly showed me how to do that.
What works
Chromium prints object containing the JS URL to stdout: Name: 0x2357009098e1 <String[55]: e”chrome://… module_proxy.js”>
What doesn’t work
How do I reference/extract the URL string in the object: “chrome://…” It’s probably simple but my c++ skills are limited?
Code excerpt (v8/src/parsing/parsing.cc)
@@ -16,6 +16,14 @@
#include "src/parsing/scanner-character-streams.h"
#include "src/zone/zone-list-inl.h" // crbug.com/v8/8816
+ #include <string>
+ #include <iostream>
+ #include <stdio.h>
+ #include "src/objects/script.h"
+ #include "src/objects/call-site-info.h"
+
namespace v8 {
namespace internal {
namespace parsing {
@@ -50,6 +58,11 @@ bool ParseProgram(ParseInfo* info, Handle<Script> script,
ScannerStream::For(isolate, source));
info->set_character_stream(std::move(stream));
+ if (script->HasValidSource()) {
+ Handle<Object> source_url(script->GetNameOrSourceURL(), isolate);
+ std::cout << source_url << std::endl;
+ }
+
Parser parser(isolate->main_thread_local_isolate(), info, script);
Thank you.