
openqore v0.1.0-beta.1
liberte todo o poder dos seus soundcores! :)
openqore
um kit de ferramentas de código aberto para aplicar patches, modificar e aprimorar o firmware dos fones de ouvido soundcore da série q, com suporte futuro planejado para outros modelos.
nota: este projeto é minha jornada pessoal no mundo de engenharia reversa de hardware e sistemas embarcados. foi criado por um adolescente e estou aprendendo conforme avanço. espere bugs, erros e muita diversão. todas as contribuições e conselhos são bem-vindos!
informações importantes!
este projeto está dividido em duas partes:
- openqore SDK - SDK de firmware para fones soundcore baseados no SoC bes2300p
- qorepatcher - um patcher para o firmware original dos fones (este repositório)
também criei um projeto de demonstração - um port de DOOM baseado no projeto DOOMBuds. confira também! =)
qorepatcher
📚 leia a documentação completa 📚
dispositivos suportados
este projeto foi iniciado com o soundcore life q35. se você quiser ajudar a testar ou adicionar suporte para um novo modelo, abra uma issue!
| modelo | chipset | status |
|---|---|---|
| soundcore life q35 | bes2300p | ✅ suportado |
| soundcore life q30 | bes2300p | ❔ deve funcionar, mas precisa de testes |
| soundcore life tune pro | bes2300p | ❔ deve funcionar, mas precisa de testes |
| soundcore life tune | bes2300p | ❔ deve funcionar, mas precisa de testes |
| soundcore life q20i | bes2300p | ❔ deve funcionar, mas precisa de testes |
| soundcore space one | bes1502x | ❌ em andamento |
suporte para outros modelos é uma meta futura!
nota: dispositivos baseados nos chipsets
bes2300*, bes1502*, bes1600são os candidatos mais prováveis para suporte futuro.
roadmap
openqore está apenas começando. aqui está um plano aproximado do que vem a seguir:
- patcher inicial de firmware para substituição de sons.
- desbloquear suporte a áudio de 48khz para sons do sistema.
- investigar e desbloquear suporte a estéreo para sons do sistema.
- fazer o patcher funcionar com todos os chipsets bes2300 (aviso! precisa de testes)
- fazer o patcher funcionar com todos (ou a maioria) dos chipsets bes
- implementar patches para modificação do nome do fone e endereço mac.
- remover o limitador/portão de volume baixo na entrada aux em alguns modelos (conexão jack).
- criar uma gui amigável para o patcher.
- fazer engenharia reversa do protocolo de atualização ota (over-the-air) para flashing sem fio.
- documentar a estrutura do firmware e funções-chave.
- desenvolver uma biblioteca de pacotes de som criados pela comunidade.
início rápido
este guia pressupõe que você tenha python e git instalados no seu sistema.
1. baixe e extraia o arquivo zip dos releases
2. instale as dependências
o patcher requer ffmpeg para conversão de áudio e pybluez:
windows:
pip install git+https://github.com/pybluez/pybluez.git
winget install ffmpeg
macos:
pip install git+https://github.com/pybluez/pybluez.git
brew install ffmpeg
ubuntu/debian:
pip install git+https://github.com/pybluez/pybluez.git
sudo apt install ffmpeg
3. obtenha o arquivo de firmware
você pode baixar a imagem OTA aqui ou ler a flash com UART:
➡️ guia de hardware: conectando via UART
ler a flash via ota (over-the-air) está planejado para uma atualização futura. (se for possível :D)
4. parabéns!
você pode encontrar instruções de uso aqui
faq
1. qual opção de firmware (sem ota boot ou com ele) no qorepatcher devo selecionar?
se você está aplicando patch no dump da flash dos fones, selecione a opção "com ota boot".
se você baixou a imagem de atualização ota dos servidores oficiais de atualização, selecione a opção "sem ota boot"
nota: se você aplicou o patch no firmware sem ota boot, você precisa adicioná-lo no cabeçalho do firmware com patch antes de fazer o flashing via UART. você NÃO precisa disso se estiver usando o script besota!
mergulho técnico
coisas de nerd a seguir: clique para expandir...
esta seção contém algumas das descobertas iniciais da engenharia reversa do firmware do q35.
se divertindo com modos e recursos de engenharia
os fones têm vários modos de teste ocultos. alguns deles podem ser úteis para atualizações futuras ou depuração.
-
modo de engenharia: para entrar neste modo, segure o botão de energia, conecte os fones a um pc via usb-c antes de ligá-los, e aguarde eles ligarem.
-
rfcomm: os fones têm duas portas de comunicação serial. uma delas é gravável. até agora, a única função que consegui acionar através desta porta é um UFR (explicação abaixo). isso parece ser uma medida de segurança, pois foi acionado por força bruta em vários códigos hex em vez de um comando específico. curiosamente, este não é o reset padrão (power + vol+) mas algo diferente.
-
modo de teste: este modo é acessado de forma semelhante ao modo de engenharia, mas você precisa soltar o botão de energia imediatamente após o led branco piscar pela primeira vez, antes da luz azul. os fones aparecerão então no pc como um dispositivo com erro de "solicitação de descritor de dispositivo falhou". você pode confirmar que está neste modo pelo led branco, que pisca mais rápido que o normal. seu propósito provavelmente está relacionado ao flashing de firmware. além disso, neste modo, os fones podem ser ligados enquanto carregam!
-
reset de fábrica não documentado (UFR): um reset de fábrica oculto pode ser acionado pressionando rapidamente o botão de energia várias vezes enquanto os fones estão ligados ou enviando algo na porta serial virtual (acima). isso fará o firmware travar e então forçar uma reinicialização após cerca de 30 segundos. observe que esta ação apagará todos os dados do usuário, incluindo configurações de equalizador, pareamentos bluetooth e outras configurações.
estrutura do firmware
o firmware parece ser um binário monolítico dividido em várias seções. cada seção crítica é protegida por uma soma de verificação crc32. patchers futuros recalcularão automaticamente essas somas de verificação após qualquer modificação para evitar falhas de inicialização.
sistema de áudio
- original: os sons originais do sistema são armazenados como fluxos de áudio
16khz, mono, SBC. - modificado: ao aplicar patches nas funções responsáveis pela inicialização do dac de áudio, é possível forçar o sistema a reproduzir áudio em
48khz, estéreo. isso melhora significativamente a qualidade dos sons personalizados.
componentes-chave e interfaces
- chipset: o coração do q35 é um SoC
bes2300pda bestechnic (bes, best). uma folha de dados pode ser encontrada pesquisando. - porta de depuração: uma porta serial
uartestá disponível na pcb, que foi usada para depuração inicial e é o método principal para desbricar um dispositivo após um flash ruim. o chipbes2300pem si tem duas portas uart, mas apenas uma delas é exposta como pads facilmente acessíveis na pcb.
contribuindo
contribuições são o que tornam a comunidade de código aberto um lugar incrível para aprender, inspirar e criar. qualquer contribuição que você fizer é muito apreciada.
se você tiver uma sugestão que possa melhorar isso, por favor, faça um fork do repositório e crie um pull request. você também pode simplesmente abrir uma issue com a tag "enhancement". não se esqueça de dar uma estrela ao projeto! obrigado novamente!
- faça um fork do projeto.
- crie sua branch de recurso (
git checkout -b feature/amazing-feature). - faça commit das suas alterações (
git commit -m 'feat: add some amazing feature'). - envie para a branch (
git push origin feature/amazing-feature). - abra um pull request.
contato e comunidade
❤️ apoie o projeto
se você acha este projeto útil e quer apoiar seu desenvolvimento futuro, você pode me pagar um café ou alguns lanches via boosty! toda contribuição é muito apreciada e me ajuda a dedicar mais tempo ao openqore.
agradecimentos
este projeto foi trazido à vida com o uso extensivo de assistentes de codificação com ia (como claude e chatgpt). enquanto a engenharia reversa principal, a pesquisa e as decisões arquiteturais foram feitas pelo autor, a ia desempenhou um papel crucial em acelerar o processo de desenvolvimento, escrever código boilerplate e depurar.
este é um projeto moderno construído com ferramentas modernas.
licença
este projeto é licenciado sob a licença mit. você pode encontrar o texto completo da licença no arquivo license.