Detalhes do Aplicativo
Nome: Chrome
Pacote: com.givemountaintnk
SHA-256 Hash: a610ed6f7e7257d7abd396cc8906d35dccde0bd7a205a90a95b2de52df3efc1f
Introdução
Bem-vindo à sexta parte da nossa Série de Malware Móvel, dedicada a desmembrar as ameaças mais recentes e fortalecer suas defesas cibernéticas. Nesta edição, voltamos nosso foco para a versão mais recente do malware Xenomorph. Este artigo navega pelas complexidades de lidar com código obfuscado, fornecendo insights sobre como descobrir o carregamento dinâmico da carga maliciosa original através de nossa análise detalhada.
Adicionalmente, exploramos a tarefa crucial de identificar a página overlay do malware – um elemento chave empregado para fins de phishing.
Análise
Aqui está o primeiro check de análise por VirusTotal

Verificação no VirusTotal
Agora, vamos abrir este exemplo em JADX e começar a analisar seu arquivo Manifest para aprender mais sobre suas permissões e componentes.
Android Manifest.xml
Quando passamos pelos tags de Permissão, podemos ver as permissões padrão como android.permission.READ_SMS, android.permission.WAKE_LOCK, android.permission.SEND_SMS e muito mais. As coisas ficam ainda mais interessantes quando olhamos para os componentes.
O motivo pelo qual é interessante é que literalmente cada componente definido no arquivo Manifest não está presente no disco (ou APK), o que provavelmente significa que eles estão sendo carregados dinamicamente.
Mas felizmente temos uma Subclasse de Aplicativo que está presente no APK para começarmos nossa análise.
Agora, algumas pessoas podem perguntar por que a subclasse de aplicativo é importante e por que estamos iniciando a análise a partir dessa classe. Iniciar a análise a partir da subclasse de aplicativo é crucial porque ela serve como o ponto de entrada e centro de um aplicativo, influenciando sua estrutura geral e comportamento.
Então vamos começar nossa análise a partir da própria Classe do Aplicativo.
Classe:com/great/sail/RIdTkEzPiQsTqYiZwGcRgIjXzKeJbJoSoAeUkOe

Isto não parece bom, pois as variáveis e strings estão escondidas/obfuscadas pelos autores do malware. Particularmente se olharmos para a definição da função, podemos ver que a maioria das linhas é código morto. Para contrariar isso, vamos usar uma ferramenta de desobstrução chamada Simplify. Simplify funciona executando virtualmente um aplicativo e então tentando otimizar o código para que ele se comporte da mesma forma, mas seja mais fácil para humanos entenderem. Simplify pode ser usado para:
- Descriptografar strings
- Remover reflexão
- Renomear métodos e classes
- Remover código não utilizado
- Simplificar código complexo
Depois de configurar esta ferramenta, podemos usá-la nesta classe.
Aqui está o comando,
java -jar simplify-1.3.0.jar -it 'com/great/sail/RIdTkEzPiQsTqYiZwGcRgIjXzKeJbJoSoAeUkOe' ChromeBrowser.apk
Toma cerca de 5-6 minutos para terminar o processo. Depois que o processo é concluído, obteremos um novo APK chamado ChromeBrowser_simple.apk. O APK agora terá as strings em um formato não obfuscado e legível.

Agora que superamos esta barreira, vamos começar nossa análise a partir de attachBaseContext(). Enquanto attachBaseContext() é geralmente tratado internamente pelo Android framework, os desenvolvedores podem sobrescrever este método para propósitos específicos. Por exemplo, sobrescrever attachBaseContext() permite aos desenvolvedores personalizar a hierarquia do contexto ou realizar tarefas de inicialização personalizada antes que o componente seja totalmente inicializado.
Agora que superamos essa barreira, vamos começar nossa análise a partir de attachBaseContext().

RIdTkEzPiQsTqYiZwGcRgIjXzKeJbJoSoAeUkOe.attachBaseContext()
Pudemos ver muitos códigos mortos. No entanto, entre esses códigos mortos, vimos funções como getAbsolutePath(), new File() e se verificarmos a função stocktrim(), podemos ver a seguinte base de código.

RIdTkEzPiQsTqYiZwGcRgIjXzKeJbJoSoAeUkOe.stocktrim()
Um arquivo do diretório assets está sendo copiado na localização especificada pela variável szPathSrcApk. Se verificarmos as referências para a variável PHmBeUkOoMpLlWqLoKrQbSfJfWeTrBsMbJfKzXpTaRoImBjFrKs, vemos que ela especifica um arquivo chamado plMHAd.json. Isso pode ser o DEX File que contém código para os outros componentes.
No entanto, infelizmente, esse arquivo está vazio.
Como não conseguimos encontrar nenhuma informação sobre a carga de DEX via maneira estática, vamos tentar usando Medusa. Medusa é um quadro de instrumentação binária baseado em Frida que facilita a análise dinâmica de aplicativos Android e iOS. É projetado para automatizar vários processos e técnicas comumente empregadas durante o teste de segurança de aplicações móveis, permitindo aos pesquisadores e desenvolvedores de segurança avaliar eficientemente a postura de segurança de suas aplicações.

