5 votes

Pourquoi TowelRoot nécessite-t-il un accès à l'Internet / au réseau ?

J'ai lu un article de blog quelque part qui suggérait que TowelRoot n'avait pas besoin d'un accès à Internet, et j'ai également lu que c'était le cas. La dernière version que j'ai essayé d'exécuter, TowelRoot v3, ne fonctionne pas sans lui. Télécharge-t-il ou envoie-t-il des informations ? Si oui, lesquelles ?

Addendum : Je suppose que s'ils essayaient d'accomplir quelque chose d'infâme, ils le feraient au lieu de demander la permission... non ?

7voto

Grimoire Points 2908

Le code de TowelRoot n'étant pas accessible au public, j'ai eu recours à la décompilation de la dernière version de l'APK, téléchargée à partir de l'adresse suivante Site web de TowelRoot afin d'examiner si l'application a besoin de l'autorisation INTERNET.


Notes pertinentes

Une fois la décompilation réussie, il s'est avéré que ni les activités ni le code lui-même n'étaient obscurcis. Le développeur avait certainement prévu que cette application ferait l'objet d'une enquête, mais il avait laissé le code aussi transparent que possible. Le fichier le plus important que nous avons à ce stade est le suivant TowelRoot.smali qui décrit tout le fonctionnement de cette application.

Note : selon votre version particulière d'ApkTool, les numéros de ligne peuvent varier.


Structure initiale

Dans les lignes 13-22 le code initialise un champ appelé fingerprint . Le code correspondant est le suivant :

.field fingerprint:Ljava/util/List;
    .annotation system Ldalvik/annotation/Signature;
        value = {
            "Ljava/util/List",
            "<",
            "Lorg/apache/http/NameValuePair;",
            ">;"
        }
    .end annotation
.end field

qui est une liste Java composée de paires clé-valeur, à utiliser lors de la collecte des informations pertinentes du téléphone.


Données collectées

Dans les lignes 56-215 le code décrit une méthode appelée fillInFingerprint qui est chargé de récupérer les données appropriées à envoyer au site Web TowelRoot, afin de vérifier si le dispositif peut être enraciné via l'exploit homonyme. Cette méthode fait un usage intensif de l'outil d'exploitation susmentionné. fingerprint champ. Les données recueillies sont les suivantes.

Modèle de dispositif

Le modèle de dispositif visible. Lignes 70-80 :

iget-object v4, p0, Lcom/geohot/towelroot/TowelRoot;->fingerprint:Ljava/util/List;

new-instance v5, Lorg/apache/http/message/BasicNameValuePair;

const-string v6, "model"

sget-object v7, Landroid/os/Build;->MODEL:Ljava/lang/String;

invoke-direct {v5, v6, v7}, Lorg/apache/http/message/BasicNameValuePair;-><init>(Ljava/lang/String;Ljava/lang/String;)V

invoke-interface {v4, v5}, Ljava/util/List;->add(Ljava/lang/Object;)Z

Empreinte digitale du dispositif

Un identifiant unique pour la version du système d'exploitation. Lignes 83-93 :

iget-object v4, p0, Lcom/geohot/towelroot/TowelRoot;->fingerprint:Ljava/util/List;

new-instance v5, Lorg/apache/http/message/BasicNameValuePair;

const-string v6, "fingerprint"

sget-object v7, Landroid/os/Build;->FINGERPRINT:Ljava/lang/String;

invoke-direct {v5, v6, v7}, Lorg/apache/http/message/BasicNameValuePair;-><init>(Ljava/lang/String;Ljava/lang/String;)V

invoke-interface {v4, v5}, Ljava/util/List;->add(Ljava/lang/Object;)Z

Matériel du dispositif

Probablement la carte processeur. Lignes 96-106 :

iget-object v4, p0, Lcom/geohot/towelroot/TowelRoot;->fingerprint:Ljava/util/List;

new-instance v5, Lorg/apache/http/message/BasicNameValuePair;

const-string v6, "hardware"

sget-object v7, Landroid/os/Build;->HARDWARE:Ljava/lang/String;

invoke-direct {v5, v6, v7}, Lorg/apache/http/message/BasicNameValuePair;-><init>(Ljava/lang/String;Ljava/lang/String;)V

invoke-interface {v4, v5}, Ljava/util/List;->add(Ljava/lang/Object;)Z

Série de dispositifs

Numéro de série unique du dispositif. Lignes 109-119 :

iget-object v4, p0, Lcom/geohot/towelroot/TowelRoot;->fingerprint:Ljava/util/List;

new-instance v5, Lorg/apache/http/message/BasicNameValuePair;

const-string v6, "serial"

sget-object v7, Landroid/os/Build;->SERIAL:Ljava/lang/String;

invoke-direct {v5, v6, v7}, Lorg/apache/http/message/BasicNameValuePair;-><init>(Ljava/lang/String;Ljava/lang/String;)V

invoke-interface {v4, v5}, Ljava/util/List;->add(Ljava/lang/Object;)Z

Version du noyau de l'appareil

C'est vital car l'exploit a probablement été corrigé dans les noyaux récents. Lignes 122-134 :

