Unlock Brainly Answers

This script allows you to unlock the main answer to Brainly questions in a simple and direct way, without simulating a Pro account. It uses a technique based on simulated anonymous access, bypassing view restrictions and displaying the full answer — no login or incognito tab required.

目前為 2025-05-02 提交的版本,檢視 最新版本

  1. // ==UserScript==
  2. // @name Unlock Brainly Answers
  3. // @name:pt-BR Desbloquear Respostas Brainly
  4. // @name:en-US Unlock Brainly Answers
  5. // @name:es-ES Desbloquear Respuestas de Brainly
  6. // @name:fr-FR Débloquer les Réponses de Brainly
  7. // @name:zh-CN 解锁 Brainly 答案
  8. // @name:ar-SA فتح إجابات Brainly
  9. // @namespace DesbloquearRespostasBrainly
  10. // @version 1.0
  11. // @description This script allows you to unlock the main answer to Brainly questions in a simple and direct way, without simulating a Pro account. It uses a technique based on simulated anonymous access, bypassing view restrictions and displaying the full answer — no login or incognito tab required.
  12. // @description:pt-Br Este script permite desbloquear a resposta principal das perguntas no Brainly de forma simples e direta, sem simular uma conta Pro. Ele utiliza uma técnica baseada em acesso anônimo simulado, contornando as restrições de visualização e exibindo a resposta completa — sem precisar fazer login ou abrir guia anônima.
  13. // @description:zh-Cn 该脚本可以简单直接地解锁 Brainly 上问题的主要答案,无需模拟 Pro 账户。它使用一种模拟匿名访问的技术,绕过查看限制并显示完整答案 —— 无需登录或打开无痕窗口。
  14. // @description:es-ES Este script permite desbloquear la respuesta principal de las preguntas en Brainly de forma simple y directa, sin simular una cuenta Pro. Utiliza una técnica basada en el acceso anónimo simulado, eludiendo las restricciones de visualización y mostrando la respuesta completa — sin necesidad de iniciar sesión ni abrir una pestaña de incógnito.
  15. // @homepage https://ko-fi.com/l4pisd4silv4#
  16. // @license MIT
  17. // @author L4pisD4Silv4
  18. // @match *://*.brainly.com.br/*
  19. // @match *://*.brainly.com/*
  20. // @match *://brainly.com/*
  21. // @match *://brainly.co.id/*
  22. // @match *://brainly.in/*
  23. // @match *://brainly.ph/*
  24. // @match *://brainly.ro/*
  25. // @match *://brainly.lat/*
  26. // @match *://brainly.pl/*
  27. // @icon https://img.icons8.com/?size=512&id=DBQ34fANpy5j&format=png
  28. // @grant GM_xmlhttpRequest
  29. // @grant GM_registerMenuCommand
  30. // @grant GM_unregisterMenuCommand
  31. // @grant GM_addStyle
  32. // @grant GM_getValue
  33. // @grant GM_setValue
  34. // @connect *
  35. // @run-at document-start
  36. // ==/UserScript==
  37.  
  38. (function() {
  39. 'use strict';
  40.  
  41. const languageData = {
  42. 'pt-BR': {
  43. name: 'Português Brasil',
  44. image: 'https://i.imgur.com/q9l7QVj.png',
  45. menu: {
  46. language: 'Idioma',
  47. support: 'Apoiar',
  48. reload: '🔁 Recarregar Página'
  49. }
  50. },
  51. 'en-US': {
  52. name: 'English',
  53. image: 'https://i.imgur.com/luel00S.png',
  54. menu: {
  55. language: 'Language',
  56. support: 'Support',
  57. reload: '🔁 Reload Page'
  58. }
  59. },
  60. 'es-ES': {
  61. name: 'Español',
  62. image: 'https://i.imgur.com/Tcm93e3.png',
  63. menu: {
  64. language: 'Idioma',
  65. support: 'Apoyar',
  66. reload: '🔁 Recargar página'
  67. }
  68. },
  69. 'fr-FR': {
  70. name: 'Français',
  71. image: 'https://i.imgur.com/iTSrDGI.png',
  72. menu: {
  73. language: 'Langue',
  74. support: 'Soutenir',
  75. reload: '🔁 Recharger la page'
  76. }
  77. },
  78. 'zh-CN': {
  79. name: '中文',
  80. image: 'https://i.imgur.com/eac2uZV.png',
  81. menu: {
  82. language: '语言',
  83. support: '支持',
  84. reload: '🔁 重新加载页面'
  85. }
  86. },
  87. 'ar-SA': {
  88. name: 'العربية',
  89. image: 'https://i.imgur.com/pHyXvRh.png',
  90. menu: {
  91. language: 'اللغة',
  92. support: 'الدعم',
  93. reload: '🔁 إعادة تحميل الصفحة'
  94. }
  95. }
  96. };
  97.  
  98. let currentLang = GM_getValue('lang') || Object.keys(languageData)[0];
  99. let menuIDs = { language: null, support: null, reload: null };
  100.  
  101. const initializeUnlocker = () => {
  102. const limparTudo = () => {
  103. document.cookie.split(";").forEach(cookie => {
  104. const [key] = cookie.split('=');
  105. if (key.trim().match(/^(session|auth)/i)) {
  106. document.cookie = `${key}=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/`;
  107. }
  108. });
  109.  
  110. try {
  111. localStorage.clear();
  112. indexedDB.deleteDatabase('Brainly');
  113. } catch(e) {}
  114.  
  115. window.__BRAZIL_SESSION__ = undefined;
  116. window.__USER_DATA__ = undefined;
  117. };
  118.  
  119. const originalOpen = XMLHttpRequest.prototype.open;
  120. XMLHttpRequest.prototype.open = function(method, url) {
  121. if (url.includes('/api/auth/check')) {
  122. this.addEventListener('load', () => {
  123. if (this.readyState === 4) {
  124. Object.defineProperty(this, 'responseText', {
  125. value: JSON.stringify({ isAuthenticated: false })
  126. });
  127. }
  128. });
  129. }
  130. originalOpen.apply(this, arguments);
  131. };
  132.  
  133. const observer = new MutationObserver(mutations => {
  134. mutations.forEach(mutation => {
  135. mutation.addedNodes.forEach(node => {
  136. if (node.nodeType === 1) {
  137. if (node.classList?.contains('sg-modal') || node.classList?.contains('paywall')) {
  138. node.remove();
  139. }
  140.  
  141. if (node.classList?.contains('brn-answer__content--locked')) {
  142. node.style.cssText = 'filter:none!important; opacity:1!important;';
  143. }
  144. }
  145. });
  146. });
  147. });
  148.  
  149. const css = `
  150. .brn-answer__content--locked,
  151. .js-paywall,
  152. .blurred-container,
  153. .sg-overlay {
  154. filter: none !important;
  155. opacity: 1 !important;
  156. pointer-events: auto !important;
  157. }
  158. [data-test="paid-content"] { display: block !important; }
  159. `;
  160. document.head.insertAdjacentHTML('beforeend', `<style>${css}</style>`);
  161.  
  162. limparTudo();
  163. observer.observe(document.body, { childList: true, subtree: true });
  164. setInterval(limparTudo, 3000);
  165. };
  166.  
  167. const initializeLanguageSystem = () => {
  168. const updateLanguage = (lang) => {
  169. currentLang = lang;
  170. GM_setValue('lang', lang);
  171. GM_unregisterMenuCommand(menuIDs.language);
  172. GM_unregisterMenuCommand(menuIDs.support);
  173. GM_unregisterMenuCommand(menuIDs.reload);
  174. registerMenuCommands();
  175. };
  176.  
  177. const registerMenuCommands = () => {
  178. menuIDs.language = GM_registerMenuCommand(
  179. languageData[currentLang].menu.language,
  180. showLanguageModal
  181. );
  182.  
  183. menuIDs.support = GM_registerMenuCommand(
  184. languageData[currentLang].menu.support,
  185. showSupportModal
  186. );
  187.  
  188. menuIDs.reload = GM_registerMenuCommand(
  189. languageData[currentLang].menu.reload,
  190. () => window.location.reload(true)
  191. );
  192. };
  193.  
  194. const showLanguageModal = () => {
  195. const modal = document.createElement('div');
  196. modal.className = 'lang-modal';
  197.  
  198. Object.keys(languageData).forEach(lang => {
  199. const btn = document.createElement('button');
  200. btn.className = 'lang-option';
  201. btn.textContent = languageData[lang].name;
  202. btn.onclick = () => {
  203. updateLanguage(lang);
  204. modal.remove();
  205. };
  206. modal.appendChild(btn);
  207. });
  208.  
  209. document.body.appendChild(modal);
  210. document.addEventListener('click', (e) => {
  211. if (!modal.contains(e.target)) modal.remove();
  212. });
  213. };
  214.  
  215. const showSupportModal = () => {
  216. const container = document.createElement('div');
  217. container.style.cssText = `
  218. position: fixed !important;
  219. top: 50% !important;
  220. left: 50% !important;
  221. transform: translate(-50%, -50%) !important;
  222. width: 1600px !important;
  223. height: 1000px !important;
  224. z-index: 99999 !important;
  225. `;
  226.  
  227. const overlay = document.createElement('div');
  228. overlay.style.cssText = `
  229. position: fixed !important;
  230. top: 0 !important;
  231. left: 0 !important;
  232. width: 100vw !important;
  233. height: 100vh !important;
  234. background: rgba(0,0,0,0.6) !important;
  235. backdrop-filter: blur(5px) !important;
  236. z-index: 99998 !important;
  237. `;
  238.  
  239. const bgImage = document.createElement('img');
  240. bgImage.src = languageData[currentLang].image;
  241. bgImage.style.cssText = `
  242. position: absolute !important;
  243. width: 100% !important;
  244. height: 100% !important;
  245. object-fit: cover !important;
  246. `;
  247.  
  248. const kofiBtn = document.createElement('img');
  249. kofiBtn.src = 'https://i.imgur.com/T32os95.png';
  250. kofiBtn.className = 'hover-zoom';
  251. kofiBtn.style.cssText = `
  252. position: absolute !important;
  253. left: 956px !important;
  254. top: 356px !important;
  255. width: 426px !important;
  256. height: 116px !important;
  257. cursor: pointer !important;
  258. `;
  259. kofiBtn.onclick = () => window.open('https://ko-fi.com/l4pisd4silv4#', '_blank');
  260.  
  261. const exitBtn = document.createElement('img');
  262. exitBtn.src = 'https://i.imgur.com/HbC1dXb.png';
  263. exitBtn.className = 'hover-zoom';
  264. exitBtn.style.cssText = `
  265. position: absolute !important;
  266. left: 1445px !important;
  267. top: 855px !important;
  268. width: 52px !important;
  269. height: 52px !important;
  270. cursor: pointer !important;
  271. `;
  272. exitBtn.onclick = () => {
  273. container.remove();
  274. overlay.remove();
  275. };
  276.  
  277. container.appendChild(bgImage);
  278. container.appendChild(kofiBtn);
  279. container.appendChild(exitBtn);
  280. document.body.appendChild(overlay);
  281. document.body.appendChild(container);
  282.  
  283. overlay.onclick = () => {
  284. container.remove();
  285. overlay.remove();
  286. };
  287. };
  288.  
  289. GM_addStyle(`
  290. .lang-modal {
  291. position: fixed !important;
  292. top: 50% !important;
  293. left: 50% !important;
  294. transform: translate(-50%, -50%) !important;
  295. width: 300px !important;
  296. padding: 10px !important;
  297. background: #1e1e1e !important;
  298. border: 1px solid #444 !important;
  299. border-radius: 8px !important;
  300. z-index: 99999 !important;
  301. color: #fff !important;
  302. }
  303.  
  304. .lang-option {
  305. margin: 6px 0 !important;
  306. padding: 12px !important;
  307. width: 100% !important;
  308. border: none !important;
  309. border-radius: 6px !important;
  310. background: #333 !important;
  311. color: #fff !important;
  312. cursor: pointer !important;
  313. transition: all 0.3s ease !important;
  314. }
  315.  
  316. .lang-option:hover {
  317. background: #444 !important;
  318. transform: scale(1.02) !important;
  319. }
  320.  
  321. .hover-zoom {
  322. transition: transform 0.2s ease !important;
  323. cursor: pointer !important;
  324. }
  325.  
  326. .hover-zoom:hover {
  327. transform: scale(1.15) !important;
  328. }
  329. `);
  330.  
  331. registerMenuCommands();
  332. };
  333.  
  334. if (document.readyState === 'loading') {
  335. document.addEventListener('DOMContentLoaded', () => {
  336. initializeUnlocker();
  337. initializeLanguageSystem();
  338. });
  339. } else {
  340. initializeUnlocker();
  341. initializeLanguageSystem();
  342. }
  343.  
  344. setInterval(() => {
  345. if (document.querySelector('.brn-answer__content--locked')) {
  346. window.location.reload(true);
  347. }
  348. }, 5000);
  349. })();