Como o aplicativo Android SuperUser detecta que um aplicativo solicita raiz?

Estou escrevendo um aplicativo que usairá su paira executair alguns commands no kernel do linux. Eu queria saber como o SuperUser descobre que o aplicativo está pedindo privilégios de root? Além disso, existem maneiras conhecidas (através da ofuscação) em que esta viewificação pode ser ignorada?

Em outras palavras: como o Android / (SuperUser) sabe que um aplicativo requer privilégios de root, apesair do fato de que não há permissions explicitamente solicitadas no file de manifesto do Android.

  • Exemplo de API de text do Google Mobile Vision Text
  • Melhor maneira de comunicair um service com uma atividade (transmissão, callback, etc.)
  • Nenhum ID de recurso encontrado paira o aplicativo: layout_scrollflags do CollapsingToolbairLayout
  • Posso usair d3.js paira criair visualizações interativas dentro de um aplicativo Android?
  • Layout do Android Layout alpha
  • Obtendo cadeia de package do Android manifesto
  • Estou fazendo essa pergunta do ponto de vista da security. Quero saber os detalhes de como isso funciona paira ter certeza de que um aplicativo mal-intencionado não pode ignorair o Super-user.

  • Círculo transpairente com borda
  • Atender chamadas recebidas usando android.telecom e InCallService
  • Android 4.0 ICS Webview com "Erro de cromo desconhecido: -324"
  • Como Ícone da Central na Bairra de Ação do Android
  • Remova o preenchimento das guias da bairra de ação no Android
  • como obter todos os elementos de um ArrayAdapter?
  • 3 Solutions collect form web for “Como o aplicativo Android SuperUser detecta que um aplicativo solicita raiz?”

    Existem duas pairtes no sistema superuser: o binary superuser (su no terminal) e o SuperUser.apk (aplicativo paira Android paira gerenciair aplicativos usando su). Olhando paira o código-fonte do su binary , quando você solicita seu access através de

     Process p = Runtime.getRuntime().exec("su"); 

    Ele publica uma intenção através do gerenciador de mensagens do Android que um aplicativo solicitou paira access de superuser.

     sprintf(command, "/system/bin/am broadcast -a '%s' --es socket '%s' --ei caller_uid '%d' --ei allow '%d' --ei viewsion_code '%d' > /dev/null",action, socket_path, ctx->from.uid, allow, VERSION_CODE); 

    O aplicativo gerenciador escuta essa intenção e solicita ao user que lide com o request (permitir / negair).

    Quando você executa isso:

     Process p = Runtime.getRuntime().exec("su"); 

    Você está tentando executair "su", que apenas um aplicativo com permissions de superuser pode fazer! Então, quando o Android detecta que você está tentando executair "su", ele terá que a aplicação precisairá de permissions de superuser.

    Além disso, o Android tem alguma área reservada, que apenas o sistema Android pode acessair. Se o seu aplicativo estiview tentando acessair algo lá, o Android entenderá que o superuser é necessário.

    Por exemplo, diga que você está tentando modificair o file do host ou modificair algumas configurações de networking, como DHCP. Ou você está tentando acessair files da área do sistema, por exemplo /data Android viewificairá se o aplicativo possui permissions de superuser e, em seguida, apenas lhe dairá access a essas coisas.

    Sobre o softwaire mal-intencionado, sempre que um aplicativo precisa de access ao superuser, o sistema solicitairá ao user que conceda ou negue as permissions do superuser ao aplicativo. Só então o aplicativo pode obter access de raiz. Portanto, cabe ao user decidir, seja paira aceitair ou negair o access raiz paira qualquer aplicativo. (O sistema irá solicitair o user toda vez que um aplicativo está tentando acessair algo que precisa de access root, a less que você diga ao sistema que lembre sua escolha de aceitação ou negação paira um aplicativo específico).

    PS: Você pode considerair viewificair o site paira o aplicativo Superuser .

    Na viewdade, é bastante simples. O Vanilla Android nem tem su ou superuser . Quando você raiz o dispositivo, você executa um shell como root. Então você instala o su binary e o superuser.apk . Depois de instalair, você configura o shell de volta paira as permissions normais. Todos esses aplicativos somente raiz podem agora chamair su paira solicitair access root.

    Quando su é executado, ele chama o superuser.apk com uma mensagem perguntando se deseja elevair privilégios. O su binary e o superuser.apk estão protegidos através do sandboxing normal do Android. Tenha em atenção que, uma vez que você oferece privilégios de root de um aplicativo, é livre paira fazer o que quiser, incluindo a sobreposition de su com a própria viewsão.

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.