Skip to content
This repository was archived by the owner on Aug 2, 2025. It is now read-only.

bobaoapae/haval-api-exploit

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

25 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Haval API

Visão Geral

Este projeto consiste em uma aplicação C# desenvolvida para ser executada no sistema de multimídia do veículo Haval H6. O sistema nativo do carro expõe uma porta Telnet com acesso root, e esta aplicação é projetada para ser iniciada através dessa conexão.

Ao ser executado com privilégios de root, o programa consegue:

  1. Acessar e extrair dados do sistema do veículo que são restritos e só podem ser lidos pelo superusuário.
  2. Iniciar um servidor Frida, que permite a injeção de scripts (JavaScript) em aplicações nativas da multimídia.

O objetivo principal é monitorar dados do veículo e modificar ou adicionar funcionalidades às aplicações existentes no sistema de infoentretenimento.

Como Funciona

  1. Acesso: O acesso inicial é feito via Telnet, conectando-se ao IP da multimídia na porta correspondente.
  2. Execução: O binário compilado deste projeto é transferido para o sistema de arquivos do carro e executado via linha de comando no shell do Telnet.
  3. Operação: Uma vez em execução, a aplicação opera em background, expondo APIs e monitorando o sistema. O servidor Frida fica ativo, aguardando conexões de um cliente (ex: um PC na mesma rede) para injetar os scripts desejados.

Estrutura do Projeto

O projeto é composto pelas seguintes classes principais:

  • Program.cs: Ponto de entrada da aplicação. Responsável por inicializar e orquestrar os outros componentes.
  • CarMonitor.cs: Monitora propriedades e dados específicos do carro, como velocidade, status das portas, etc.
  • FridaApiServer.cs: Implementa o servidor que permite a comunicação com o Frida para injeção de scripts.
  • FridaInjector.cs: Contém a lógica para realizar a injeção dos scripts nos processos alvo.
  • LogApiServer.cs: Expõe uma API para centralizar e gerenciar logs gerados pela aplicação e pelos scripts injetados.
  • PropertyMonitor.cs: Uma classe genérica para monitorar mudanças em propriedades do sistema Android.
  • IpTablesUtils.cs: Utilitário para gerenciar regras de iptables, possivelmente para redirecionamento de portas ou controle de rede.
  • TermuxCommandRunner.cs: Módulo para executar comandos no shell do sistema, aproveitando o ambiente root.

Compilação

Para compilar o projeto para a arquitetura correta da multimídia (um sistema Linux ARM64 com Bionic), utilize o seguinte comando. A compilação AOT (Ahead-Of-Time) é usada para gerar um binário nativo e otimizado.

dotnet publish -r linux-bionic-arm64 -p:DisableUnsupportedError=true -p:PublishAotUsingRuntimePack=true

Configuração do Ambiente (Multimídia)

Para preparar o ambiente na multimídia do carro, siga os passos abaixo:

  1. Instale o F-Droid: Baixe e instale o F-Droid na multimídia para ter acesso a aplicativos de código aberto.
  2. Instale o Termux: Pelo F-Droid, instale o Termux, um emulador de terminal para Android.
  3. Instale o Frida no Termux: Abra o Termux e execute o seguinte comando para instalar o frida-cli e suas dependências:
    wget https://maglit.me/frida-python -O frida-python.sh && bash frida-python.sh
  4. Instale o Termux:Boot: Pelo F-Droid, instale o Termux:Boot. Este aplicativo permite que scripts sejam executados automaticamente na inicialização do sistema.
  5. Configure o Script de Inicialização: Adicione o arquivo start.sh (localizado na pasta files deste projeto) ao diretório de scripts do Termux:Boot (~/.termux/boot/).
  6. Instale o Frida Server: É crucial que a versão do frida-server corresponda exatamente à versão do frida-cli instalada no passo 3. Verifique a versão do cliente com o comando frida --version no Termux.
  7. Após baixar a versão correta do frida-server para a arquitetura arm64, renomeie o arquivo para frida-server e coloque-o no seguinte diretório no sistema de arquivos da multimídia:
    /data/local/tmp/frida-server
    

Certifique-se de que o arquivo tenha permissões de execução (chmod +x /data/local/tmp/frida-server).

APIs e Funcionalidades

Servidor Principal

O serviço principal escuta na porta 9999 e expõe três áreas principais:

  • /propriedades – interface web para visualizar valores do veículo e salvar preferências.
  • /frida – gerenciamento de injeção de scripts Frida.
  • /logs – visualização de logs em tempo real.

Monitoramento de Propriedades

CarMonitor lê o logcat em busca de alterações de propriedades e as distribui via Server‑Sent Events (/propriedades/events). Também é possível:

  • Forçar a leitura de um conjunto de propriedades com /propriedades/status.
  • Atualizar manualmente um valor usando /propriedades/update?property=...&value=....
  • Definir o modo de salvamento com /propriedades/save_property_setting.

Servidor Frida

FridaApiServer permite listar aplicativos e injetar scripts. Os pontos mais importantes são:

  • /frida/ – lista os pacotes instalados.
  • /frida/inject – recebe um JSON com appId, script, mode (wait ou spawn) e persist para registrar o script.
  • /frida/persistent – lista injeções persistentes configuradas.
  • /frida/remove?appId=... – remove a injeção persistente do pacote indicado.

Logs

Por meio do LogApiServer é possível acompanhar mensagens em tempo real em /logs. Os níveis de log podem ser enviados através dos caminhos /logs/debug, /logs/info, /logs/warning e /logs/error.

Gerenciamento de Usuário e Configurações

FridaInjector salva e restaura configurações específicas de usuário, além de responder a comandos recebidos dos scripts injetados. As configurações são armazenadas em /sdcard/havalApi/settings.json e manipuladas pelo SettingsManager.

Scripts Frida

Na pasta files/frida-scripts estão incluídos exemplos de scripts. O nome do arquivo corresponde ao pacote que deve ser configurado no campo appId ao fazer a injeção via API. Para instalar um script, envie seu conteúdo para /frida/inject conforme exemplo abaixo:

curl -X POST http://<ip>:9999/frida/inject \
  -H "Content-Type: application/json" \
  -d '{"appId":"com.beantechs.personalization","script":"<conteudo>","mode":"wait","persist":true}'

Scripts disponíveis:

  • com.beantechs.account.js – evita que a janela de privacidade seja exibida se todas as permissões já estiverem aceitas.
  • com.beantechs.accountservice.js – corrige a expiração do token e expõe o usuário atual para o monitoramento.
  • com.beantechs.personalization.js – registra BroadcastReceivers para comandos de leitura e escrita de propriedades do veículo.
  • com.ts.car.power.controller.core.js – remove sobreposições indesejadas da interface.
  • mediacenter.js – altera o retorno de getCPList da multimídia para uma lista personalizada.
  • waze.js – registra a chamada do método interno n1 do Waze.

About

Haval H6 Exploit

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 2

  •  
  •