Почему TowelRoot требует доступа к Интернету / сети?

Я где-то читал сообщение в блоге, в котором говорилось, что TowelRoot не нуждается в доступе в Интернет, и я также читал, что он нужен. Последнюю версию, которую я пытался запустить, TowelRoot v3 без него работать не будет. Он загружает или отправляет какую-либо информацию? Если да, то?

Приложение: Я полагаю, если бы они пытались совершить что-то гнусное, они бы просто сделали это, вместо того, чтобы спрашивать разрешения... верно?

Ответы (1)

Поскольку код TowelRoot недоступен в открытом доступе, я прибегнул к декомпиляции последней версии APK, загруженной с веб- сайта TowelRoot , чтобы исследовать потребность приложения в разрешении INTERNET.


Соответствующие примечания

При успешной декомпиляции оказалось, что ни активности, ни сам код не обфусцируются. Разработчик, конечно, ожидал, что это приложение будет изучено, но он оставил код максимально прозрачным. Самый важный файл, который у нас есть на данный момент, это TowelRoot.smali, который описывает всю работу этого приложения.

Примечание: в зависимости от вашей конкретной версии ApkTool номера строк могут отличаться.


Исходная структура

В строках 13-22код инициализирует поле с именем fingerprint. Ниже приведен соответствующий код:

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

который представляет собой список Java, состоящий из пар ключ-значение, который будет использоваться при сборе соответствующей информации с телефона.


Собранные данные

В строках 56-215код описывает метод с именем fillInFingerprint, который отвечает за получение соответствующих данных для отправки на веб-сайт TowelRoot, чтобы выяснить, можно ли рутировать устройство с помощью одноименного эксплойта. Этот метод широко использует вышеупомянутое fingerprintполе. Собранные данные следуют.

Модель устройства

Видимая модель устройства. Линии 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

Отпечаток пальца устройства

Уникальный идентификатор сборки ОС. Линии 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

Аппаратное обеспечение устройства

Скорее всего плата процессора. Линии 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

Серийный номер устройства

Уникальный серийный номер устройства. Линии 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

Версия ядра устройства

Жизненно важно, так как эксплойт, вероятно, был исправлен в последних ядрах. Линии 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

ПолотенцеКорневая версия

Линии 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

Строка modstring. Линии 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

Запрос сервера

В строках 227-329код описывает метод queryServer, который запрашивает базу данных сервера, чтобы найти совпадение с собранными данными, и обрабатывает возможные исключения в коде. Такие данные передаются на URL https://towelroot.appspot.com/report/через SSL и POST-запрос (строки 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

сделай это ra1n

Метод buttonClicked(lines 333-426) содержит код, который заставляет приложение работать, когда вы нажимаете кнопку. Среди прочего, он вызывает методы fillInFingerprintдля сбора необходимой информации и queryServerпроверки возможности рутирования устройства.

Затем он продолжает анализировать ответ сервера. Если указанный ответ пуст, TowelRoot подскажет вам о необходимости подключения к Интернету (строки 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

Если ответ не пустой, то TowelRoot продолжает проверку, соответствует ли указанное выше строке nyet(строкам 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

Если ответ равен nyet, то телефон официально не поддерживается.

Наконец, если ответ одновременно непустой и отличается от nyet, TowelRoot запускает процедуру рутирования, вызывая нативный метод rootTheShit, определенный в строке 448и, возможно, содержащийся внутри библиотеки libexploit.so.


Для смелых

TowelRoot включает специальный режим для пользователей с неподдерживаемыми устройствами. Этот режим, код которого определен внутри метода titleClicked(lines 451-504), доступен по нажатию на красный welcome to towelroot v3заголовок внутри приложения и позволит пользователю попробовать разные строки модов, чтобы в любом случае попытаться получить root права на устройство.