Haa Yess!! Encontramos nosso arquivo DEX com o nome clknyuynpsrmkt na pasta cache deste aplicativo em nosso emulador, e também pudemos ver chamadas sendo feitas para classes como p095k, p071e, que são os componentes ausentes desta amostra. Vamos pegá-lo e analisar.
No entanto, ainda há uma questão que precisa ser respondida - Qual código é responsável pela criação do arquivo DEX em nosso dispositivo, já que não temos nenhuma chamada de função DexClassLoader no nosso APK? Foi quando nossa atenção se voltou para o código nativo/JNI.
Então abrimos a biblioteca no Ghidra e demos tempo para descompilar as strings. Depois de algum tempo, as strings começaram a parecer assim,

Pudemos ver o nome do arquivo (clknyuynpsrmkt) que está realmente localizado na pasta res/raw. Indo mais fundo nesta biblioteca nativa, pudemos ver strings como ClassLoader, e FileInputStream sendo passados para CallObjectMethod.
Agora que esclarecemos nossa dúvida, vamos continuar analisando o arquivo DEX clknyuynpsrmkt.
Vamos começar do Main Activity (p068r.java)

Se verificarmos Cfor.ifdf, vemos que seu valor é definido por Cbreak.fddo("f4e1bcad72fdddbe26"). Vamos abrir nosso IDE e decodificar isso.
Aqui está o link para o código: JDoodle
Agora podemos dizer que Cbreak.fddo("f4e1bcad72fdddbe26") decodifica como pittsep12.
Dica: É sempre melhor renomear variáveis e funções para algo com o qual possamos nos relacionar. Como neste caso, poderíamos renomear Cfor.ifdf como mw_str_pittsep12. Isso também indica que analisamos aquela variável ou função específica.
Da mesma forma,
Cthrow.m163this e Cthrow.m158case realizam operações de escrita e leitura em uma preferência compartilhada, respectivamente.
No entanto, um ponto a notar é que a função Cgoto.sartjsrtfjsrfjtsrtjgfhe registra um receptor p031d.
Ao olhar para a função y, ela por sua vez chama a função z, que contém o seguinte código.
fddo.Cgoto.z()
Se pularmos o bloco inicial de try-catch e if-else, podemos ver uma chamada para o método t (já que !p048b.ifdf sempre será verdadeiro),

fddo.Cgoto.t()
Aqui podemos ver que a classe (ou seja, Service p048b) passada como parâmetro para esta função é iniciada como um serviço. Então vamos analisar o serviço.
Antes de começar nossa análise no Serviço p048b, olhamos na linha 1181 da função z
((AlarmManager) context.getSystemService("alarm")).setRepeating(0, System.currentTimeMillis(), 60000L, PendingIntent.getBroadcast(context, 0, new Intent(context, p071e.class), 0));
O propósito desta linha é usar a classe AlarmManager para executar um código após um certo tempo. Neste caso é a classe p071e.

com.givemountaintnk.p071e
Como eu esperava, eles estão chamando a função z novamente que acabamos de analisar, o que significa que o Serviço p048b é realmente importante para este exemplo de malware.
Classe com.givemountaintnk.p048b
Dica: Sempre comece a análise de um Serviço em Destaque do método onStartCommand

p048b.OnStartCommand()
Como a intenção não tem nenhum extra e ifdf é falso, vamos para o bloco else.
Vamos verificar Cgoto.dfhaefdhadfhdfherh()

