Servidor Público do Ancapistão on Nostr: Dica para adicionar um kill switch extremamente fiduciário no seu APK com ...
Dica para adicionar um kill switch extremamente fiduciário no seu APK com ofuscação.
Vamos supor que você seja um programador hobbyista e trabalhe em uma empresa onde existe uma função que é feita manualmente, mas você sabe que um aplicativo resolveria o problema completamente. Você desenvolve o aplicativo, mostra para todo mundo, todos gostam, e algum tempo depois você é demitido.
O que você faz? Adicione um kill switch!
Crie um repositório no seu GitHub com um nome aleatório. Nele, crie um arquivo JSON que será requisitado pelo kill switch do seu aplicativo.
A estrutura do JSON pode ser algo assim:
{
"status": "on"
}
Com isso, você já tem um kill switch remoto, onde "on" significa que o aplicativo está "online" e, se você mudar para "off", seu aplicativo será desativado.
No aplicativo:
Crie uma classe que fará uma requisição para o repositório que contém o JSON. Nela, você verificará se o campo "status" está como "on" ou "off". Se estiver "off", retorne false (ou true se estiver "on") para o kill switch.
O kill switch será um método que verificará se o status está "off". Se estiver, você criará um SharedPreferences para salvar o resultado do kill switch. Em vez de sempre verificar o repositório para ver se está "on" ou "off", você só verifica se o SharedPreferences está "off" e, nesse caso, mata o aplicativo.
Coloque esse kill switch no método onStart() da MainActivity, pois sempre que a MainActivity for iniciada, ela executará o código e poderá matar o aplicativo. Se o seu aplicativo tiver outras activities, quando o usuário retornar para a MainActivity, o onStart() será chamado novamente, executando o código.
Se o seu aplicativo tiver apenas a MainActivity, implemente a chamada do método em outros métodos importantes para o funcionamento do aplicativo.
Ofuscação:
Descompilar um APK Android é muito fácil, pois o bytecode é facilmente reversível. Portanto, você precisa usar o ProGuard para ofuscar seu APK. No entanto, o ProGuard não ofusca strings, já que elas são fundamentais para a funcionalidade do aplicativo.
Ofuscação de filho da puta:
Como você vai esconder a URL do seu repositório? E as strings "on" e "off" no código, se houver? Simples, meu caro catecúmeno: você substituirá qualquer string relacionada ao kill switch por um byte array. Isso mesmo, um fodendo byte array.
Crie um método decode() que pegará um byte array e o converterá em uma string (isso fará com que as strings continuem existindo, mas apenas durante a execução, e não no código fonte).
Converta a URL do seu repositório em um byte array para escondê-la. Você também pode usar outros métodos, como adicionar código inútil, separar a URL em vários byte arrays e depois criar um método para juntá-los, e assim por diante.
Dessa forma, mesmo que alguém use um decompiler para ver seu código ofuscado, ele não conseguirá encontrar (ou dificilmente irá conseguir encontrar) algo que remeta ao kill switch.
Infelizmente, essa forma de kill switch precisa de conexão com a internet, e pode ser facilmente contornada se alguém nunca conectar a internet quando usar seu app, nesse caso seja criativo, você já tem o norte.
E o melhor disso tudo? É tudo de grátis!
Vamos supor que você seja um programador hobbyista e trabalhe em uma empresa onde existe uma função que é feita manualmente, mas você sabe que um aplicativo resolveria o problema completamente. Você desenvolve o aplicativo, mostra para todo mundo, todos gostam, e algum tempo depois você é demitido.
O que você faz? Adicione um kill switch!
Crie um repositório no seu GitHub com um nome aleatório. Nele, crie um arquivo JSON que será requisitado pelo kill switch do seu aplicativo.
A estrutura do JSON pode ser algo assim:
{
"status": "on"
}
Com isso, você já tem um kill switch remoto, onde "on" significa que o aplicativo está "online" e, se você mudar para "off", seu aplicativo será desativado.
No aplicativo:
Crie uma classe que fará uma requisição para o repositório que contém o JSON. Nela, você verificará se o campo "status" está como "on" ou "off". Se estiver "off", retorne false (ou true se estiver "on") para o kill switch.
O kill switch será um método que verificará se o status está "off". Se estiver, você criará um SharedPreferences para salvar o resultado do kill switch. Em vez de sempre verificar o repositório para ver se está "on" ou "off", você só verifica se o SharedPreferences está "off" e, nesse caso, mata o aplicativo.
Coloque esse kill switch no método onStart() da MainActivity, pois sempre que a MainActivity for iniciada, ela executará o código e poderá matar o aplicativo. Se o seu aplicativo tiver outras activities, quando o usuário retornar para a MainActivity, o onStart() será chamado novamente, executando o código.
Se o seu aplicativo tiver apenas a MainActivity, implemente a chamada do método em outros métodos importantes para o funcionamento do aplicativo.
Ofuscação:
Descompilar um APK Android é muito fácil, pois o bytecode é facilmente reversível. Portanto, você precisa usar o ProGuard para ofuscar seu APK. No entanto, o ProGuard não ofusca strings, já que elas são fundamentais para a funcionalidade do aplicativo.
Ofuscação de filho da puta:
Como você vai esconder a URL do seu repositório? E as strings "on" e "off" no código, se houver? Simples, meu caro catecúmeno: você substituirá qualquer string relacionada ao kill switch por um byte array. Isso mesmo, um fodendo byte array.
Crie um método decode() que pegará um byte array e o converterá em uma string (isso fará com que as strings continuem existindo, mas apenas durante a execução, e não no código fonte).
Converta a URL do seu repositório em um byte array para escondê-la. Você também pode usar outros métodos, como adicionar código inútil, separar a URL em vários byte arrays e depois criar um método para juntá-los, e assim por diante.
Dessa forma, mesmo que alguém use um decompiler para ver seu código ofuscado, ele não conseguirá encontrar (ou dificilmente irá conseguir encontrar) algo que remeta ao kill switch.
Infelizmente, essa forma de kill switch precisa de conexão com a internet, e pode ser facilmente contornada se alguém nunca conectar a internet quando usar seu app, nesse caso seja criativo, você já tem o norte.
E o melhor disso tudo? É tudo de grátis!