Por que Towelroot requer acesso à Internet / rede? -- rooting campo com root-access campo com security camp android Relacionado O problema

Why Does TowelRoot Require Internet / Network Access?


4
vote

problema

português

Eu li uma postagem de blog em algum lugar que sugeriu que Towelroot não precisa de acesso à Internet e também li que isso acontece. A versão mais recente que tentei correr Towelroot V3 não funcionará sem ela. É baixar ou enviar qualquer informação? Em caso afirmativo, o que?

Adendo: Suponho que se estivessem tentando realizar nada nefasto, eles apenas fariam isso em vez de pedir permissão ... certo?

english

I read a blog post somewhere that suggested TowelRoot does not need internet access, and I've also read that it does. The latest version I tried to run TowelRoot v3 will not work without it. Is it downloading or sending any information? If so, what?

Addendum: I suppose if they were trying to accomplish anything nefarious, they would just do it instead of asking for permission... right?

        
     
     

Lista de respostas

6
 
vote
vote
Melhor resposta
 

Desde o código de Towelroot não está disponível publicamente, recorri para descompilar o mais recente APK, baixado do Towelroot site , em a fim de investigar a necessidade do aplicativo para a permissão da Internet.


Notas relevantes

Após a descompilação bem sucedida, descobriu-se que nem as atividades nem o próprio código são ofuscadas. O desenvolvedor certamente havia antecipado que este aplicativo teria sido investigado, mas ele havia deixado o código para ser o mais transparente possível. O arquivo mais importante que temos neste ponto é TowelRoot.smali , que descreve todo o funcionamento deste aplicativo.

Nota: Dependendo da sua versão específica do APKTOOL, os números de linha podem variar.


Estrutura inicial

em linhas 13-22 , o código inicializa um campo chamado fingerprint . O código relevante segue:

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

Qual é uma lista Java composta de pares de valor chave, a ser usada ao coletar as informações relevantes do telefone.


dados coletados

em linhas 56-215 , o código descreve um método chamado fillInFingerprint , que é responsável por recuperar os dados apropriados a serem enviados para o site de towelroot, a fim de verificar se O dispositivo pode ser enraizado através da exploração homônima. Este método faz um uso extensivo do campo ABCDEFGHIJKLMNABCDEFGHIJKLMN4 . Os dados coletados segue.

modelo de dispositivo

O modelo de dispositivo visível. Linhas 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    

Dispositivo Fingerprint

Um identificador exclusivo para o sistema operacional. Linhas 83-93 :

  13-220   

hardware do dispositivo

Provável a placa do processador. Linhas 13-221 :

  13-222   

Device Serial

O número de série exclusivo do dispositivo. Linhas 13-223 :

  13-224   

Versão do kernel do dispositivo

Vital, uma vez que a exploração provavelmente terá sido corrigida nos recentes núcleos. Linhas 13-225 :

  13-226   

versão de towelroot

linhas 13-227 :

  13-228   

modstring

A string 13-229 . Linhas fingerprint0 :

  fingerprint1   

A solicitação do servidor

em linhas fingerprint2 O código descreve o método fingerprint3 , que consulta o banco de dados do servidor para encontrar uma correspondência com os dados coletados e lida com as possíveis exceções no código. Tais dados são transmitidos para o URL ABCDEFGHIJKLMNABCDEFGHIJKLMN24 via SSL e uma solicitação de postagem (linhas fingerprint5 ):

  fingerprint6   

Faça ra1n

O método fingerprint7 (linhas fingerprint8 ) contém o código que faz o aplicativo funcionar quando você apertar o botão. Entre outros, ele chama os métodos fingerprint9 para coletar as informações necessárias, e .field fingerprint:Ljava/util/List; .annotation system Ldalvik/annotation/Signature; value = { "Ljava/util/List", "<", "Lorg/apache/http/NameValuePair;", ">;" } .end annotation .end field 0 para ver se o dispositivo pode ser enraizado.

Ele continua analisando a resposta do servidor. Se a dita resposta estiver vazia, Towelroot solicita a necessidade de uma conexão com a Internet (linhas abcdefghijklmnAbcdefghijklmn31 ):

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

Se a resposta não estiver vazia, então Towelroot prossegue, verificando se o suprimento igual a a string .field fingerprint:Ljava/util/List; .annotation system Ldalvik/annotation/Signature; value = { "Ljava/util/List", "<", "Lorg/apache/http/NameValuePair;", ">;" } .end annotation .end field 3 (linhas abcdefghijklmn34 ):

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

Se a resposta é igual a .field fingerprint:Ljava/util/List; .annotation system Ldalvik/annotation/Signature; value = { "Ljava/util/List", "<", "Lorg/apache/http/NameValuePair;", ">;" } .end annotation .end field 6 , o telefone não é oficialmente suportado.

Finalmente, se a resposta for não vazia e diferente de abcdefghijklmn47 , Towelroot inicia o procedimento de root chamando o método nativo abcdefghijklmn48 , definido na linha .field fingerprint:Ljava/util/List; .annotation system Ldalvik/annotation/Signature; value = { "Ljava/util/List", "<", "Lorg/apache/http/NameValuePair;", ">;" } .end annotation .end field 9 e provavelmente contido por dentro A biblioteca 56-2150 .


Para os corajosos

Towelroot inclui um modo especial para usuários com dispositivos não suportados. Este modo, cujo código é definido dentro do método 56-2151 (linhas 56-2152 ), é acessível tocando o vermelho abcdefghijklmn43 título dentro do aplicativo, e permitirá que o usuário tente modulações diferentes para tentar enraizar o dispositivo de qualquer maneira.

 

