terça-feira, 10 de janeiro de 2017

iFood + Python + Gephi == Food Stalker

Pessoal,

Nesta postagem eu vou estar falando um pouco sobre uma pequena ideia que eu tive durante o final de semana: analisar as avaliações de restaurantes/lanchonetes presentes no aplicativo do iFood para retirar informações de preferências de usuários sobre uma determinada região (latitude e longitude). A abordagem apresentada pode ser utilizada como um vetor de pesquisas durante uma atividade de levantamento de informações (OSINT).

Ambiente de Teste

O ambiente de testes foi composto por 3 elementos:
  1. iPhone 5S com aplicativo instalado
  2. VM Android (Genymotion) com aplicativo instalado. 
  3. Kali Linux com Burp Proxy (interceptação e análise das requisições HTTP).
Requisições HTTP

O aplicativo realiza 3 requisições importantes para a pesquisa de locais.
  • /ifood-ws-v3/address/locationsByLatLon: define a localização do usuário a partir de suas coordenadas (latitude e longitude). Este método do Web Service retorna uma variável "locationId" que será utilizada nas demais requisições (demonstrado na figura 01).
Figura 01: Obtendo a localização do usuário
  • /ifood-ws-v3/restaurant/list: utiliza o parâmetro "locationId" para obter uma lista dos restaurantes/lanchonetes próximos ao usuário. Cada restaurante identificado na região do usuário apresenta um identificador único: "restaurantId" (demonstrado na figura 02).
Figura 02: Obtendo lista de restaurantes
  • /ifood-ws-v3/restaurant/evaluations: retorna uma lista com as avaliações realizadas pelos usuários da aplicação para um determinado restaurante/lanchonete (demonstrado na figura 03).
Figura 03: Obtendo lista de avaliações

Prova de conceito (PoC)

Eu criei um script em Python para gerar as requisições HTTP e obter as avaliações de usuários sobre os restaurantes próximos a uma determinada localização (latitude e longitude). Estou utilizando a biblioteca NetworkX para gerar um grafo direcionado com todas as relações entre usuários e locais. A ferramenta Gephi esta sendo utilizada para visualizar o grafo gerado pelo script. O vídeo abaixo demonstra a execução do script.



6 comentários:

  1. Como Sempre, muito bom. Sempre tem algo novo a aprender com suas postagens. Obrigado!

    ResponderExcluir
  2. Excelente abordagem. Irei testar. Obrigado pelas dicas.

    ResponderExcluir
  3. Olá, gostaria de falar com você sobre essa aplicação. Como faço para entrar em contato contigo?

    ResponderExcluir
  4. Muito bom!:)
    Voce disponibilizou o script em algum lugar? Eu gostaria de fazer algumas melhorias nele (como exportar para outros formatos e utilizar o asyncio do Python para capturar os dados de maneira mais rapida).

    ResponderExcluir