Por que precisamos de um telefone raiz para capturar capturas de tela em versões mais antigas do Android?

21

Sei que, para capturar capturas de tela do meu telefone, todos os aplicativos de captura de tela exigem que eu tenha um telefone root. Porque isto é assim? Por que não podemos ter um aplicativo de captura de tela simples para Android, assim como temos para Windows?

Cheok Yan Cheng
fonte
2
Eu sempre achei interessante que o iPhone implementasse esse recurso imediatamente, enquanto é um caso importante para ativar no Android.
shambleh
1
Observe que, desde aproximadamente o Android 4.0, é possível tirar uma captura de tela pressionando os botões Volume Down + Power; este é out-of-the-box funcionalidade, há aplicativos necessários (notado aqui para a posteridade e os motores de busca)
Piskvor

Respostas:

17

A resposta é bastante simples, é uma questão de permissões.

O Android usa o que é chamado de buffer de estrutura para a exibição do vídeo. O framebuffer está localizado em / dev / graphics / fb0. esse "arquivo", que é basicamente um fluxo no qual o dispositivo grava quando ocorrem alterações na interface do usuário, contém ~ 2 quadros da exibição na tela.

As permissões no arquivo framebuffer são rw- rw- ---. Observe que o último "grupo" possui 3 "-" 's. Isso significa basicamente que, se você não é o owner(que é root), não tem permissão para ler esse arquivo.

Se houvesse um aplicativo instalado no sistema, que pudesse fazer capturas de tela, ele teria permissão para ler no framebuffer. Creio que é assim que o Motorola Xoom é capaz de tirar screenshots. Possui um aplicativo instalado no dispositivo, como um aplicativo do sistema.

Ler o buffer de quadros, para um desenvolvedor, é realmente simples, se eles tiverem acesso para lê-lo.

Ryan Conrad
fonte
1
Parece que o Google deve atualizar as permissões para r--. Isso pode criar um risco de segurança se qualquer aplicativo puder espionar sua tela, mas não seria apenas uma das permissões ( este aplicativo pode monitorar sua tela ) que você deve aceitar antes de instalar? Isso ou o Google deve adicionar uma captura de tela integrada no menu suspenso, para que ninguém mais acesse. Este último pode ser o meu caso, quero dizer que agora eles estão adicionando uma visualização de impressão ao Chrome.
JD Isaacks
3
Acho que o mod of o + r seria uma preocupação de segurança se qualquer aplicativo de mercado pudesse ler a tela.
kzh
Eu acho que depende. O sistema operacional Windows não impede que os aplicativos realizem sua captura de tela. Até agora, ouvimos algum problema de segurança causado por uma captura de tela?
Cheok Yan Cheng
Não é necessário fazer capturas de tela no Windows, existem maneiras muito mais fáceis de obter dados de uma máquina Windows. O celular, penso eu, é uma preocupação maior. Pense em aplicativos como o Square, que processa cartões de crédito. Se eu escrevesse um serviço que ouviu quando o cartão foi fraudado, eu poderia possível fazer uma captura de tela e informações de tração, como número de cartão de crédito, nome, etc.
Ryan Conrad
7

Devido ao foco de segurança do Android em separar todos os aplicativos dos dados uns dos outros, para impedir que aplicativos maliciosos roubem ou alterem dados em aplicativos confiáveis, eles não podem permitir que um aplicativo faça capturas de tela de outros aplicativos.

Pense em quantos aplicativos são capazes de fazer coisas como OCR para traduzir imagens em texto. Posso pensar em pelo menos quatro aplicativos no meu telefone que podem fazer isso. O principal exemplo são os títulos de livros do Google Goggles OCRing, e também OCRing e, em seguida, tradução de blocos de texto em idiomas estrangeiros. Agora pense em quantos aplicativos colocam texto na tela que você não deseja que um aplicativo não confiável veja. Eu tenho um aplicativo de banco de dados de senha no meu telefone com um banco de dados criptografado de minhas senhas para vários sistemas, um aplicativo de proteção de tela malicioso pode esperar até que o aplicativo de senha seja executado, tire uma foto da tela com os detalhes de login, depois faça o OCR e envie-os. Também pode fazer o mesmo para tudo na sua lista de contatos, mesmo se você não der permissão ao aplicativo para o banco de dados de contatos ou o histórico do navegador, ou registros de bate-papo e assim por diante. Essa é apenas uma maneira de abusar do acesso à sua tela.

É por isso que, para que a captura de tela seja universal, ela precisa estar no sistema operacional (no qual você já confia com todos os seus dados). É por isso que nos telefones que possuem a função de captura de tela embutida, ela foi adicionada como parte do sistema, não como um aplicativo separado.

Se você torcer o telefone e permitir que um aplicativo faça capturas de tela, estará efetivamente dizendo que confia implicitamente nesse aplicativo para poder fazer tudo o que o sistema pode fazer, incluindo acessar e interferir em outros aplicativos e seus dados, e que você confie totalmente para não abusar desse acesso. Isso não é algo que o Android permita que algo, exceto o Sistema / SO, faça.

GAThrawn
fonte
6

Resposta curta: como 1) os computadores são complicados e 2) a funcionalidade da captura de tela não é realmente muito simples (para o programador, não para o usuário).

Em outras palavras, fazer uma captura de tela requer que o processo de captura de tela se encaixe profundamente nos componentes internos do sistema operacional, mexa um pouco com eles e solte novamente. Como o Android tenta ter um modelo de segurança interno (em oposição ao "pensamento tardio" visto no Windows), faça uma captura de tela em várias barreiras de segurança. Eles podem ser contornados, mas a única maneira prática atualmente (exceto criar buracos - e possíveis vulnerabilidades - no kernel) é usar a conta raiz todo-poderosa, que não está sujeita às limitações.

Piskvor
fonte
1
Não sei muito sobre o hardware do computador, mas presumo que a GPU envie uma "imagem" para a tela. Essa imagem não pode ser interceptada e salva?
JD Isaacks
2
@ John Isaacks, é basicamente o que acontece com o framebuffer. veja minha resposta sobre por que ainda requer raiz.
Ryan Conrad