Since TowelRoot's code is not publicly available, I resorted to decompile the latest APK, downloaded from the TowelRoot website, in order to investigate the app's need for the INTERNET permission.


Relevant notes

Upon successful decompilation, it turned out that neither the activities nor the code itself be obfuscated. The developer certainly had anticipated that this app would've been investigated, yet he had left the code to be as much transparent as possible. The most important file we have at this point is TowelRoot.smali, which describes all the workings of this app.

Note: depending on your particular version of ApkTool, the line numbers may vary.


Initial structure

In lines 13-22, the code initializes a field called fingerprint. The relevant code follows:

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

which is a Java list composed of key-value pairs, to be used when collecting the relevant info from the phone.


Data collected

In lines 56-215, the code describes a method called fillInFingerprint, which is responsible for retrieving the appropriate data to be sent to the TowelRoot website, in order to ascertain whether the device can be rooted via the homonymous exploit. This method makes an extensive use of the abovementioned fingerprint field. The collected data follows.

Device model

The visible device model. Lines 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 

Device fingerprint

An unique identifier for the OS build. Lines 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 

Device hardware

Likely the processor board. Lines 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 

Device serial

Device's unique serial number. Lines 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 

Device kernel version

Vital since the exploit is likely to have been patched in the recent kernels. Lines 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 

TowelRoot version

Lines 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

The string modstring. Lines 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 

The server request

In lines 227-329 the code describes the method queryServer, which queries the server's database in order to find a match with the collected data, and handles the possible exceptions in the code. Such data is transmitted to the URL https://towelroot.appspot.com/report/ via SSL and a POST request (lines 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 

make it ra1n

The method buttonClicked (lines 333-426) contains the code that makes the app work when you push the button. Amongst others, it calls the methods fillInFingerprint to gather the required info, and queryServer to see if the device can be rooted.

It then proceeds by analyzing the server's response. If said response is empty, TowelRoot prompts you about the necessity of an Internet connection (lines 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 

If the response is not empty, then TowelRoot proceeds by checking if the abovementioned equals the string nyet (lines 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 

If the response equals nyet, then the phone isn't officially supported.

Finally, if the response is both non-empty and different from nyet, TowelRoot starts the rooting procedure by calling the native method rootTheShit, defined at line 448 and probably contained inside the library libexploit.so.


For the brave ones

TowelRoot includes a special mode for users with unsupported devices. This mode, whose code is defined inside the method titleClicked (lines 451-504), is accessible by tapping the red welcome to towelroot v3 title inside the app, and will allow the user to try different modstrings in order to try to root the device anyway.

 
 
     
     

Perguntas relacionadas

6  Quão seguras são minhas senhas em serviço pós-venda?  ( How safe are my passwords at after sales service ) 
Meu telefone está atualmente inoperante. Samsung me pediu para largá-lo em um centro de reparo aprovado, que irá lidar com embarque e recepção de / para a Sam...

4  Por que meu telefone não precisa atualizar a senha?  ( Why my phone does not need to update the password ) 
Eu mudei minha senha do Gmail há um dia, mas meu telefone não exige que eu coloque no novo. Eu ainda posso acessar meu Gmail com a senha antiga. Por quê? te...

3  Como desativar a flag_secure sem root?  ( How to disable flag secure without root ) 
Acabei de perceber a única maneira de ignorar a segurança da captura de tela em determinados aplicativos é desativar este FLAG_SECURE , que como eu vejo pode...

6  OpenVPN com Android 2.3.x - Preocupações de segurança  ( Openvpn with android 2 3 x security concerns ) 
Eu preciso usar meu telefone Android 2.3.x para acessar um servidor OpenVPN. Eu tenho cm 7 com suporte em suporte para OpenVPN e TUN. Minha principal preocupa...

27  Meu telefone foi apenas roubado uma hora ou mais atrás. Existem opções para rastreamento?  ( My phone was just stolen an hour or so ago are there any options for tracking ) 
Eu percebo que este é um tiro longo, mas meu telefone foi perdido ou roubado há algumas horas. No momento em que foi roubado, eu não tinha nenhum aplicativo...

0  Por que o CM13 do OnePlus 2 redefine-se de ajuste pontos de padrão?  ( Why cm13 of oneplus 2 resets itself setting show pattern dots ) 
Eu descobri que CM perde muitas vezes sua configuração sobre a visibilidade dos pontos de segurança na tela de bloqueio. Isso é frustrante porque estou usando...

0  Como converter meu telefone no modo silencioso no modo geral automaticamente para um número de celular específico  ( How to convert my phone in silent mode into general mode automatically for speci ) 
Se meu celular estiver no modo silencioso e eu quero que meu telefone converte automaticamente o modo silencioso para o modo geral, recebendo chamada de númer...

11  Como sair remotamente todas as sessões do Gmail baseadas na Web do meu telefone Android  ( How to remotely log out all web based gmail sessions from my android phone ) 
Posso sair remotamente todas as sessões da Web do Gmail do meu telefone Android? Esta questão explica como fazer isso do site do Gmail com um navegador da...

0  Esqueci meu padrão de bloqueio, como faço para redefini-lo? [duplicado]  ( I forgot my lock pattern how do i reset it ) 
. Esta pergunta já tem respostas aqui : fechado 9 anos atrás . . Duplicado possível: Recupera...

0  "Sistema" está tentando acessar a Internet  ( System is trying to access internet ) 
Eu estou usando o OnePlus 3T, Android 9. Recentemente, eu instalei um aplicativo chamado "NorOot Firewall" para impedir que os aplicativos acessem a Internet....




© 2022 pergunte.org All Rights Reserved. Casa de perguntas e respostas todos os direitos reservados


Licensed under cc by-sa 3.0 with attribution required.