iget-object v4, p0, Lcom/geohot/towelroot/TowelRoot;->fingerprint:Ljava/util/List;

new-instance v5, Lorg/apache/http/message/BasicNameValuePair;

const-string v6, "kernel"

invoke-virtual {p0}, Lcom/geohot/towelroot/TowelRoot;->javaSucksAssReadTheKernelVersion()Ljava/lang/String;

move-result-object v7

invoke-direct {v5, v6, v7}, Lorg/apache/http/message/BasicNameValuePair;-><init>(Ljava/lang/String;Ljava/lang/String;)V

invoke-interface {v4, v5}, Ljava/util/List;->add(Ljava/lang/Object;)Z

Version de TowelRoot

Lignes 168-180 :

iget-object v4, p0, Lcom/geohot/towelroot/TowelRoot;->fingerprint:Ljava/util/List;

new-instance v5, Lorg/apache/http/message/BasicNameValuePair;

const-string v6, "appversion"

invoke-direct {p0}, Lcom/geohot/towelroot/TowelRoot;->getSoftwareVersion()Ljava/lang/String;

move-result-object v7

invoke-direct {v5, v6, v7}, Lorg/apache/http/message/BasicNameValuePair;-><init>(Ljava/lang/String;Ljava/lang/String;)V

invoke-interface {v4, v5}, Ljava/util/List;->add(Ljava/lang/Object;)Z

Modstring

La chaîne modstring . Lignes 202-211 :

.local v1, "modstring":Ljava/lang/String;
iget-object v4, p0, Lcom/geohot/towelroot/TowelRoot;->fingerprint:Ljava/util/List;

new-instance v5, Lorg/apache/http/message/BasicNameValuePair;

const-string v6, "modstring"

invoke-direct {v5, v6, v1}, Lorg/apache/http/message/BasicNameValuePair;-><init>(Ljava/lang/String;Ljava/lang/String;)V

invoke-interface {v4, v5}, Ljava/util/List;->add(Ljava/lang/Object;)Z

La demande du serveur

Dans les lignes 227-329 le code décrit la méthode queryServer qui interroge la base de données du serveur afin de trouver une correspondance avec les données collectées, et traite les éventuelles exceptions dans le code. Ces données sont transmises à l'URL https://towelroot.appspot.com/report/ via SSL et une requête POST (lignes 263-275 ):

.local v2, "httppost":Lorg/apache/http/client/methods/HttpPost;
new-instance v5, Lorg/apache/http/client/entity/UrlEncodedFormEntity;

iget-object v6, p0, Lcom/geohot/towelroot/TowelRoot;->fingerprint:Ljava/util/List;

invoke-direct {v5, v6}, Lorg/apache/http/client/entity/UrlEncodedFormEntity;-><init>(Ljava/util/List;)V

invoke-virtual {v2, v5}, Lorg/apache/http/client/methods/HttpPost;->setEntity(Lorg/apache/http/HttpEntity;)V

.line 88
invoke-interface {v1, v2}, Lorg/apache/http/client/HttpClient;->execute(Lorg/apache/http/client/methods/HttpUriRequest;)Lorg/apache/http/HttpResponse;

move-result-object v3

faites le ra1n

La méthode buttonClicked (lignes 333-426 ) contient le code qui fait fonctionner l'application lorsque vous appuyez sur le bouton. Il appelle, entre autres, les méthodes fillInFingerprint pour recueillir les informations nécessaires, et queryServer pour voir si l'appareil peut être enraciné.

Il procède ensuite à l'analyse de la réponse du serveur. Si ladite réponse est vide, TowelRoot vous invite à indiquer la nécessité d'une connexion Internet (lignes 369-378 ):

invoke-virtual {v0, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z

move-result v2

if-eqz v2, :cond_1

.line 115
const-string v2, "Please ensure you are connected to the internet"

invoke-virtual {v1, v2}, Landroid/widget/TextView;->setText(Ljava/lang/CharSequence;)V

Si la réponse n'est pas vide, TowelRoot vérifie si la réponse ci-dessus est égale à la chaîne de caractères suivante nyet (lignes 391-402 ):

const-string v2, "nyet"

invoke-virtual {v0, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z

move-result v2

if-eqz v2, :cond_2

.line 117
const-string v2, "This phone isn\'t currently supported"

invoke-virtual {v1, v2}, Landroid/widget/TextView;->setText(Ljava/lang/CharSequence;)V

Si la réponse est égale à nyet alors le téléphone n'est pas officiellement pris en charge.

Enfin, si la réponse est à la fois non vide et différente de nyet TowelRoot lance la procédure d'enracinement en appelant la méthode native rootTheShit défini à la ligne 448 et probablement contenu dans la bibliothèque libexploit.so .


Pour les courageux

TowelRoot comprend un mode spécial pour les utilisateurs dont les appareils ne sont pas pris en charge. Ce mode, dont le code est défini à l'intérieur de la méthode titleClicked (lignes 451-504 ), est accessible en appuyant sur le bouton rouge welcome to towelroot v3 à l'intérieur de l'application, et permettra à l'utilisateur d'essayer différentes modstrings afin d'essayer de Rooter le dispositif malgré tout.

androidalle.com

AndroidAlle est une communauté de androiders où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X