Eu acordei hoje de manhã e vi um artigo detalhando o novo sistema de verificação do Snapchat – app feito para enviar fotos ou vídeos que desaparecem após alguns segundos. Isto foi criado para para saber se você é humano ou um bot, e assim reduzir o spam que vem se infiltrando lentamente no serviço.

Talvez você não tenha visto, então vou resumir para você. Eles basicamente exibem um monte de imagens (veja acima!) e pedem para você escolher as que têm o fantasma do Snapchat, para provar que você é uma pessoa. É como uma espécie de CAPTCHA menos irritante.

O problema disso é que o fantasma do Snapchat é muito específico. Identificá-lo é uma das tarefas mais fáceis para um computador. Isso se faz através de “template matching” (correspondência baseada em modelo), que busca uma imagem dentro de outra – no caso, o fantasma dentro da imagem de verificação.

Mas é isso que o Snapchat está usando para verificar se você é… humano. Esta é uma forma incrivelmente ruim de conferir se o usuário é uma pessoa ou um bot, porque é um problema fácil para um computador resolver.

snapchat hack 2

Depois que eu li isso, passei cerca de 30 minutos escrevendo código para o computador identificar o fantasma. Há muitas formas de resolver este problema: o HoG provavelmente seria o melhor, mas isso levaria mais tempo, e eu sou preguiçoso (leia-se eficiente). Então fiz o seguinte:

  • extraí as diferentes imagens do slide acima;
  • fiz a limiarização delas, isto é, separei os elementos da imagem;
  • extraí certos pontos e características da imagem, como formato e color, usando o método SURF;
  • fiz o mesmo isso com a imagem-base (template) e comparei os dados usando o método FLANN;
  • às vezes, o computador encontra muitos elementos iguais nessa comparação, por isso restringi essas correspondências de dados;
  • se a singularidade for alta o bastante, e se houver muitas correspondências, então encontramos o fantasma do Snapchat.

(Para quem entende de visão computacional: eu usei OpenCV e limiarização simples, pontos-chave SURF e correspondência por FLANN com um teste de singularidade. O código está disponível neste link.)

Com pouquíssimo esforço, o meu código foi capaz de “encontrar o fantasma” no exemplo acima com 100% de precisão. Eu não digo que meu método é perfeito, longe disso. Só estou dizendo que eu nem precisei de uma hora para treinar um computador e quebrar o sistema de verificação humana – obviamente há algo de errado aí.

Há diversas formas de burlar o sistema utilizando visão computacional, e todos são rápidos e eficazes. É uma disputa entre computadores, e o sistema de verificação do Snapchat está perdendo.


Steven Hickson é pesquisador em pós-graduação no Georgia Institute of Technology. Ele se formou magna cum laude na licenciatura em Engenharia da Computação pela Universidade de Clemson; depois, ele foi para o Departamento de Defesa americano. Steven decidiu então fazer doutorado com foco em visão computacional, robótica e sistemas embarcados. Suas bibliotecas de código aberto são usadas ​​em todo o mundo.

Este post foi publicado originalmente no blog do autor, e foi reproduzido com permissão (e adaptações).