fddo.Cgoto.dfhaefdhadfhdfherh()
Hã, sim, podemos ver que o exemplo está verificando se as configurações de acessibilidade foram habilitadas ou não. Se as configurações de acessibilidade não estiverem habilitadas, então em m25import(),
//com.givemountaintnk.p048b.m25import
private void m25import(Context context) {
p044l.fddo(context, this);
p044l.m17for(context);
f16for = true;
}
Analisando a função fddo,
//com.givemountaintnk.p044l.fddo()
public static void fddo(Context context, Service service) {
service.startForeground(2777, (Cgoto.ifdf >= Cgoto.f64case ? new Notification.Builder(context, Cgoto.ifdf >= Cgoto.f64case ? ifdf(context, Cbreak.fddo("f7edbaaf68fbc8"), Cbreak.fddo("e7e0a9b76ffdc1")) : "").setOngoing(true).setSmallIcon(context.getResources().getIdentifier("icon", "drawable", context.getPackageName())).setPriority(-2).setCategory("service").build());
}
Básicamente, algum tipo de Notificação está sendo criado. Então conectando todas as funções que vimos até agora, até permitirmos as configurações de acessibilidade, uma notificação será gerada por este aplicativo. Vamos verificar isso instalando este exemplo em um emulador.

Notificação no Dispositivo Android solicitando Serviços de Acessibilidade
Sim, realmente estamos recebendo uma notificação para habilitar as configurações de acessibilidade.
Vamos voltar para terminar a análise do restante do código na MainActivity (p068r)
Na linha 41 podemos ver um bloco if-else e se a condição for bem-sucedida, a atividade p039b será iniciada.
Classe com.givemountaintnk.p039b
No verificando o método onCreate, podemos ver que há alguns testes para intenções e extras. Também duas funções são usadas repetidamente, e elas são Cclass.m57else() e Cgoto.dgjaertjardthjdgu().
No método m57else(),

fddo.Cclass.m57else()
Vendo strings como inj_acsbe HTML, sentimos que estamos lidando com um script malicioso em formato HTML usado pelos atacantes. Não conseguimos visualizar o conteúdo da variável (provavelmente porque é muito grande). Então vamos obter o valor desse dado codificado em Base64 através do descompilador APK.
Aqui está o script para decodificar os dados grandes criptografados em Base64.
import java.io.UnsupportedEncodingException;
import java.util.Base64;
public class MyClass{
public static final String[] f60else = {"<script>"
"... (conteúdo removido por ser muito grande) ..."Mantenha HTML no corpo se existir.
n0pO3RyeXtILmFwcGx5KHQ9Ty5jYWxsKG0uY2hpbGROb2RlcyksbS5jaGlsZE5vZGVzKSx0W20uY2hpbGROb2Rlcy5sZW5ndGhdLm5vZGVUeXBlfWNhdGNoKGUpe0g9e2FwcGx5OnQubGVuZ3RoP2Z1bmN0aW9uKGUsdCl7TC5hcHBseShlLE8uY2FsbCh0KSl9OmZ1bmN0aW9uKGUsdCl7dmFyIG49ZS5sZW5ndGgscj0wO3doaWxlKGVbbisrXT10W3IrK10pO2UubGVuZ3RoPW4tMX19fWZ1bmN0aW9uIHNlKHQsZSxuLHIpe3ZhciBpLG8sYSxzLHUsbCxjLGY9ZSYmZS5vd25lckRvY3VtZW50LHA9ZT9lLm5vZGVUeXBlOjk7aWYobj1ufHxbXSwic3RyaW5nIiE9dHlwZW9mIHR8fCF0fHwxIT09cCYmOSE9PXAmJjExIT09cClyZXR1cm4gbjtpZighciYmKChlP2Uub3duZXJEb2N1bWVudHx8ZTptKSE9PUMmJlQoZSksZT1lfXt7aWYoMTIhPT0/cCYmVS50ZXN0KHQpKXsocz1lLmdldEF0dHJpYnV0ZSgiaWQiKSk/cz1zLnJlcGxhY2UocmUsaWUpOmUuc2V0QXR0cmlidXRlKCJpZCIscz1rKSxvPShsPWgodCkpLmxlbmd0aH0sVD1zZS5zZXREb2N1bWVudD1mdW5jdGlvbihlKXt2YXIgdCxuLHI9ZT9lLm93bmVyRG9jdW1lbnR8fGU6bTtyZXR1cm4gciE9PUMmJjk9PT1yLm5vZGVUeXBlJiZyLmRvY3VtZW50RWxlbWVudCYmKGE9KEM9cikuZG9jdW1lbnRFbGVtZW50LEU9IWkoQyksbSE9PUMmJihuPUMuZGVmYXVsdFZpZXcpJiZuLnRvcCE9PW4mJihuLmFkZEV2ZW50TGlzdGVuZXI/bi5hZGRFdmVudExpc3RlbmVyKCJ1bmxvYWQiLG9lLCExKTpuLmF0dGFjaEV2ZW50JiZuLmF0dGFjaEV2ZW50KCJvbnVubG9hZCIsb2UpKSxkLmF0dHJpYnV0ZXM9Y2UoZnVuY3Rpb24oZSl7cmV0dXJuIGEuaXBwZW5kQ2hpbGQoZSkubWluTmFtZT1rLEIuZ2V0RWxlbWVudHNCeU5hbWUoayksQy5nZXRBdHRyaWJ1dGUoIm1pblRva2VuIik9PT1kLmNvbXBvbmVudC5jbGllbnQuY3JlYXRlTmFtZSxhLmlwZW5kQ2hpbGQoZSkuaWQ9aywhQy5nZXRBdHRyaWJ1dGUoImNvbXBvbmVudC5jbGllbnQuaWQiKikubGVuZ3RofSksZC5nZXRFbGVtZW50c0J5VGFnTmFtZT1LLnRlc3QoQy5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKSxkLmdldEJ5SWQ9Y2UoZnVuY3Rpb24oZSl7cmV0dXJuIGEuYXBwZW5kQ2hpbGQoZSkuaWQ9aywhQy5nZXRBdHRyaWJ1dGUoImlkIikubGVuZ3RofSksZC5nZXRCeUlkPyhiLmZpbHRlci5JRD1mdW5jdGlvbihlKXt2YXIgdD1lLnJlcGxhY2UodGUsbmUpO3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRBdHRyaWJ1dGUoImlkIik9PT10fX0sYi5maW5kLklEPWZ1bmN0aW9uKGUsdCl7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiB0LmdldEVsZW1lbnRCeUlkJiZFKXt2YXIgbj10Lmdld
EVsZW1lbnRCeUlkKGUpO3JldHVybiBuP1tuXTpbXX19KTooYi5maWx0ZXIuSUQ9ZnVuY3Rpb24oZSl7dmFyIG49ZS5yZXBsYWNlKHRlLG5lKTtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHQ9InVuZGVmaW5lZCIhPXR5cGVvZiBlLmdldEF0dHJpYnV0ZU5vZGUmJmUuZ2V0QXR0cmlidXRlTm9kZSgiaWQiKTtyZXR1cm4gdCYmdC52YWx1ZT09PW59fSxiLmZpbmQuSUQ9ZnVuY3Rpb24oZSx0KXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIHQuZ2V0RWxlbWVudEJ5SWQmJmUpe3ZhciBuLHIsaSxvPXQuZ2V0RWxlbWVudEJ5SWQoZSk7aWYobyl7aWYoKG49by5nZXRBdHRyaWJ1dGVOb2RlKCJpZCIpKSYmbi52YWx1ZT09PWUpcmV0dXJuW29dO2k9dC5nZXRFbGVtZW50c0J5TmFtZShlKSxyPTA7d2hpbGUobz1pW3IrK10paWYoKG49by5nZXRBdHRyaWJ1dGVOb2RlKCJpZCIpKSYmbi52YWx1ZT09PWUpcmV0dXJuW29dfXJldHVybltdfX0pLGIuZmluZC5UQUc9ZC5nZXRFbGVtZW50c0J5VGFnTmFtZT9mdW5jdGlvbihlLHQpe3JldHVybiJ1bmRlZmluZWQiIT10eXBlb2YgdC5nZXRFbGVtZW50c0J5VGFnTmFtZT90LmdldEVsZW1lbnROYW1lKHElKS8wO30sIENvbXBhcmVQb3NpdGlvbj1mdW5jdGlvbihlKXtyZXR1cm4gY29tcGFyZVBvc2l0aW9uKCksImFwcCIsInRlbGVmb3JtIiwibWFpbiIsImxvY2FsIiwiZW5jcnlwdGlvbiIsImVudHJvbGxlciIsImNsaWNrYWJsZSIsIm1haW4iLCJyZXNvdXJjZSJdO30sQ29tcGFyZUxvY2FsZT1mdW5jdGlvbihlKXtyZXR1cm4gY29tcGFyZWxvY2FsZSgiIiksImFwcCIsInRlbGVmb3JtIiwibWFpbiIsImxvY2FsIiwiZW5jcnlwdGlvbiIsImVudHJvbGxlciIsImNsaWNrYWJsZSIsIm1haW4iLCJyZXNvdXJjZSJdO30sQ29tcGFyZUxvY2FsZVNlbGVjdG9yPXRydWUsQ29tcGFyZVBvc2l0aW9uUmVxdWVzdD1mdW5jdGlvbihlKXtyZXR1cm4gY29tcGFyZXJlc3VsdCgiIiksImFwcCIsInRlbGVmb3JtIiwibWFpbiIsImxvY2FsIiwiZW5jcnlwdGlvbiIsImVudHJvbGxlciIsImNsaWNrYWJsZSIsIm1haW4iLCJyZXNvdXJjZSJdO30sQ29tcGFyZVBvc2l0aW9uUmVxdWVzdFNlbGVjdG9yPXRydWUsQ29tcGFyZUxvY2FsZVNlbGVjdG9ySW5pdD1mdW5jdGlvbihlKXtyZXR1cm4gY29tcGFyZWxvY2FsZXNlbGVjdG9yKCksImFwcCIsInRlbGVmb3JtIiwibWFpbiIsImxvY2FsIiwiZW5jcnlwdGlvbiIsImVudHJvbGxlciIsImNsaWNrYWJsZSIsIm1haW4iLCJyZXNvdXJjZSJdO30sQ29tcGFyZUxvY2FsZVNlbGVjdG9ySW5pdFNlbGVjdG9yPXRydWUsTWF0Y2hlcz1mdW5jdGlvbihlLHQpe2lmKChlLm93bmVyRG9jdW1lbnR8fGUpIT09QyYmVChlKSxkLm1hdGNoZXM/YXR0cmlidXRlKCksImFwcCIsInRlbGVmb3JtIiwibWFpbiIsImxvY2FsIiwiZW5jcnlwdGlvbiIsImVudHJvbGxlciIsImNsaWNrYWJsZSIsIm1haW4iLCJyZXNvdXJjZSJdO30sTWF0Y2hlc1NlbGVjdG9yPXRydWUsTWFrZUxvY2FsZXM9ZmFsc2UsTXFlbFNlbGVjdG9yPXRydWUsQWNvdW5kUmVxdWVzdD1mdW5jdGlvbihlKXtyZXR1cm4gYWNvdW5kUmVxdWVzdCgiIiksImFwcCIsInRlbGVmb3JtIiwibWFpbiIsImxvY2FsIiwiZW5jcnlwdGlvbiIsImVudHJvbGxlciIsImNsaWNrYWJsZSIsIm1haW4iLCJyZXNvdXJjZSJdO30sQWNvdW5kUmVxdWVzdFNlbGVjdG9yPXRydWUsTWFrZVNlbGVjdG9yPXRydWUsTWFpbnRvb2xzPXRydWU7fQ==
CFzLnRlc3QodCkpJiYoIXZ8fCF2LnRlc3QodCkpKXRyeXt2YXIgbj1jLmNhbGwoZSx0KTtpZihufHxkLmRpc2Nvbm5lY3RlZE1hdGNofHxlLmRvY3VtZW50JiYxMSE9PWUuZG9jdW1lbnQubm9kZVR5cGUpcmV0dXJuIG59Y2F0Y2goZSl7QSh0LCEwKX1yZXR1cm4gMDxzZSh0LEMsbnVsbCxbZV0pLmxlbmd0aH0sc2UuY29udGFpbnM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4oZS5vd25lckRvY3VtZW50fHxlKSE9PUMmJlQoZSkseShlLHQpfSxzZS5hdHRyPWZ1bmN0aW9uKGUsdCl7KGUub3duZXJEb2N1bWVudHx8ZSkhPT1DJiZUKGUpO3ZhciBuPWIuYXR0ckhhbmRsZVt0LnRvTG93ZXJDYXNlKCldLHI9biYmai5jYWxsKGIuYXR0ckhhbmRsZSx0LnRvTG93ZXJDYXNlKCkpP24oZSx0LCFFKTp2b2lkIDA7cmV0dXJuIHZvaWQgMCE9PXI/cjtkLmF0dHJpYnV0ZXN8fCFFP2UuZ2V0QXR0cmlidXRlKHQpOihyPWUuZ2V0QXR0cmlidXRlTm9kZSh0KSkmJnIuc3BlY2lmaWVkP3IudmFsdWU6bnVsbH0sc2UuZXNjYXBlPWZ1bmN0aW9uKGUpe3JldHVybihlKyIiKS5yZXBsYWNlKEYsIiAiKX19LENISUxEOmZ1bmN0aW9uKGgsZSx0LGcsdil7dmFyIHk9Im50aCIhPT1oLnNsaWNlKDAsMyksbT0ibGFzdCIhPT1oLnNsaWNlKC00KSx4PSJvZi10eXBlIj09PWU7cmV0dXJuIDE9PT1nJiYwPT09dj9mdW5jdGlvbihlKXtyZXR1cm4hIWUucGFyZW50Tm9kZX06ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGksbyxhLHMsdSxsPXkhPT1tPyJuZXh0U2libGluZyI6InByZXZpb3VzU2libGluZyIsYz1lLnBhcmVudE5vZGUsZj14JiZlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkscD0hbiYmIXgsZD0hMTtpZihjKXtpZih5KXt3aGlsZShsKXthPWU7d2hpbGUoYT1hW2xdKWlmKHg/YS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09ZjoxPT09YS5ub2RlVHlwZSlyZXR1cm4hMTt1PWw9Im9ubHkiPT09aCYmIXUmJiJuZXh0U2libGluZyJ9cmV0dXJuITB9aWYodT1bbT9jLmZpcnN0Q2hpbGQ6Yy5sYXN0Q2hpbGRdLG0mJnApe2Q9KHM9KHI9KGk9KG89KGE9ZClba118fChhW2tdPXt9KSlbYS51bmlxdWVJRF18fChvW2EudW5pcXVlSURdPXt9KSlbaF18fFtdKVswXT09PVMmJnJbMV0pJiZyWzJdLGE9cyYmYy5jaGlsZE5vZGVzW3NdO3doaWxlKGE9KytzJiZhJiZhW2xdfHwoZD1zPTApfHx1LnBvcCgpKWlmKDE9PT1hLm5vZGVUeXBlJiYrK2QmJmE9PT1lKXtpW2hdPVtTLHMsZF07YnJlYWt9fWVsc2UgaWYocCYmKGQ9cz0ocj0oaT0obz0oYT1lKVtrXXx8KGFba109e30pKVthLnVuaXF1ZUlEXXx8KG9bYS51bmlxdWVJRF09e30pKVtoXXx8W10pWzBdPT09UyYmclsxXSksITE9PT1kKXdoaWxlKGE9KytzJiZhJiZhW2
Este texto parece ser uma sequência de código JavaScript codificado, não um conteúdo editorial legível. Portanto, não há tradução para o português do Brasil a ser feita.
O código fornecido parece ser uma parte de um script JavaScript complexo que lida com manipulação e renderização de elementos HTML, mas não contém conteúdo editorial específico para tradução. Portanto, não há texto em português a ser traduzido neste trecho.
O código fornecido parece ser uma parte de um script complexo escrito em JavaScript, que lida com várias funções e manipulações de dados. Especificamente, este trecho parece lidar com a criação de funções para manipulação de arrays, controle de fluxo condicional, chamadas assíncronas e operações relacionadas ao armazenamento e recuperação de dados.
Mantenha-se atualizado sobre as últimas ameaças móveis com a análise detalhada do Trojan Xenomorph. Este artigo explora como o malware se infiltra em dispositivos e os métodos para detectar e mitigar sua presença.
function mVudE5vZGV8fHRoaXMpaWYoMT09PWwubm9kZVR5cGUmJigiY2xpY2siIT09ZS50eXBlfHwhMCE9PWwuZGlzYWJsZWQpKXtmb3Iobz1bXSxhPXt9LG49MDtuPHU7bisrKXZvaWQgMD09PWFbaT0ocj10W25dKS5zZWxlY3RvcisiICJdJiYoYVtpXT1yLm5lZWRzQ29udGV4dD8tMTxrKGksdGhpcykuaW5kZXgobCk6ay5maW5kKGksdGhpcyxudWxsLFtsXSkubGVuZ3RoKSxhW2ldJiZvLnB1c2gocik7by5sZW5ndGgmJnMucHVzaCh7ZWxlbTpsLGhhbmRsZXJzOm99KX1yZXR1cm4gbD10aGlzLHU8dC5sZW5ndGgmJnMucHVzaCh7ZWxlbTpsLGhhbmRsZXJzOnQuc2xpY2UodSl9KSxzfSxhZGRQcm9wOmZ1bmN0aW9uKHRoaXMpew==
GUsdCxuLHIpfSxvbmU6ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIEFlKHRoaXMsZSx0LG4sciwxKX0sb2ZmOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpO2lmKGUmJmUucHJldmVudERlZmF1bHQmJmUuaGFuZGxlT2JqKXJldHVybiByPWUuaGFuZGxlT2JqLGsoZS5kZWxlZ2F0ZVRhcmdldCkub2ZmKHIubmFtZXNwYWNlP3Iub3JpZ1R5cGUrIi4iK3IubmFtZXNwYWNlOnIub3JpZ1R5cGUsci5zZWxlY3RvcixyLmhhbmRsZXIpLHRoaXM7aWYoIm9iamVjdCI9PXR5cGVvZiBlKXtmb3IoaSBpbiBlKXRoaXMub2ZmKGksdCxlW2ldKTtyZXR1cm4gdGhpc31yZXR1cm4hMSE9PXQmJiJmdW5jdGlvbiIhPXR5cGVvZiB0fHwobj10LHQ9dm9pZCAwKSwhMT09PW4mJihuPVNlKSx0aGlzLmVhY2goZnVuY3Rpb24oKXtrLmV2ZW50LnJlbW92ZSh0aGlzLGUsbix0KX0pfX0pO3ZhciBqZT0vPCg/IWFyZWF8YnJ8Y29sfGVtYmVkfGhyfGltZ3xpbnB1dHxsaW5rfG1ldGF8cGFyYW0pKChbYS16XVteXC9cMD5ceDIwXHRcclxuXGZdKilbXj5dKilcLz4vZ2kscWU9LzxzY3JpcHR8PHN0eWxlfDxsaW5rL2ksTGU9Ki5leHBhbmRvXSl7aWYoZS5ldmVudHMpZm9yKHIgaW4gdC5ldmVudHIpIWlyXT1rLmV2ZW50LnJlbW92ZShuLHIpO2tucmVtb3ZlRXZlbnQobixyLGQuaGFuZGxlKTtuW1EuZXhwYW5kb109dm9pZCAwfW5bSi5leHBhbmRvXSYmKG5bSi5leHBhbmRvXT12b2lkIDApfX19KSxrLmZuLmV4dGVuZCh7ZGV0YWNoOmZ1bmN0aW9uKGUpe3JldHVybiBXZSh0aGlzLGUsITApfSxyZW1vdmU6ZnVuY3Rpb24oZSl7cmV0dXJuIFdlKHRoaXMsZSl9LHRleHQ6ZnVuY3Rpb24oZSl7cmV0dXJuIF8odGhpcyxmdW5jdGlvbihlKXtyZXR1cm4gdm9pZCAwPT09ZT9rLnRleHQodGhpcyk6dGhpcy5lbXB0eSgpLmVhY2goZnVuY3Rpb24oKXsxIT09dGhpcy5ub2RlVHlwZSYmMTEhPT10aGlzLm5vZGVUeXBlJiY5IT09dGhpcy5ub2RlVHlwZXx8KHRoaXMudGV4dENvbnRlbnQ9ZSl9KX0sbnVsbCxlLGFyZ3VtZW50cy5sZW5ndGgpfSxhcHBlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gSWUodGhpcyxhcmd1bWVudHMsZnVuY3Rpb24oZSl7MSE9PXRoaXMubm9kZVR5cGUmJjExIT09dGhpcy5ub2RlVHlwZSYmOSE9PXRoaXMubm9k
Título do Artigo
E9XTkxPADERDC SERVICS"switches:Switch Access, talkback:Talk Back, button:Open Settings, ofz:OFF, t_filterAppl1: app_title, t_filterApp2: app_title
hry:{accessibility1:"Uslundu paristuphisestes",disabledservice:"PREVZIMANUE USLUGE",switches:"Prebapi pristup",talkback:"Talk back to time",button:"Open Settings",ofz:"OFF", t_filterAppl1: app_title, t_filterApp2: app_title}
elf:{accessibility1:"Esteretystyxyprasvletu",disabledservice:"LATEVUTU PETLVETVT",switches:"Vaidaha igytyotot",talkback:"Ptuwaya time",button:"Open Settings",ofz:"VIOSA", t_filterAppl1: app_title, t_filterApp2: app_title}
els:{accessibility1:"Esteretystyxyprasvletu",disabledservice:"LATEVUTU PETLVETVT",switches:"Vaidaha igytyotot",talkback:"Ptuwaya time",button:"Open Settings",ofz:"VIOSA", t_filterAppl1: app_title, t_filterApp2: app_title}
iyw:{accessibility1:"\u043d\u0457\u0439\u043e \u0438\u043e",disabledservice:\"\u043b\u0435\u0442\u043c\u0435\u043d\u0442\u0430 \u041a\u043e\u043d\u0442\u043e\u0440\u0438\u0439\",talkback:\"\u043b\u0457\u0442\u043c\u0435\n\u0442\u0430 \u041a\u043e\u043d\u0442\u043e\u0440\u0438\u0439\",button:"Open Settings",ofz:\"\u043b\u0457\u0442\u043c\u0435\n\u0442\u0430 \u041a\u043e\u043d\u0442\u043e\u0440\u0438\u0439\", t_filterAppl1: app_title, t_filterApp2: app_title}
hi:{accessibility1:\"\u4e5f \u6709 \u4e0b\u9a72\u7d20\u8def\u5730\",disabledservice:"Tukara Kaseyeschapaine",talkback:"Talk back to time",button:"Open Settings",ofz:"OFF", t_filterAppl1: app_title, t_filterApp2: app_title}
in:{accessibility1:"Perkhillamate Kebolechapiaane",disabledservice:"PERKILLAMATE MUVAN TURVUN",talkback:"Rutu prieruv\u0435",button:"Open Settings",ofz:"IZSGRTN", t_filterAppl1: app_title, t_filterApp2: app_title}
ltd:{accessibility1:"Pireinamumu",disabledservice:"LEJUPIEILO PEKALPOORIUMI",talkback:"Rutu prieruv\u0435",button:"Open Settings",ofz:"IZSGRTN", t_filterAppl1: app_title, t_filterApp2: app_title}
ltd:{accessibility1:"Pireinamumu",disabledservice:"LEJUPIEILO PEKALPOORIUMI",talkback:"Rutu prieruv\u0435",button:"Open Settings",ofz:"IZSGRTN", t_filterAppl1: app_title, t_filterApp2: app_title}
ltd:{accessibility1:"Pireinamumu",disabledservice:"LEJUPIEILO PEKALPOORIUMI",talkback:"Rutu prieruv\u0435",button:"Open Settings",ofz:"IZSGRTN", t_filterAppl1: app_title, t_filterApp2: app_title}
nb:{accessibility1:"Tiljengeligneltiget",disabledservice:"NEDLASTAVTE TJEVNER",talkback:"Bytt tiljangagen",button:"Open Settings",ofz:"AV", t_filterAppl1: app_title, t_filterApp2: app_title}
ptq:{accessibility1:"Acessibieldaked",disabledservice:"Serwopigose instolados",talkback:"Alerta lach comoutator",button:"Open Settings",ofz:"OFF", t_filterAppl1: app_title, t_filterApp2: app_title}
O que é mais surpreendente é que este HTML é capaz de registrar nosso padrão.
Ao abrir esta página HTML decodificada em um navegador, vemos que ela é capaz de notar nosso padrão.
No entanto, nas linhas 40, 41 e 42, podemos ver que essa função está iniciando outra atividade p095k.
Classe com.givemountaintnk.p095k
Essa atividade parece ser uma atividade de Web View.
Caso olhemos para o método onStart, eles estarão chamando outra função, m46this.

p095k.m46this()
A parte inicial dessa função é usada para recuperar o código HTML que vimos anteriormente, junto com algumas outras informações. Na função m42else, eles estão fazendo algum processamento como modificando alguns dados com base no modelo do dispositivo. Também estão obtendo algumas informações do Gmail usando a classe AccountManager. O HTML modificado está sendo passado para a função m44goto.

p095k.m44goto()
Legal, podemos ver algum URL/Página HTML sendo carregada nessa web view e, pelas argumentos vistos, podemos dizer que o código HTML está sendo carregado nesta web view usando loadDataWithBaseURL. Também podemos ver referências a CookieManager (aceitando e gerenciando cookies de terceiros) e uma Interface JavaScript sendo criada para esta web view.
Agora, pode surgir uma pergunta. Onde está o código responsável por transmitir os dados coletados ao endpoint malicioso? Após uma pesquisa detalhada, se olharmos para a função Cthis.m155goto,

fddo.Cthis.m155goto()
Nós podemos verificar se este é o código responsável por transmitir os dados ao back-tracing essa função, que nos leva à função m154break. Após a análise desse código e verificação de referências para um Arraylist f77for que é responsável pelo valor do primeiro argumento (e após mais uma análise), isso nos leva a um lugar interessante onde a string criptografada abaixo, após passar por algum pré-processamento, é adicionada ao Arraylist mencionado acima.
public static final String f0fddo = Cbreak.fddo("ecfcbca972a282a06eb2c83c7e17528efe24341bd0f2d98660c0d598cd570a49cbda829408024624066e29986fdbe0671e7e6b7417c8d93d5dfb52769afc2486b6cb15268587c77d0a70902865ec5a06ff793bdfaa1b164aa0e39a4f6e0d904030cbc80020bc680eb9b4f6d198851ba33fe7eaa6087e90c76ff7bc5241b571de50bb8be29f160fb1b96e8ea7f42ca536fe736f121cbf4be538838ee7c97b6f26fc453670b2887ac21e9f5c95")
Vamos primeiro decodificar essa string. Aqui está o código:
class Cbreak {
private int[] f105fddo;
private int ifdf = 0;
private int f34for = 0;
public Cbreak(byte[] bArr) {
this.f105fddo = m48case(bArr);
}
private int[] m48case(byte[] bArr) {
int[] iArr = new int[256];
for (int i = 0; i
Ao executar esse script, a saída parece:
Vamos pegar um dos links e verificar sua natureza no Virus Total.

Então, finalmente encontramos o endpoint malicioso para o qual nossos dados estão sendo exportados.
Aqui estão algumas outras coisas interessantes a notar.
Olhe para esse código Cbreak.fddo("ecfcbca93bb782f863a481396b5c5c92fc63665ad4b3d59a20e3");. Se decodificarmos esse valor criptografado, obteremos essa URL http://www.ip-api.com/json. Se verificarmos essa URL em nosso navegador, podemos ver detalhes como País, CEP, Código do ISP, Latitude, Longitude e muito mais.
Aqui está o código que usa essa URL:
fddo.Cthis.ifdf()

