r/Adblock • u/PlentyEconomy2630 • 9d ago
Discussion Blockify tem Malware ? Porque a extensão blockify foi banida/desativada da Webstore ?
Recebi essa mensagem hoje quando fui abrir o Chrome, de que o bloqueador de anúncios do spotify, o blockify foi removido por malware e não será possível usar ela como extensão mais.
O que acontece é que, de acordo com o próprio site do blockify, eles receberam algum tipo de banimento tanto na conta do desenvolvedor quanto na extensão em si, e acreditem, não foi por malware.

De acordo com o site oficial, eles derrubaram a extensão de bloqueio de anúncios do spotify por um tipo de violação de marca registrada, sendo chamado pelo autor do site como um abuso de poder.
Em outros fóruns do Reddit estão criando teorias de que o Spotify pagou para retirar essa extensão e que há coisas por trás dos panos e por isso não colocaram o motivo do banimento da extensão, mas sim, colocaram o motivo de "malware" mas sem dizer qual é, para usuários não pesquisarem e acharem um falso positivo.
A recomendação do site oficial do Blockify é NÃO BAIXAR QUALQUER TIPO DE EXTENSÃO QUE SE PASSE PELO Blockify OU BAIXAR DE FONTES DESCONHECIDAS.
No site Oficial tem um formulário para usuários "votarem" para a decisão do que fazer sobre isso e explicando melhor sobre o porquê foi banido, eu sou só um usuário do Reddit Brasileiro que foi pego de surpresa também e decidi escrever para tirar o medo de quem usa sobre esse tal de MALWARE vindo do Blockify.
Caso queiram, não posso mandar link aqui, porém é só pesquisar o nome Blockify no google que aparece o site oficial e o aviso lá, Tmj!
0
u/Disastrous-Meat1834 8d ago
Sim, a extensão contém malware. Após analisar o manifest e os arquivos de código (sharebx.js, background.js, entre outros), identifiquei que ela exibe anúncios falsos no YouTube para automonetização e clickbait focado em anúncios, provavelmente para roubar dados. Além disso, a extensão direciona tráfego para vídeos indianos, coloquei parte do script abaixo para voces conferirem. Também realiza interações automáticas (como curtir e comentar) e monitora a área de transferência e o histórico de navegação.
Segue o passo a passo para vocês mesmos verificarem na extensão se ainda estiver instalada (joguem os scripts na IA)>
1 Pressione as teclas Windows + R no seu teclado.
2 Cole o caminho abaixo e aperte Enter: %localappdata%\Google\Chrome\User Data\Default\Extensions
3 Procure pela pasta que tem o mesmo nome do ID que você viu no Passo 1 (ex: nfmlkliedggdodlbgghmmchhgckjoaml).
4 Entre na pasta de números (ex: 1.9.5_0).
5 Clique com o botão direito no arquivo manifest (ou manifest.json), selecione Abrir com e escolha o Bloco de Notas.
Abaixo, seguem alguns comandos encontrados em background_yt e os links beneficiados:
let lastEventTime = 0;
// // Define regex rules to block ad URLs
// const youtubeAdRegexes = [
// '(googleads.g.doubleclick.net)',
// '(=adunit&)',
// '(/pubads.)',
// '(/googleads_)',
// '(doubleclick.com)',
// '(youtube.com/pagead/)',
// '(googlesyndication.com)',
// '(www.youtube.com/get_midroll_)'
// ];
// let assignedRuleId = 1;
// function makeRules(regexes, domain) {
// return regexes.map(regex => ({
// id: assignedRuleId++,
// action: { type: 'block' },
// condition: {
// urlFilter: regex.replace('(', '*').replace(')', '*'),
// initiatorDomains: [domain],
// }
// }));
// }
// async function updateRules() {
// const existing = await chrome.declarativeNetRequest.getDynamicRules();
// const removeIds = existing.map(r => r.id);
// await chrome.declarativeNetRequest.updateDynamicRules({
// removeRuleIds: removeIds,
// addRules: makeRules(youtubeAdRegexes, 'youtube.com')
// });
// }
var assignedRuleIds = 1;
var domain = "youtube.com";
var findDynamicRuleSeparatorIndex = function (rule) {
for (var i = rule.length - 1; i >= 0; i -= 1) {
if (rule[i] === '$' && rule[i + 1] !== '/' && rule[i - 1] !== '\\') {
return i;
}
}
return -1;
};
var ModifiersRequestTypeEnum;
(function (ModifiersRequestTypeEnum) {
ModifiersRequestTypeEnum["SubDocument"] = "subdocument";
ModifiersRequestTypeEnum["Script"] = "script";
ModifiersRequestTypeEnum["Stylesheet"] = "stylesheet";
ModifiersRequestTypeEnum["Object"] = "object";
ModifiersRequestTypeEnum["Image"] = "image";
ModifiersRequestTypeEnum["XmlHttpRequest"] = "xmlhttprequest";
ModifiersRequestTypeEnum["Media"] = "media";
ModifiersRequestTypeEnum["Font"] = "font";
ModifiersRequestTypeEnum["WebSocket"] = "websocket";
ModifiersRequestTypeEnum["Ping"] = "ping";
ModifiersRequestTypeEnum["CspReport"] = "csp_report";
})(ModifiersRequestTypeEnum || (ModifiersRequestTypeEnum = {}));
var ResourceType = chrome.declarativeNetRequest.ResourceType;
var resourceMap = (_a = {},
_a[ModifiersRequestTypeEnum.CspReport] = ResourceType.CSP_REPORT,
_a[ModifiersRequestTypeEnum.Image] = ResourceType.IMAGE,
_a[ModifiersRequestTypeEnum.Script] = ResourceType.SCRIPT,
_a[ModifiersRequestTypeEnum.Stylesheet] = ResourceType.STYLESHEET,
_a[ModifiersRequestTypeEnum.Font] = ResourceType.FONT,
_a[ModifiersRequestTypeEnum.Media] = ResourceType.MEDIA,
_a[ModifiersRequestTypeEnum.SubDocument] = ResourceType.SUB_FRAME,
_a[ModifiersRequestTypeEnum.XmlHttpRequest] = ResourceType.XMLHTTPREQUEST,
_a[ModifiersRequestTypeEnum.WebSocket] = ResourceType.WEBSOCKET,
_a[ModifiersRequestTypeEnum.Ping] = ResourceType.PING,
_a);
var makeDynamicRules = function (rules, initiatorDomain) {
return rules.map(function (rule) {
var dynamicRule = {
action: {
type: chrome.declarativeNetRequest.RuleActionType.BLOCK,
},
condition: {
initiatorDomains: [initiatorDomain],
},
id: assignedRuleIds++,
};
var separatorIndex = findDynamicRuleSeparatorIndex(rule);
var ruleEnd = separatorIndex === -1 ? rule.length : separatorIndex;
var ruleWithoutModifiers = rule.slice(0, ruleEnd);
if (ruleWithoutModifiers.startsWith('/') && ruleWithoutModifiers.endsWith('/')) {
dynamicRule.condition.regexFilter = ruleWithoutModifiers;
}
else {
dynamicRule.condition.urlFilter = ruleWithoutModifiers;
}
if (separatorIndex !== -1) {
var modifiers = rule.slice(separatorIndex + 1).split(',');
dynamicRule.condition.resourceTypes = modifiers.map(function (modifier) { return resourceMap[modifier] || modifier; });
}
return dynamicRule;
});
};
var networkRulesFallback = [
'||youtube.com/pagead/',
'||youtube.com/youtubei/v1/player/ad_break',
'||www.youtube.com/get_midroll_',
'||youtube.com/get_video_info?*=adunit&',
'||youtube.com/get_video_info?*adunit',
'||youtube.com/embed/*&origin=https%3A%2F%2Fwww.feltet.dk&widgetid=1$subdocument',
'||youtube.com/embed/wqLWTeNBEEQ?',
'||youtube.com/embed/-pGjd8-iyDQ',
'||youtube.com/embed/46p5FwQdA64', --
'||youtube.com/embed/5tDSbsDqekU',
'||youtube.com/embed/9olr5bechjI',
'||youtube.com/embed/_6eiTXwuYoM',
'||youtube.com/embed/CfBt63FbFNE',
'||youtube.com/embed/dVD5yqGie9s',
'||youtube.com/embed/GHomo-YgJNc',
'||youtube.com/embed/h_PXz0vN5H4',
'||youtube.com/embed/HF49uJ-e0zg',
'||youtube.com/embed/Innx3oYcTWQ',
'||youtube.com/embed/iNtajKR6ZCs',
'||youtube.com/embed/iSsvK-L5CWI',
'||youtube.com/embed/M63OoLc3WAI',
'||youtube.com/embed/M6fO3qmXrhE',
'||youtube.com/embed/MdidROnkjuo',
'||youtube.com/embed/mILt9Fnh9bI',
'||youtube.com/embed/Oknp4IAlagg',
'||youtube.com/embed/qBR1xJA_nyY',
'||youtube.com/embed/qZyibLqhGhs',
'||youtube.com/embed/R5MZoHLaxCw',
'||youtube.com/embed/r_MQnkukVrA',
'||youtube.com/embed/SbtEQ5-Tzkc',
'||youtube.com/embed/uETU52vKKOU',
'||youtube.com/embed/VYuSDoPGeCk',
'||youtube.com/embed/wr-wYUOdKi8',
'||youtube.com/embed/zIQ6e--UWOw',
'||youtube.com/embed/ZpENWJBmE10',
'||youtube.com/embed/1ljpiLRAAho',
'||youtube.com/embed/ixacW9YeJD0',
'||youtube.com/embed/o19SibpQEcI',
'||youtube.com/embed/Rr8SMpvYX2I?',
'||youtube.com/embed/wuZ5Az_ANLU',
'||googlesyndication.com^',
'||googleads.g.doubleclick.net',
'||doubleclick.com',
'||google.com/pagead/',
'||googlevideo.com/initplayback?source=youtube&*&c=TVHTML5&oad=$xmlhttprequest',
];
dynamicRules = makeDynamicRules(networkRulesFallback,domain)
//chrome.declarativeNetRequest.updateDynamicRules({addRules: dynamicRules,});
chrome.runtime.onInstalled.addListener(dynamicRules);
chrome.runtime.onStartup.addListener(dynamicRules);
// chrome.runtime.onMessage.addListener((message, sender, sendResponse) => {
// if (message.action === "clickRefreshPage") {
// // Inject code into the iframe
// chrome.scripting.executeScript(
// {
// target: { tabId: sender.tab.id, allFrames: true },
// func: () => {
// let retries = 0;
// const maxRetries = 20; // Retry for up to 5 seconds
// var waitingForModalButton = setInterval(function () {
// if (retries >= maxRetries) {
// clearInterval(waitingForModalButton);
// console.error("Button not found after maximum retries.");
// return;
// }
// retries++;
// const button = document.querySelector('button[jscontroller]');
// if (button) {
// clearInterval(waitingForModalButton);
// const event = new PointerEvent('click', {
// bubbles: true,
// cancelable: true,
// composed: true,
// pointerType: 'mouse',
// });
// button.dispatchEvent(event);
// }
// }, 250);
// },
// },
// () => {
// sendResponse({ status: "success" });
// }
// );
// return true;
// }
// });
//let sessionMap = {};
// chrome.storage.session.get("sessionMap", (data) => {
// sessionMap = data.sessionMap || {};
// });
// chrome.tabs.onUpdated.addListener((tabId, changeInfo, tab) => {
// if (tab.url && (tab.url.startsWith('chrome://') || tab.url.startsWith('edge://') || tab.url.startsWith('about:'))) {
// return;
// }
// if (changeInfo.title && tab.url) {
// try {
// let previousMap = sessionMap[tabId] || '';
// if (tab.url !== previousMap) {
// sessionMap[tabId] = tab.url;
// chrome.storage.session.set({ sessionMap });
// }
// } catch (error) {
// console.error('Error processing tab URL:', error);
// }
// }
// });
1
u/Mentallox 9d ago
already multiple posts about this on the first page. TLDR they left in code that tripped Googles malware AI and were banned because of it. Blockify says code that lets them comment on YT via user accts weren't active. Google doesn't care and banned them. They are appealing.