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

Cuidado com o nude falso: os códigos do DeepNude se espalharam na internet

Aplicativo DeepNude cria imagens de mulheres nuas usando deepfake - Reprodução
Aplicativo DeepNude cria imagens de mulheres nuas usando deepfake Imagem: Reprodução

Do TAB, em São Paulo

10/07/2019 13h34

O código aberto do DeepNude se espalhou pela internet e as plataformas e aplicativos começam agora a tentar removê-los o quanto antes. O GitHub, plataforma onde programadores compartilham abertamente códigos que usam, removeu recentemente códigos que permitiam usuários a criar imagens de mulheres nuas usando deepfake, linguagem de programação que cria montagens e vídeos falsos na internet.

Os criadores do DeepNude retiraram a própria invenção do ar no fim do mês ado, após reação ruidosa nas redes sociais, mas já está rodando por aí códigos similares e "falsificados", como o encontrado no GitHub. Como o programa estava disponível para e uso off-line, programados aram a compartilhar os códigos em fóruns. No início do mês, a plataforma de bate-papo Discord baniu um servidor que estava vendendo uma versão do aplicativo. O código era oferecido por US$ 20, através dos vales-presente da Amazon ou do Bitcoin.

"Não monitoramos proativamente o conteúdo gerado pelo usuário, mas investigamos ativamente os relatórios de abuso. Neste caso, desativamos o projeto porque descobrimos que ele viola nossa política de uso aceitável", disse um porta-voz do GitHub.

Prática é crime

A prática de criar imagens falsas de corpos femininos é crime no Brasil. De acordo com advogadas especialistas em direito digital consultadas pelo TAB, o código penal prevê detenção de seis meses a um ano, além de multa, para quem comete o crime de violência virtual. A Lei 13.772/18 alterou a Lei Maria da Penha para condenar quem produz imagens íntimas sem consentimento da vítima, sejam verdadeiras ou montagens.

Apesar de a lei prever punição para quem cria imagens como as feitas pelo código do DeepNude, o problema é, primeiro, encontrar o autor da imagem depois que ela caiu na rede e, segundo, provar que a imagem é falsa.

"É tão bem feito que é difícil fazer a perícia. Mesmo contratando uma perícia particular, pode demorar também para chegar a uma conclusão. Isso acontece por falta de profissionais, às vezes demora muito tempo", afirma a advogada Alice Bianchini. "Essa é uma prática que inclusive pode se enquadrar em um crime maior, como extorsão, vingança ou estupro virtual", alerta.

Mulheres são vítimas mais frequentes

Segundo dados da ONG SaferNet, que atua na defesa dos direitos humanos em ambientes virtuais, 67% das vítimas de violência e agressão na internet atendidas pela organização em 2016 foram meninas e mulheres.

"Infelizmente tem uma questão moral muito forte em relação às mulheres", diz Bianchini. "Há uma cobrança de um recato sexual. Ir contra esse comportamento é visto como errado, e a mulher se sente culpada. Ou ela é perfeita e santa ou é o demônio. Já os homens podem ser bons, ruins ou médios. As mulheres não", completa.
Bianchini alerta que a divulgação de imagens íntimas sem consentimento também é crime, mesmo que a pessoa não seja autor da foto ou da montagem.

Não é só uma brincadeira

Os programadores do código original afirmam que criaram o DeepNude para entretenimento e não imaginaram que poderia viralizar. O app era gratuito para e gerava imagens com tarjas pretas nas partes íntimas das mulheres na versão completamente gratuita. Por meio de uma , o usuário conseguiria uma foto sem censura.

Por conta do excesso de o ao servidor do aplicativo e da possibilidade de mau uso, ele foi derrubado. "Apesar das medidas de segurança adotadas (marcas d'água), se 500 mil pessoas o usassem, a probabilidade de alguém fazer mau uso [do app] era alta demais. Nós não queremos ganhar dinheiro desta forma. Com certeza algumas cópias do DeepNude serão compartilhadas na rede, mas nós não queremos ser aqueles a vendê-lo", diz a nota na rede social. "Daqui para frente, DeepNude não terá novas versões e não assegura o seu uso para ninguém. Nem mesmo as licenças para ativar a versão ."

Fique por dentro de comportamento e cultura seguindo o TAB no Instagram e tenha conteúdos extras sobre inovação, tecnologia e estilo de vida.

Errata: este conteúdo foi atualizado
Diferentemente do informado no 4° parágrafo desta matéria, é a Lei 13.772/18 que criminaliza o registro não autorizado de conteúdo com cena de nudez ou ato sexual de caráter íntimo e privado, e não a Lei 13.779/2018, como informado. A informação já foi corrigida.