解锁 Brainly 答案

该脚本可以简单直接地解锁 Brainly 上问题的主要答案,无需模拟 Pro 账户。它使用一种模拟匿名访问的技术,绕过查看限制并显示完整答案 —— 无需登录或打开无痕窗口。

  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.2
  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 baseada en el acceso anónimo simulado, eludiendo las restrições de visualização y mostrando la respuesta completa — sin necesidad de iniciar sesión ni abrir una pestaña de incógnito.
  15. // @description:fr-FR Ce script permet de débloquer la réponse principale aux questions sur Brainly de manière simple et directe, sans simuler de compte Pro. Il utilise une technique basée sur un accès anonyme simulé, contournant les restrictions d'affichage et affichant la réponse complète — sans connexion ni onglet incognito requis.
  16. // @description:ar-SA يتيح لك هذا البرنامج النصي فتح الإجابة الرئيسية على أسئلة Brainly بطريقة بسيطة ومباشرة، دون محاكاة حساب Pro. يستخدم تقنية تعتمد على الوصول المجهول المزيف، متجاوزًا قيود العرض وعرض الإجابة الكاملة - دون الحاجة إلى تسجيل الدخول أو فتح علامة تبويب التصفح المتخفي.
  17. // @homepage https://ko-fi.com/l4pisd4silv4#
  18. // @license MIT
  19. // @author L4pisD4Silv4
  20. // @match *://*.brainly.com.br/*
  21. // @match *://*.brainly.com/*
  22. // @match *://brainly.com/*
  23. // @match *://brainly.co.id/*
  24. // @match *://brainly.in/*
  25. // @match *://brainly.ph/*
  26. // @match *://brainly.ro/*
  27. // @match *://brainly.lat/*
  28. // @match *://brainly.pl/*
  29. // @icon https://img.icons8.com/?size=512&id=DBQ34fANpy5j&format=png
  30. // @grant GM_xmlhttpRequest
  31. // @grant GM_registerMenuCommand
  32. // @grant GM_unregisterMenuCommand
  33. // @grant GM_addStyle
  34. // @grant GM_getValue
  35. // @grant GM_setValue
  36. // @connect *
  37. // @run-at document-start
  38. // ==/UserScript==
  39.  
  40. (function() {
  41. 'use strict';
  42. const languageData = {
  43. 'pt-BR': {
  44. name: 'Português Brasil',
  45. menu: {
  46. language: '🌐 Idioma',
  47. support: '🙌 Apoie-me',
  48. reload: '🔁 Recarregar Página'
  49. }
  50. },
  51. 'en-US': {
  52. name: 'English',
  53. menu: {
  54. language: '🌐 Language',
  55. support: '🙌 Support Me',
  56. reload: '🔁 Reload Page'
  57. }
  58. },
  59. 'es-ES': {
  60. name: 'Español',
  61. menu: {
  62. language: '🌐 Idioma',
  63. support: '🙌 Apóyame',
  64. reload: '🔁 Recargar página'
  65. }
  66. },
  67. 'fr-FR': {
  68. name: 'Français',
  69. menu: {
  70. language: '🌐 Langue',
  71. support: '🙌 Soutiens-moi',
  72. reload: '🔁 Recharger la page'
  73. }
  74. },
  75. 'zh-CN': {
  76. name: '中文',
  77. menu: {
  78. language: '🌐 语言',
  79. support: '🙌 支持我',
  80. reload: '🔁 重新加载页面'
  81. }
  82. },
  83. 'ar-SA': {
  84. name: 'العربية',
  85. menu: {
  86. language: '🌐 اللغة',
  87. support: ' 🙌 ادعمني',
  88. reload: '🔁 إعادة تحميل الصفحة'
  89. }
  90. }
  91. };
  92. const supportImage = 'https://i.imgur.com/qn1xxfD.png';
  93. let currentLang = GM_getValue('lang') || Object.keys(languageData)[0];
  94. let menuIDs = { language: null, support: null, reload: null };
  95. const initializeUnlocker = () => {
  96. const limparTudo = () => {
  97. document.cookie.split(";").forEach(cookie => {
  98. const [key] = cookie.split('=');
  99. if (key.trim().match(/^(session|auth)/i)) {
  100. document.cookie = `${key}=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/`;
  101. }
  102. });
  103. try {
  104. localStorage.clear();
  105. indexedDB.deleteDatabase('Brainly');
  106. } catch(e) {}
  107. window.__BRAZIL_SESSION__ = undefined;
  108. window.__USER_DATA__ = undefined;
  109. };
  110. const originalOpen = XMLHttpRequest.prototype.open;
  111. XMLHttpRequest.prototype.open = function(method, url) {
  112. if (url.includes('/api/auth/check')) {
  113. this.addEventListener('load', () => {
  114. if (this.readyState === 4) {
  115. Object.defineProperty(this, 'responseText', {
  116. value: JSON.stringify({ isAuthenticated: false })
  117. });
  118. }
  119. });
  120. }
  121. originalOpen.apply(this, arguments);
  122. };
  123. const observer = new MutationObserver(mutations => {
  124. mutations.forEach(mutation => {
  125. mutation.addedNodes.forEach(node => {
  126. if (node.nodeType === 1) {
  127. if (node.classList?.contains('sg-modal') || node.classList?.contains('paywall')) {
  128. node.remove();
  129. }
  130. if (node.classList?.contains('brn-answer__content--locked')) {
  131. node.style.cssText = 'filter:none!important; opacity:1!important;';
  132. }
  133. }
  134. });
  135. });
  136. });
  137. const css = `
  138. .brn-answer__content--locked,
  139. .js-paywall,
  140. .blurred-container,
  141. .sg-overlay {
  142. filter: none !important;
  143. opacity: 1 !important;
  144. pointer-events: auto !important;
  145. }
  146. [data-test="paid-content"] { display: block !important; }
  147. `;
  148. document.head.insertAdjacentHTML('beforeend', `<style>${css}</style>`);
  149. limparTudo();
  150. observer.observe(document.body, { childList: true, subtree: true });
  151. setInterval(limparTudo, 3000);
  152. };
  153. setInterval(() => {
  154. document.querySelectorAll('[data-testid="registration_toplayer_close_button"], .sg-dialog__close-button[aria-label="Close this dialog window"]').forEach(btn => {
  155. if (btn && btn.click) btn.click();
  156. });
  157. }, 500);
  158. const initializeLanguageSystem = () => {
  159. const updateLanguage = (lang) => {
  160. currentLang = lang;
  161. GM_setValue('lang', lang);
  162. GM_unregisterMenuCommand(menuIDs.language);
  163. GM_unregisterMenuCommand(menuIDs.support);
  164. GM_unregisterMenuCommand(menuIDs.reload);
  165. registerMenuCommands();
  166. };
  167. const registerMenuCommands = () => {
  168. menuIDs.language = GM_registerMenuCommand(
  169. languageData[currentLang].menu.language,
  170. showLanguageModal
  171. );
  172. menuIDs.support = GM_registerMenuCommand(
  173. languageData[currentLang].menu.support,
  174. showSupportModal
  175. );
  176. menuIDs.reload = GM_registerMenuCommand(
  177. languageData[currentLang].menu.reload,
  178. () => window.location.reload(true)
  179. );
  180. };
  181. const showLanguageModal = () => {
  182. const modal = document.createElement('div');
  183. modal.className = 'lang-modal';
  184. const validLanguages = ['pt-BR', 'en-US', 'es-ES', 'fr-FR', 'zh-CN', 'ar-SA'];
  185. validLanguages.forEach(lang => {
  186. const btn = document.createElement('button');
  187. btn.className = 'lang-option';
  188. btn.textContent = languageData[lang].name;
  189. btn.onclick = () => {
  190. updateLanguage(lang);
  191. modal.remove();
  192. };
  193. modal.appendChild(btn);
  194. });
  195. document.body.appendChild(modal);
  196. document.addEventListener('click', (e) => {
  197. if (!modal.contains(e.target)) modal.remove();
  198. });
  199. };
  200. const showSupportModal = () => {
  201. const overlay = document.createElement('div');
  202. const banner = document.createElement('div');
  203. const signature = document.createElement('div');
  204. overlay.style.cssText = `
  205. position: fixed;
  206. top: 0;
  207. left: 0;
  208. width: 100vw;
  209. height: 100vh;
  210. backdrop-filter: blur(5px) brightness(0.8);
  211. -webkit-backdrop-filter: blur(5px) brightness(0.8);
  212. background-color: rgba(0, 0, 0, 0.4);
  213. z-index: 9998;
  214. transition: all 0.5s ease;
  215. opacity: 0;
  216. `;
  217.  
  218. banner.style.cssText = `
  219. position: fixed;
  220. top: 50%;
  221. left: 50%;
  222. transform: translate(-50%, -50%) scale(0.75);
  223. width: 1948px;
  224. height: 940px;
  225. background-image: url(${supportImage});
  226. background-size: cover;
  227. background-position: center;
  228. z-index: 9999;
  229. opacity: 0;
  230. transition: all 0.8s cubic-bezier(0.4, 0, 0.2, 1);
  231. image-rendering: -webkit-optimize-contrast;
  232. image-rendering: crisp-edges;
  233. backface-visibility: hidden;
  234. -webkit-backface-visibility: hidden;
  235. -webkit-transform-style: preserve-3d;
  236. transform-style: preserve-3d;
  237. will-change: transform, opacity;
  238. `;
  239. signature.textContent = "by: L4pisD4Silv4";
  240. signature.style.cssText = `
  241. position: fixed !important;
  242. bottom: 70px !important;
  243. left: 50% !important;
  244. transform: translateX(-50%) !important;
  245. color: rgba(255, 255, 255, 0.7) !important;
  246. font-family: 'Consolas', 'Monaco', 'Courier New', monospace !important;
  247. font-size: 12px !important;
  248. font-weight: 300 !important;
  249. letter-spacing: 2px !important;
  250. z-index: 10000 !important;
  251. opacity: 0;
  252. transition: opacity 0.8s ease !important;
  253. text-shadow: 0 1px 4px rgba(0, 157, 255, 0.5) !important;
  254. text-transform: lowercase !important;
  255. `;
  256. document.body.appendChild(overlay);
  257. document.body.appendChild(banner);
  258. document.body.appendChild(signature);
  259. setTimeout(() => {
  260. overlay.style.opacity = '1';
  261. banner.style.opacity = '1';
  262. signature.style.opacity = '1';
  263. }, 50);
  264. function fecharBanner() {
  265. banner.style.opacity = '0';
  266. banner.style.transform = 'translate(-50%, -50%) scale(0.6)';
  267. overlay.style.opacity = '0';
  268. signature.style.opacity = '0';
  269. setTimeout(() => {
  270. banner.remove();
  271. overlay.remove();
  272. signature.remove();
  273. }, 800);
  274. }
  275. function criarBotao(src, x, y, w, h, link) {
  276. const btn = document.createElement('div');
  277. btn.style.cssText = `
  278. position: absolute;
  279. left: ${x}px;
  280. top: ${y}px;
  281. width: ${w}px;
  282. height: ${h}px;
  283. background-image: url(${src});
  284. background-size: contain;
  285. background-position: center;
  286. background-repeat: no-repeat;
  287. cursor: pointer;
  288. transition: transform 0.3s ease;
  289. backface-visibility: hidden;
  290. -webkit-backface-visibility: hidden;
  291. -webkit-transform-style: preserve-3d;
  292. transform-style: preserve-3d;
  293. will-change: transform;
  294. `;
  295. btn.addEventListener('mouseenter', () => {
  296. btn.style.transform = 'scale(1.1)';
  297. });
  298.  
  299. btn.addEventListener('mouseleave', () => {
  300. btn.style.transform = 'scale(1)';
  301. });
  302.  
  303. btn.addEventListener('click', () => {
  304. if (link) window.open(link, '_blank');
  305. else fecharBanner();
  306. });
  307. return btn;
  308. }
  309. banner.appendChild(criarBotao(
  310. 'https://i.imgur.com/6C466vU.png', 985, 649, 132, 150,
  311. 'https://linktr.ee/L4pisD4Silv4'
  312. ));
  313. banner.appendChild(criarBotao(
  314. 'https://i.imgur.com/T32os95.png', 1308, 651, 426, 116,
  315. 'https://ko-fi.com/l4pisd4silv4'
  316. ));
  317. banner.appendChild(criarBotao(
  318. 'https://i.imgur.com/HbC1dXb.png', 1773, 788, 52, 52
  319. ));
  320. overlay.addEventListener('click', fecharBanner);
  321. };
  322. GM_addStyle(`
  323. .lang-modal {
  324. position: fixed !important;
  325. top: 50% !important;
  326. left: 50% !important;
  327. transform: translate(-50%, -50%) !important;
  328. width: 300px !important;
  329. padding: 10px !important;
  330. background: #1e1e1e !important;
  331. border: 1px solid #444 !important;
  332. border-radius: 8px !important;
  333. z-index: 99999 !important;
  334. color: #fff !important;
  335. }
  336. .lang-option {
  337. margin: 6px 0 !important;
  338. padding: 12px !important;
  339. width: 100% !important;
  340. border: none !important;
  341. border-radius: 6px !important;
  342. background: #333 !important;
  343. color: #fff !important;
  344. cursor: pointer !important;
  345. transition: all 0.3s ease !important;
  346. }
  347. .lang-option:hover {
  348. background: #444 !important;
  349. transform: scale(1.02) !important;
  350. }
  351. .hover-zoom {
  352. transition: transform 0.2s ease !important;
  353. cursor: pointer !important;
  354. }
  355. .hover-zoom:hover {
  356. transform: scale(1.15) !important;
  357. }
  358. `);
  359. registerMenuCommands();
  360. };
  361. if (document.readyState === 'loading') {
  362. document.addEventListener('DOMContentLoaded', () => {
  363. initializeUnlocker();
  364. initializeLanguageSystem();
  365. });
  366. } else {
  367. initializeUnlocker();
  368. initializeLanguageSystem();
  369. }
  370. setInterval(() => {
  371. if (document.querySelector('.brn-answer__content--locked')) {
  372. window.location.reload(true);
  373. }
  374. }, 5000);
  375. })();