Firefox Resources Reader

The resource:// URI scheme is used by Firefox to call on-disk resources from internal modules and extensions.

But some of these resources may also be included to any web page and executed via script tag. Mozilla developers is not consider the resources as a fingerprinting vector, despite the fact that some of them can reveal what the user does not wish. For example, differences in built-in preferences files clearly indicates you are using Windows or Linux or Mac, even if you're behind Tor Browser.

This tool will show some of the files which can be accessed from web, and some detects based on their content. More description and code samples see below on this page.

Summary

Platform Detection× No
Default Locale× No
Update Locale× No
Tor Browser× No

Firefox Build

Firefox Official Build× No
Firefox Release Build× No
Firefox ESR Channel× No
Firefox Beta Channel× No
Firefox Developer Edition× No
Firefox Nightly Build× No
Firefox GTK Build× No
PDF.js× No

Default Preferences

FilenameItemsHash
× firefox.js
× firefox-branding.js
× firefox-l10n.js
× webide-prefs.js
× greprefs.js
× services-sync.js
× 000-tor-browser.js
Total

Firefox Resources Reader Details

Default Preferences table is a list of built-in Firefox files that contain Firefox defaults. They are identical for all those who install the same Firefox Setup.exe, but they may be different between Firefox versions, platforms, repositories. The table also shows the number of items in each file, and MD5 hash of all items ("key+val+key+val…") that helps to identify the similarity or difference with another Firefox instance.

Locale Detection is done by two ways. First way is trying resource:///chrome/*/locale/ directories for all possible Firefox locales. If the resource:///chrome/zh-TW/ exists, that means this Firefox is Chinese. Second way (not available if the Firefox installed from a Linux repository) is reading resource://gre/update.locale file, that contains a locale that is used on Firefox Update, so it shows real Firefox interface language.

Platform Detection and Firefox Build type is done by comparing differences in resource:///defaults/preferences/firefox.js. Some keys and values in this file exist only on Windows, some on Linux, some on Mac. Thus it enables to determine the OS:

  1. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  2. <script>
  3. /**
  4. *  OS Detection using firefox.js
  5. *
  6. *  (c) 2015 https://browserleaks.com/firefox
  7. *  License: CC-BY-NC-ND
  8. */
  9. var include = function(load, err) {
  10.     var el = document.createElement("script");
  11.     el.type = "text/javascript";
  12.     el.onload = load;
  13.     el.onerror = err;
  14.     document.head.appendChild(el);
  15.     el.src = "resource:///defaults/preferences/firefox.js";
  16. }
  17. var pref,
  18.     sticky_pref,
  19.     os;
  20. pref = sticky_pref = function(key, val) {
  21.     if (!os)
  22.         if (key == "browser.gesture.pinch.out" && val == "cmd_fullZoomEnlarge")
  23.             os = "Windows";
  24.         else if (key == "browser.backspace_action" && val == "2")
  25.             os = "Linux";
  26.         else if (key == "browser.gesture.pinch.threshold" && val == "150")
  27.             os = "Mac";
  28. }
  29. include(function() {
  30.     console.log( "OS: " + (os ? os : "unknown") );
  31. },function() {
  32.     console.log( "OS: n/a (not a Firefox)" );
  33. });
  34. </script>

Leave a Comment