;(function() { window.createMeasureObserver = (measureName) => { var markPrefix = `_uol-measure-${measureName}-${new Date().getTime()}`; performance.mark(`${markPrefix}-start`); return { end: function() { performance.mark(`${markPrefix}-end`); performance.measure(`uol-measure-${measureName}`, `${markPrefix}-start`, `${markPrefix}-end`); performance.clearMarks(`${markPrefix}-start`); performance.clearMarks(`${markPrefix}-end`); } } }; /** * Gerenciador de eventos */ window.gevent = { stack: [], RUN_ONCE: true, on: function(name, callback, once) { this.stack.push([name, callback, !!once]); }, emit: function(name, args) { for (var i = this.stack.length, item; i--;) { item = this.stack[i]; if (item[0] === name) { item[1](args); if (item[2]) { this.stack.splice(i, 1); } } } } }; var runningSearch = false; var hadAnEvent = true; var elementsToWatch = window.elementsToWatch = new Map(); var innerHeight = window.innerHeight; // timestamp da última rodada do requestAnimationFrame // É usado para limitar a procura por elementos visíveis. var lastAnimationTS = 0; // verifica se elemento está no viewport do usuário var isElementInViewport = function(el) { var rect = el.getBoundingClientRect(); var clientHeight = window.innerHeight || document.documentElement.clientHeight; // renderizando antes, evitando troca de conteúdo visível no chartbeat-related-content if(el.className.includes('related-content-front')) return true; // garante que usa ao mínimo 280px de margem para fazer o lazyload var margin = clientHeight + Math.max(280, clientHeight * 0.2); // se a base do componente está acima da altura da tela do usuário, está oculto if(rect.bottom < 0 && rect.bottom > margin * -1) { return false; } // se o topo do elemento está abaixo da altura da tela do usuário, está oculto if(rect.top > margin) { return false; } // se a posição do topo é negativa, verifica se a altura dele ainda // compensa o que já foi scrollado if(rect.top < 0 && rect.height + rect.top < 0) { return false; } return true; }; var asynxNextFreeTime = () => { return new Promise((resolve) => { if(window.requestIdleCallback) { window.requestIdleCallback(resolve, { timeout: 5000, }); } else { window.requestAnimationFrame(resolve); } }); }; var asyncValidateIfElIsInViewPort = function(promise, el) { return promise.then(() => { if(el) { if(isElementInViewport(el) == true) { const cb = elementsToWatch.get(el); // remove da lista para não ser disparado novamente elementsToWatch.delete(el); cb(); } } }).then(asynxNextFreeTime); }; // inicia o fluxo de procura de elementos procurados var look = function() { if(window.requestIdleCallback) { window.requestIdleCallback(findByVisibleElements, { timeout: 5000, }); } else { window.requestAnimationFrame(findByVisibleElements); } }; var findByVisibleElements = function(ts) { var elapsedSinceLast = ts - lastAnimationTS; // se não teve nenhum evento que possa alterar a página if(hadAnEvent == false) { return look(); } if(elementsToWatch.size == 0) { return look(); } if(runningSearch == true) { return look(); } // procura por elementos visíveis apenas 5x/seg if(elapsedSinceLast < 1000/5) { return look(); } // atualiza o último ts lastAnimationTS = ts; // reseta status de scroll para não entrar novamente aqui hadAnEvent = false; // indica que está rodando a procura por elementos no viewport runningSearch = true; const done = Array.from(elementsToWatch.keys()).reduce(asyncValidateIfElIsInViewPort, Promise.resolve()); // obtém todos os elementos que podem ter view contabilizados //elementsToWatch.forEach(function(cb, el) { // if(isElementInViewport(el) == true) { // // remove da lista para não ser disparado novamente // elementsToWatch.delete(el); // cb(el); // } //}); done.then(function() { runningSearch = false; }); // reinicia o fluxo de procura look(); }; /** * Quando o elemento `el` entrar no viewport (-20%), cb será disparado. */ window.lazyload = function(el, cb) { if(el.nodeType != Node.ELEMENT_NODE) { throw new Error("element parameter should be a Element Node"); } if(typeof cb !== 'function') { throw new Error("callback parameter should be a Function"); } elementsToWatch.set(el, cb); } var setEvent = function() { hadAnEvent = true; }; window.addEventListener('scroll', setEvent, { capture: true, ive: true }); window.addEventListener('click', setEvent, { ive: true }); window.addEventListener('resize', setEvent, { ive: true }); window.addEventListener('load', setEvent, { once: true, ive: true }); window.addEventListener('DOMContentLoaded', setEvent, { once: true, ive: true }); window.gevent.on('allJSLoadedAndCreated', setEvent, window.gevent.RUN_ONCE); // inicia a validação look(); })();
  • AssineUOL
Topo

Clones do WhatsApp serão bloqueados no Android; confira apps proibidos

Will Cathcart, diretor do WhatsApp, informou que o recurso Play Protect vai bloquear versões proibidas do programa - Getty Images
Will Cathcart, diretor do WhatsApp, informou que o recurso Play Protect vai bloquear versões proibidas do programa Imagem: Getty Images

Rosália Vasconcelos

Colaboração para Tilt, do Recife

20/07/2022 16h59

Aplicativos falsos do WhatsApp serão bloqueados automaticamente da loja de apps do Google. A mudança foi destacada por Will Cathcart, diretor do WhatsApp, na última semana.

Em várias publicações no Twitter, o executivo afirmou que a empresa ampliou os recursos de segurança da plataforma e reforçou que "nunca é uma boa ideia" baixar versões falsas ou modificadas do WhatsApp — programas do tipo geralmente oferecem recursos extras.

"Esses aplicativos parecem inofensivos, mas podem contornar as garantias de privacidade e segurança", escreveu.

Como o Google faz o bloqueio

O Google Play Protect, sistema que analisa a segurança dos aplicativos para o Android, está detectando e desativando de modo automático programas falsos e maliciosos envolvendo o WhatsApp, de acordo com o executivo. E isso antes que eles sejam baixados pelos usuários.

Segundo o chefe do WhatsApp, a equipe de segurança do serviço descobriu um malware (programa malicioso) oculto no aplicativo "Hey WhatsApp", de um grupo de desenvolvedores chamado "HeyMods".

"Esses aplicativos prometiam novos recursos, mas eram apenas uma farsa para roubar informações pessoais armazenadas nos telefones das pessoas. Compartilhamos o que encontramos com o Google e trabalhamos com eles para combater os aplicativos maliciosos", acrescentou.

Nas publicações, Cathcart ainda pediu que usuários da plataforma avisem a amigos e familiares sobre os riscos de se usar as versões modificadas do programa original: "Incentive-os a usar apenas o WhatsApp de uma loja de aplicativos confiável ou diretamente do nosso site."

"Proibidões" do WhatsApp

Essa não é a primeira iniciativa do grupo Meta (também dono do Facebook e do Instagram) para coibir o uso de aplicativos que imitam o WhatsApp.

A empresa já anunciou publicamente que usar programas que não sejam o oficial viola os Termos de Serviço da companhia. Sendo assim, a pessoa pode ter sua conta banida do WhatsApp. Apps populares como GB WhatsApp e WhatsApp Plus chegaram a ser citados pela companhia como proibidos.

Por que os clones do WhatsApp fazem sucesso

Para alguns usuários, o WhatsApp possui recurso limitados. E, para abocanhar essa gama de insatisfeitos, programadores de software anônimos aram a criar apps piratas a partir da versão oficial.

Esses programas imitam o original e oferecem mais funcionalidades, como:

  • Envio de áudio e vídeo de no máximo 100 MB.
  • Ocultar o "visto por último", status online e quando você visualizar uma mensagem
  • Não mostra quando você está digitando ou gravando áudio.
  • Novos pacotes de emojis.
  • Status mais longos com possibilidade de usar até 250 caracteres, além de direto no celular.
  • Uso de fontes e cores de textos diferentes.
  • Senha para abrir o aplicativo e/ou proteger conversas que o usuário desejar.
  • Grupos com maior número de participantes.
  • Recurso que impede que os outros usuários apaguem as mensagens para você.
  • Agendamento do envio de mensagens.

Além dos mencionados acima, outros programas do tipo são: OGWhatsApp, o WhatsMapp e o Whatsapp 2 — existem outras variações.

"Continuaremos nossos esforços para detectar e bloquear esses tipos de aplicativos daqui para frente. Também estamos tomando medidas de fiscalização contra os HeyMods para impedir danos futuros e exploraremos ainda mais as opções legais para responsabilizar os HeyMods e outros como eles", afirmou Cathcart.