No Android 6, como negar uma permissão de aplicativo para acessar a rede?

30

No Android 6, o usuário tem (finalmente!) A possibilidade de aprovar ou negar permissões específicas a um aplicativo.

No entanto, não consegui encontrar uma maneira de aprovar ou negar o acesso à rede, por Wi-Fi ou por conexão de dados de celular. A permissão relevante aparece em "Outros recursos do aplicativo" e é apenas informativa - aparentemente não há como alterá-la.

Aqui está um exemplo com o aplicativo Chess Free:

captura de tela

dr01
fonte
4
Você não pode. Deixe-me encontrar uma fonte confiável, mas você não pode fazê-lo nativamente, pois isso prejudicaria muito os interesses do Google (ou seja, anúncios). Edit: Você acharia este artigo interessante: androidpolice.com/2015/06/06/…
Firelord

Respostas:

27

Você não será capaz de obter sucesso através do mecanismo nativo do Android.

Cody Toombs, da Polícia Android, apontou isso muito bem no artigo: O Android M nunca pedirá permissão aos usuários para usar a Internet, e isso provavelmente está correto .

Na seção Permissões normais e perigosas do documento Visão geral das permissões , o Google observou:

As permissões são divididas em vários níveis de proteção.

Existem dois níveis de proteção que afetam os aplicativos de terceiros: permissões normais e perigosas.

  • Permissões normais cobrem áreas em que seu aplicativo precisa acessar dados ou recursos fora da área restrita, mas há muito pouco risco para a privacidade do usuário ou a operação de outros aplicativos . Por exemplo, a permissão para definir o fuso horário é uma permissão normal.

    Se um aplicativo declarar em seu manifesto que precisa de uma permissão normal, o sistema concede automaticamente a permissão ao aplicativo no momento da instalação. O sistema não solicita que o usuário conceda permissões normais e os usuários não podem revogar essas permissões.

  • Permissões perigosas cobrem áreas nas quais o aplicativo deseja dados ou recursos que envolvam as informações particulares do usuário ou que possam afetar os dados armazenados do usuário ou a operação de outros aplicativos. Por exemplo, a capacidade de ler os contatos do usuário é uma permissão perigosa. Se um aplicativo declarar que precisa de uma permissão perigosa, o usuário deverá conceder explicitamente a permissão ao aplicativo.

(Ênfase minha)

Surpreendente ou não, as seguintes permissões estão na lista de Permissões normais :

  • CHANGE_NETWORK_STATE - permite que os aplicativos alterem o estado da conectividade da rede - isto é, dados móveis;
  • CHANGE_WIFI_STATE - permite que os aplicativos alterem o estado da conectividade Wi-Fi;
  • INTERNET - permite que aplicativos abram soquetes de rede.

Se isso não for suficiente, confira as permissões gerenciadas pelo AppOps aqui . Se você não encontrar sua permissão listada lá, não poderá fazer nada na GUI.

Como os métodos alternativos já são extensivamente abordados neste site, consulte:

Senhor do Fogo
fonte
12
Obrigado pela sua resposta. É decepcionante quando os recursos são prejudicados, não por impossibilidade técnica, mas por razões de mercado.
dr01 28/02
25

Você pode usar o NetGuard (consulte minha lista de Firewalls da Internet para outras alternativas), que funciona sem raiz e permite bloquear o acesso à Internet para aplicativos seletivamente (WiFi ou dados móveis, e mesmo sempre ou apenas se a tela estiver desligada). É do desenvolvedor do XPrivacy, então tem que ser bom;)

Netguard Netguard Netguard
NetGuard (fonte: Google Play ; clique nas imagens para obter variantes maiores)

O NetGuard é de código aberto, então você também pode encontrá-lo no F-Droid .

Atualização: observe que as versões recentes do Netguard incluem o Google Ads e o Firebase Analytics - duas coisas que IMHO não tem nenhum negócio em um aplicativo de firewall (ou qualquer outra segurança) -, o que provavelmente é o motivo pelo qual não é mais atualizado no F-Droid repositório oficial (ainda disponível na mina com os avisos apropriados).

