;(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

Perfis falsos no WhatsApp: entenda novo golpe que afetou Guilherme Boulos

Clonagem do WhatsApp agora é substituída por criação de perfis falsos - iStock/Getty
Clonagem do WhatsApp agora é substituída por criação de perfis falsos Imagem: iStock/Getty

Renata Baptista

De Tilt, no Recife (PE)

20/10/2020 12h29Atualizada em 10/12/2020 15h46

Sem tempo, irmão

  • Criminosos agora estão criando perfis falsos para golpes pelo WhatsApp
  • Eles conseguem dados pessoais por meio de criminosos nomeados Data Brokers
  • Golpistas utilizam informações com um novo número de celular
  • Mais recente vítima foi o candidato a prefeito de São Paulo, Guilherme Boulos (Psol)

Os golpistas estão com novas técnicas para realizar golpes pelo WhatsApp. Se antes eles usavam anúncios ou convites de famosos para festas, para assim clonar as contas, a tática agora é bem mais simples: a criação de perfis falsos.

Uma recente vítima foi o candidato do PSOL a prefeito de São Paulo, Guilherme Boulos, que informou o problema na manhã desta segunda-feira (19). Os golpistas conseguiram uma cópia da sua agenda de contatos e enviaram mensagens —a partir de outro número de celular— se ando pelo candidato, com a foto do perfil dele no aplicativo, pedindo dinheiro para "ajudar na campanha".

Quem tem o perfil "falsificado" não fica sabendo que os criminosos estão usando sua identidade para aplicar a extorsão. Boulos, por exemplo, disse que foi informado sobre as mensagens com pedidos de contribuição por meio de seus próprios contatos.

Em nota, o candidato esclareceu que "não pede doações por celular", e que a única maneira de doar é pelo site e pela conta oficial da campanha, no caso de contribuições de maior valor.

De acordo com a empresa de cibersegurança Kaspersky, os golpistas compram banco de dados com muitas informações pessoais, como endereços, telefone, local de trabalho, preferência de lazer e afiliação e indicações de pessoas próximas. Os criminosos que comercializam as informações foram nomeados como Data Brokers, termo que cunhou até uma operação da Polícia Civil de Goiás, realizada em setembro.

"Aqui, todos os tipos de empresa podem ser vítimas. Logicamente que lojas online são alvos óbvios, mas qualquer empresa conta com banco de dados de funcionários e de clientes que podem ser usados para abastecer este esquema", afirma Fabio Assolini, analista sênior de segurança da Kaspersky.

Após a compra de informações pessoais dos Data Brokers, os criminosos buscam nas redes sociais pelos nomes e fotos das pessoas para serem usadas nas contas que aplicarão a extorsão. Segundo Assolini, para iniciar o golpe, muitas vezes a primeira mensagem que os criminosos enviam a familiares e amigos é "troquei meu celular".

Após uma rápida troca de mensagens, o criminoso faz a famosa solicitação de empréstimo de dinheiro para pagar uma conta ou realizar uma compra. No dia em que a operação Data Brokers foi deflagrada, os prejuízos com as extorsões somavam R$ 500 mil.

Para evitar ser objeto de clonagem, a Kaspersky apresenta algumas dicas, como:

Para se proteger em caso que seu familiar ou amigo foi clonado, preste atenção a isso:

  • Caso receba uma mensagem suspeita, sempre desconfiar.
  • Entre em contato com a pessoa que está pedindo dinheiro, por meio de ligação por voz pelo telefone. Além de confirmar a autenticidade da mensagem, você ainda pode alertar a pessoa sobre o golpe.