Detectando Root e Jail Broken no seu aplicativo React Native

starkdev

Emerson Stark

Posted on December 29, 2021

Detectando Root e Jail Broken no seu aplicativo React Native

O que é root e jail-broken?

root

Fazer o root no seu aparelho significa se tornar um superusuário, ou administrador do sistema. Isso implica ter acesso a partes do Android que antes ficavam inacessíveis para um usuário comum. Sim, a grande vantagem é ganhar controle total do seu celular e do seu sistema operacional

jail-broken

O jailbreak é uma alteração, um hack, no sistema que permite ao usuário adentrar a raiz do equipamento, tendo acesso a todos os arquivos do iOS. Em termos práticos, isso significa poder personalizar e instalar apps livremente, sem depender da loja oficial da Apple.

Porque devo me preocupar com isso?

Uma aplicação sendo executada em um dispositivo com os privilégios do usuário root ou jail broken acessíveis pode ter seu fluxo de execução modificado por outro processo sendo executado no mesmo dispositivo.

Um usuário malicioso pode monitorar as suas requisições, extrair dados salvos no storage do dispositivo, entre outras ações.

Mas bora resolver isso!
Image description

O que faz o jail-monkey?

  • Identifica se o telefone tem acesso a root ou jail-broken.
  • Detecta se o dispositivo possui localização mockada ( Eu sei que você usou isso no jogo Pokemon GO 😏).
  • Detecta se o aplicativo está rodando em um SD Card.

Chega de blá blá blá e bora colocar a mão no código.

Image description

Vamos iniciar um projeto utilizando o React Native CLI.

 react-native init myApp
 ou
 npx react-native init myApp
Enter fullscreen mode Exit fullscreen mode

Vamos rodar nossa aplicação em um emulador

// para executar em um dispositivo android
yarn android

// para ios
yarn ios
Enter fullscreen mode Exit fullscreen mode

Se deu tudo certo no processo de build, você verá algo como:

Image description

Até agora, nós criamos nosso app e conseguimos rodar ele no nosso dispositivo/ emulador.

Se você fechar o aplicativo e clicar no ícone na tela inicial do dispositivo, você verá que o projeto vai startar normalmente.

Agora vamos adicionar a biblioteca do Jail-monkey no projeto.

// para instalar usando npm
npm i jail-monkey --save

// usando yarn
yarn add jail-monkey
Enter fullscreen mode Exit fullscreen mode

Feito isso, vamos linkar a biblioteca no nosso projeto.

OBS: Você só precisa rodar este comando caso esteja utilizando uma versão do react native < 0.60.0

react-native link 
Enter fullscreen mode Exit fullscreen mode

Em seguida, faça um novo build do seu projeto.

yarn android
ou
yarn ios 
Enter fullscreen mode Exit fullscreen mode

Beleza, agora nós temos tudo instalado no projeto.

Vamos configurar a biblioteca agora no nosso aplicativo, para isso, vá até o seu arquivo principal do seu projeto ( no nosso caso é o App.js da raiz do projeto ) e adicione o seguinte código.

Image description

Vamos ver o que fizermos:

  1. importamos o BackHandler do próprio React Native para usarmos a função ExitApp.
  2. importamos a biblioteca do jail-monkey
  3. criamos uma condição utilizando uma função que retorna se o dispositivo possui root/ jail-broken e fechamos a aplicação.

Ps: No passo 3, você poderia simplesmente criar um modal bonitinho explicando que o usuário não possui a segurança necessária para utilizar a nossa aplicação, fica com uma usabilidade bem melhor ☺️.

Depois de tudo isso, se você salvar o código, fechar o app e tentar abrir em um emulador android, automaticamente a sua aplicação fechará, isto é por conta do emulador android possuir root nativamente, mas se você testar em um dispositivo fisico, a sua aplicação irá funcionar normalmente.

Além do exemplo que criamos acima, você pode explorar um pouco dos recursos do jail-monkey e adicionar de acordo com a sua necessidade.

Alguns metodos da API do Jail-monkey

Method Returns Description
isJailBroken boolean is this device jail-broken/rooted.
canMockLocation boolean Can this device fake its GPS location.
trustFall boolean Checks if the device violates either isJailBroken or canMockLocation.
isDebuggedMode Promise<boolean> Is the application is running in debug mode. Note that this method returns a Promise.

Bom, por hoje é isso, espero que ajude vocês a melhorar a segurança dos aplicativos em React Native.

Valeu

💖 💪 🙅 🚩
starkdev
Emerson Stark

Posted on December 29, 2021

Join Our Newsletter. No Spam, Only the good stuff.

Sign up to receive the latest update from our blog.

Related