Izzy
fonte
11
A variante F-Droid do NetGuard realmente adicionou funcionalidade além da permitida na Play Store.
andDevW 24/05
Ele pode bloquear anúncios no aplicativo?
Jogador Imortal
11
@ImmortalPlayer se um aplicativo tiver acesso negado à rede, ele também não poderá carregar anúncios. Portanto, a resposta para isso seria "sim".
Izzy
3

O acesso à Internet não pode ser negado para aplicativos individuais no Android nativamente. Os anúncios são as principais fontes de receita do Google.

No entanto, se você estiver usando o Opera Max, poderá restringir o acesso à Internet a aplicativos individuais. Você pode até salvar dados, graças à tecnologia de compactação do Opera.

Instale o Opera Max na Play Store. É totalmente gratuito e fácil de usar. Nenhuma raiz é necessária.

NVZ
fonte
Atualização : não é mais fã do Opera Max depois que eles começaram a exibir muitos anúncios.
NVZ 12/01
3

À luz de alguns eventos recentes , eu gostaria de melhorar esta questão apresentando o Triangle pelo Google. Baixe-o no APKMirror ou APKPure e instale-o com o ADB .

Aqui estão alguns dos principais recursos.

Dados móveis usados Peça para permitir dados para aplicativos bloqueados Desligue quando estiver no Wi-Fi Bloquear tudo por padrão

Não é uma VPN, ele bloqueia localmente o acesso de seus aplicativos à Internet. Pense nisso como uma nova permissão, assim como usar a câmera ou ter acesso à sua localização.

NatoBoram
fonte
11
Isso usa uma VPN / proxy como aplicativos semelhantes? Ele bloqueia o acesso de bibliotecas nativas?
Hackel
11
@ hackel eu o instalei (tive que carregar de lado, pois não estava disponível no meu país). Ele me pediu para ativar uma VPN. Também não parece bloquear WIFI.
Bort
3

Preâmbulo

Pode ser tarde, mas desejo acrescentar minha opinião à sua pergunta, por uma questão de exaustividade. Esta resposta é uma maneira infalível de bloquear o acesso à Internet em um aplicativo. As desvantagens? Ele não bloqueia Intents, é complicado e pode causar falha no aplicativo de destino e requer privilégios de root .

Foi testado e confirmado para funcionar com o Android 7.1.2.


Fundamentação

Conforme mencionado pelos outros respondentes, qualquer aplicativo que deseje acessar a Internet deve declarar a android.permission.INTERNETpermissão inegável dentro dele AndroidManifest.xml. Como o Android se lembra de quais permissões um aplicativo solicitou? Salvando-os dentro packages.xml, um arquivo protegido localizado em /data/system.

Escusado será dizer que alguém como nós pode estar interessado em editar o referido arquivo, com o objetivo de adicionar ou remover uma permissão, desde que eles tenham privilégios de root. Esta é a nossa maneira de negar o acesso à Internet a um aplicativo sem VPNs ou software de firewall.


O packages.xmlarquivo

