5 votos

¿Por qué TowelRoot requiere acceso a Internet y a la red?

Leí una entrada en un blog en algún lugar que sugería que Toallín no necesita acceso a Internet, y también he leído que sí lo necesita. La última versión que intenté ejecutar TowelRoot v3 no funcionará sin ella. ¿Está descargando o enviando alguna información? Si es así, ¿qué?

Adición: Supongo que si estuvieran tratando de lograr algo nefasto, lo harían en lugar de pedir permiso... ¿verdad?

0 votos

¿Puedes ver el código fuente al descompilar el APK? Si es así, ¿puedes buscar todas las llamadas de conexión al socket para verificar que no se están enviando datos encriptados? Muchas gracias por tu ayuda.

0 votos

@DeathMaskSalesman Gracias. Publícalo como respuesta y lo marcaré. Para que quede claro: has descompilado la última versión de su web oficial, la v3, ¿no? Hice esta pregunta después de sospechar de su UI, preguntado en esto otra pregunta . Publica un comentario si tienes alguna otra idea o añádela a tu respuesta.

0 votos

Sí, es cierto. He descargado la última versión de towelroot.com Lo instalé y luego lo descompilé, así que es genuino. Actualmente estoy recuperando algunos de los fragmentos descompilados para escribir la respuesta.

7voto

Como el código de TowelRoot no está disponible públicamente, recurrí a descompilar el último APK, descargado del Sitio web de TowelRoot para investigar la necesidad de la aplicación para el permiso de INTERNET.


Notas relevantes

Tras una exitosa descompilación, resultó que ni las actividades ni el código en sí mismo se ofuscaron. El desarrollador ciertamente había previsto que esta aplicación sería investigada, pero dejó que el código fuera lo más transparente posible. El archivo más importante que tenemos en este momento es ToallaRoot.smali que describe todo el funcionamiento de esta aplicación.


Estructura inicial

De line 13 a line 22 el código inicializa un campo llamado fingerprint . A continuación, el código correspondiente:

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

que es una lista Java compuesta de pares clave-valor, para ser usada cuando se recoge la información relevante del teléfono.


Los datos recogidos

De line 56 a line 215 el código describe un método llamado fillInFingerprint que se encarga de recuperar los datos adecuados para enviarlos al sitio web de TowelRoot, a fin de determinar si el dispositivo puede arraigarse mediante la explotación homónima. Este método hace un uso extensivo de la mencionada fingerprint campo. A continuación, los datos recopilados.

Modelo de dispositivo

El modelo de dispositivo visible. Lines 70 to 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

Huella del dispositivo

Un identificador único para la construcción del sistema operativo. Lines 83 to 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

El hardware del dispositivo

Probablemente la placa procesadora. Lines 96 to 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

Dispositivo de serie

El número de serie unívoco del dispositivo. Lines 109 to 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

Versión del núcleo del dispositivo

Vital ya que es probable que la hazaña haya sido remendada en los núcleos recientes. Lines 122 to 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

Versión TowelRoot

Lines 168 to 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 cadena "modstring". Lines 202 to 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 solicitud del servidor

De line 227 to 329 el código describe el método queryServer que consulta la base de datos del servidor para encontrar una coincidencia con los datos recogidos, y maneja las excepciones no deseadas en el código. Estos datos se transmiten a la URL https://towelroot.appspot.com/report/ a través de SSL y una solicitud POST ( lines 263 to 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

hazlo ra1n

El método buttonClicked ( lines 333 to 426 ) contiene el código que hace que la aplicación funcione cuando se presiona el botón. Entre otros, llama a los métodos fillInFingerprint para reunir la información necesaria, y queryServer para ver si el dispositivo puede ser rooteado.

Luego procede a analizar la respuesta del servidor. Si dicha respuesta está vacía, TowelRoot te pregunta sobre la necesidad de una conexión a Internet ( lines 369 to 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 respuesta no está vacía, entonces Toallín procede a comprobar si lo anterior es igual a la cadena nyet ( lines 391 to 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 respuesta es igual nyet entonces el teléfono no está oficialmente respaldado.

Por último, si la respuesta es tanto no vacía como diferente de nyet Toallín inicia el procedimiento del rooting llamando al método nativo rootTheShit definido en line 448 y probablemente contenido dentro de la biblioteca libexploit.so .


Para los valientes

Toallín incluye un modo especial para usuarios con dispositivos no compatibles. Este modo, cuyo código está definido dentro del método titleClicked ( lines 451 to 504 ), es accesible pulsando el botón rojo bienvenido a towelroot v3 dentro de la aplicación, y permitirá al usuario probar diferentes modstrings para tratar de rootear el dispositivo de todos modos.


Descargo de responsabilidad

Todas las blasfemias incluidas en esta respuesta se derivan de la copia literal de los nombres de los métodos de la aplicación, y por lo tanto es obra del desarrollador.

0 votos

+1 por ir a la fuente. Mucho mejor que un "no creo" o un "todo está bien en mi instalación".

0 votos

...siempre y cuando no vayas también por geohot.

1 votos

@user58446 Él y yo no estamos de ninguna manera afiliados, tenlo por seguro. Es bastante triste que él fue bashing explota para Google, pero ¿quiénes somos nosotros para contradecir su decisión?

PreguntAndroid.com

PreguntAndroid es una comunidad de usuarios de Android en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X