From 7c94f2f8386534c29e0d7b67fe96416f153b3479 Mon Sep 17 00:00:00 2001 From: z0ccc Date: Sun, 18 Dec 2022 16:52:29 -0500 Subject: [PATCH] read me update --- README.md | 135 ++++++----------------------------------------- promo/chrome.png | Bin 0 -> 9469 bytes promo/edge.png | Bin 0 -> 4398 bytes promo/opera.png | Bin 0 -> 10317 bytes 4 files changed, 17 insertions(+), 118 deletions(-) create mode 100644 promo/chrome.png create mode 100644 promo/edge.png create mode 100644 promo/opera.png diff --git a/README.md b/README.md index 00d4977..5384b7c 100755 --- a/README.md +++ b/README.md @@ -1,26 +1,32 @@ # Vytal -Get Vytal for Chromium +

+Get Vytal for Chrome +Get Vytal for Microsoft Edge +Get Vytal for Opera +

-Spoof your location data and user agent. +Browser extension to spoof your timezone, geolocation, locale and user agent. ## About -Vytal can spoof your timezone, locale, geolocation and user agent. This data can be used to track you or reveal your location. Vytal is not a VPN or proxy and will not change your IP. +This extension allows you to customize your browser's settings to appear as if you are accessing the internet from a different location, locale, or device. This can be useful for testing websites, bypassing regional restrictions, or protecting your privacy online. With just a few clicks, you can change your time zone, locale, geolocation, and user agent to match your desired settings. -Most extensions that provide anti-fingerprinting features rely on content scripts to inject script tags into webpages. There are many limitations to script tag injections which you can read about here: https://palant.info/2020/12/10/how-anti-fingerprinting-extensions-tend-to-make-fingerprinting-easier/ +Most extensions that provide anti-fingerprinting features rely on content scripts to inject script tags into webpages. There are many limitations to script tag injections which you can read about here: https://palant.info/2020/12/10/how-anti-fingerprinting-extensions-tend-to-make-fingerprinting-easier Vytal utilizes the chrome.debugger API to spoof this data. This allows the data to be spoofed in frames, web workers and during the initial loading of a website. It also makes the spoofing completely undetectable. +Vytal is not a VPN or proxy and will not change your IP. Although it can be used in combination with a VPN to obscure your true location. + You can test and compare Vytal and other extensions on https://vytal.io -Vytal contains no ads and signup is not required. +Vytal contains collects no data and signup is not required. ## Limitations ### Debugging bar -While the chrome.debugger API is active, a bar under the address bar is displayed. Hiding the bar is only possible when the --silent-debugger-extension-api command-line switch is used. +While the chrome.debugger API is active, a bar under the address bar is displayed. Hiding the bar is only possible when the --silent-debugger-extension-api command-line switch is used. Instructions on how to run chromium with flags: https://www.chromium.org/developers/how-tos/run-chromium-with-flags @@ -30,126 +36,19 @@ Unfortunately Vytal doesn't work on Firefox since Firefox doesn't support the de ### New tab -The chrome debugger cannot attach itself to chrome://newtab. This can result in data leakage to the first non chrome:// page you navigate to. - +The chrome debugger cannot attach itself to chrome://newtab. This can result in data leakage to the first non chrome:// page you navigate to. ### Locale override does not mock language data Unlike the Chrome devtools location sensor, overriding the locale does not change language data (such as navigator.language or navigator.languages). There is an open ticket about this here: https://bugs.chromium.org/p/chromium/issues/detail?id=1306254 -## Data Retrieval Methods - -### Top window - -The top window is the topmost window in the hierarchy of window objects. - -### Initial load - -Data spoofing methods can have slight delays between the loading of a webpage and the data being spoofed. Data can be retrieved at the very start of loading before the data can be spoofed. - -### Frame - -A frame is a part of a web page which displays content independent of its container, with the ability to load content independently. The HTML or media elements shown in a frame may come from a different web site as the other elements of content on display. - -### Web worker - -Web Workers are a simple means for web content to run scripts in background threads. The worker thread can perform tasks without interfering with the user interface. Once created, a worker can send messages to the JavaScript code that created it by posting messages to an event handler specified by that code (and vice versa). Extension content scripts cannot be injected into workers - -## Data Tampering - -Data spoofed with Vytal can not be detected. Although other extensions which spoof data can be detected. https://vytal.io allows you to compare and test these various tools. A red x signifies that the scanner has detected tampered data. A green check means that no tampering has -been detected. Clicking on the table row of the tampered data will bring up a modal box showing the type of detected tampering. - -## Types of Tampering - -### Failed Date.prototype.setDate.toString() - -``` -if (!Date.prototype.setDate.toString().includes('[native code]')) { - return true; -} -return false; -``` - -### Failed Object.getPrototypeOf(Intl.DateTimeFormat.prototype).constructor.toString() - -``` - if ( - !Object.getPrototypeOf(Intl.DateTimeFormat.prototype) - .constructor.toString() - .includes('Object') - ) { - return true; - } - return false; -``` - -### Failed Intl.DateTimeFormat.prototype.resolvedOptions.toString() - -``` - if ( - !Intl.DateTimeFormat.prototype.resolvedOptions - .toString() - .includes('[native code]') - ) { - return true; - } - return false; -``` - -### Failed Object.getOwnPropertyDescriptor(navigator, key) - -``` - if (Object.getOwnPropertyDescriptor(navigator, key) !== undefined) { - return true; - } - return false; -``` - -### Failed object.getOwnPropertyDescriptor(Navigator.prototype, key).value - -``` - if ( - Object.getOwnPropertyDescriptor(Navigator.prototype, key).value !== - undefined - ) { - return true; - } - return false; -``` - -### Failed Failed Navigator.prototype[key] - -``` - try { - const check = Navigator.prototype[key]; - return true; - } catch (err) { - return false; - } -``` - -### Failed navigator.geolocation.getCurrentPosition.toString().includes('[native code]') - -``` - if ( - !navigator.geolocation.getCurrentPosition - .toString() - .includes('[native code]') - ) { - return true; - } - return false; -``` - ## Screenshots -![Screenshot of extension popup](https://raw.githubusercontent.com/z0ccc/Vytal/master/promo/screenshot-1.png) +![Screenshot of location data tab](https://raw.githubusercontent.com/z0ccc/Vytal/master/promo/screenshot-1.png) -![Screenshot of extension popup and vytal.io](https://raw.githubusercontent.com/z0ccc/Vytal/master/promo/screenshot-2.png) - -![Close up of extension popup](https://raw.githubusercontent.com/z0ccc/Vytal/master/promo/screenshot-3.png) +![Screenshot of user agent tab](https://raw.githubusercontent.com/z0ccc/Vytal/master/promo/screenshot-2.png) +![Screenshot of info tab](https://raw.githubusercontent.com/z0ccc/Vytal/master/promo/screenshot-3.png) ## Dev @@ -159,7 +58,7 @@ Clone this repo and run these commands to start the development server. ``` yarn -yarn run start +yarn start ``` Load the extension on Chrome: diff --git a/promo/chrome.png b/promo/chrome.png new file mode 100644 index 0000000000000000000000000000000000000000..db6badcb4a97795f81a766061bc61ddf83f55f6e GIT binary patch literal 9469 zcmZ8{WmME%v^NS8(%n6D!$=AvodY5cB_Q41jnXMyQqoGtgEUCT5W+}zw=i^b|Gw{s zyVm_MGiyzpIp^%N_b>K|daJI8`;zJ<3JMCYvXb08;B^ytyum~Vo?p%{cmOZY+}
CG@Tql=FoX;;2xb(@X@caHQ{?(!cv)>-p3P%+ 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 literal 0 HcmV?d00001 diff --git a/promo/edge.png b/promo/edge.png new file mode 100644 index 0000000000000000000000000000000000000000..458dc0713d05301138f9f6402831c1f0dd139cdc GIT binary patch literal 4398 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