O packages.xmlarquivo lista todos os aplicativos instalados, juntamente com seus caminhos e permissões. Cada aplicativo é colocado entre as <package></package>tags; por uma questão de resposta, direcionarei o Nova Launcher da TeslaCoil. A estrofe do aplicativo no arquivo é a seguinte:

    <package name="com.teslacoilsw.launcher" codePath="/data/app/com.teslacoilsw.launcher-1" nativeLibraryPath="/data/app/com.teslacoilsw.launcher-1/lib" publicFlags="944258628" privateFlags="0" ft="16075caace8" it="16075cac965" ut="16075cac965" version="53000" userId="10083" installer="com.android.packageinstaller">
        <sigs count="1">
            <cert index="7" key="3082034d30820235a0030201020204638fbad3300d06092a864886f70d01010b05003057315530530603550403134c726f636b7a35353535204f553d44726f69642046726565646f6d20556e6974204f3d44726f69642046726565646f6d20496e63204c3d556e6b6e6f776e20533d556e6b6e6f776e20433d4c4b301e170d3134313230353030343535375a170d3434313132373030343535375a3057315530530603550403134c726f636b7a35353535204f553d44726f69642046726565646f6d20556e6974204f3d44726f69642046726565646f6d20496e63204c3d556e6b6e6f776e20533d556e6b6e6f776e20433d4c4b30820122300d06092a864886f70d01010105000382010f003082010a0282010100818b312365be3e55f48989d43468880067464eca65aa3ba73305178311fc2a053c143182f6d2ea635b57dc327adf8a5a9b763c03f0a48c38530114e6979358d6bfca37d161ca6fe8bb0d80f061d7b67bc1456cdfc38e0cda2ebd05c48113f701140950f0fe4315de6b95c7504129abb2c1a61f1e4f1229fb83f474dbcd7dc957b84a1b8a2aa0157b223609d77980a3f579c93fbb24a6f9fbb5a8e207cccdf1add616c95c732d5c114c0168fdbd9c00ddf211c2b8886b9498a34f389025802e334f404b7e4eb75f6308f086e5bdac64db10053c7ff8d21a350b941d5394ffbe2bd037139134eb065c2317625e65d3f628aecf7965a0d70b02e68aa8371efd1fe50203010001a321301f301d0603551d0e04160414a4e66b693ecdf3241883e3eed668354e1531ba11300d06092a864886f70d01010b050003820101003992f3f461a290db767911a4a519f035fe0c34e597e2fba2e31371e260bd2fc8f9a93c35e6f06553d02588d2f8453ee784d2ba09a696e66304e3e01f7c6bdf5b2747fc73f79d00379cc94eefa542c8eb308318364df2fa1a9c6a7ef0669d08f7b1f8635d0d4331e2817d5aeb0854760116c29801cf915ef67d5c0e04861cad4fa7b96fe8f9a0baf0cda649cd35a7122142ba38b2d16d9d319a8604a41fe0025d89be87f84ce8fc080ab54c76a96f3d9b70b1a5f5e18e48768e3684bca8a950665e16a6d50cf0045949baebca876d55eeba52ea421f33009872d9d654f8f8caa1bb465d754694d4bf6cb92f3299fbec3781849b37e6ba23ffe3d6c20ecb9bc65d" />
        </sigs>
        <perms>
            <item name="com.android.launcher3.permission.READ_SETTINGS" granted="true" flags="0" />
            <item name="com.google.android.c2dm.permission.RECEIVE" granted="true" flags="0" />
            <item name="com.teslacoilsw.launcher.permission.C2D_MESSAGE" granted="true" flags="0" />
            <item name="android.permission.EXPAND_STATUS_BAR" granted="true" flags="0" />
            <item name="android.permission.WRITE_MEDIA_STORAGE" granted="true" flags="0" />
            <item name="android.permission.INTERNET" granted="true" flags="0" />
            <item name="android.permission.ACCESS_NETWORK_STATE" granted="true" flags="0" />
            <item name="android.permission.SET_WALLPAPER" granted="true" flags="0" />
            <item name="android.permission.SET_WALLPAPER_HINTS" granted="true" flags="0" />
            <item name="android.permission.VIBRATE" granted="true" flags="0" />
            <item name="android.permission.ACCESS_WIFI_STATE" granted="true" flags="0" />
            <item name="android.permission.WAKE_LOCK" granted="true" flags="0" />
        </perms>
        <proper-signing-keyset identifier="10" />
    </package>

O recuo é relatado literalmente a partir do arquivo.


Procedimento

Armado com o conhecimento acima, podemos agora examinar as permissões do Nova Launcher, agrupadas entre elas <perms></perms>. Em breve, encontraremos o único que precisamos editar:

            <item name="android.permission.INTERNET" granted="true" flags="0" />

Para negar efetivamente o acesso à Internet ao aplicativo, basta excluir a linha inteira e reiniciar o dispositivo. Comentar para uso futuro é inútil: o Android examina esse arquivo a cada inicialização e limpa seus comentários .


Desvantagens

Após este procedimento, você cria um aplicativo que não consegue se comunicar com a Internet de nenhuma maneira. No entanto, aplicativos e software mal codificados destinados ao Marshmallow e acima podem travar ao tentar se conectar à Internet , como Nova.

Além disso, como indicado pelo Firelord, a atualização de um aplicativo faz com que as alterações sejam revertidas, anulando efetivamente nossos esforços e exigindo que a permissão seja excluída novamente.


Alterando este procedimento

Para reverter o que fizemos acima, basta adicionar a permissão que excluímos novamente entre as outras e reiniciar o dispositivo.


aviso Legal

Não sou de forma alguma afiliado ao Nova Launcher ou a seus desenvolvedores.

Vendedor da máscara da morte
fonte