As opiniões expressas neste documento e código são as do autor e não refletem a política ou posição oficial da Força Aérea dos Estados Unidos, do Exército dos Estados Unidos, do Departamento de Defesa dos Estados Unidos ou do governo dos Estados Unidos. Este material é declarado um trabalho do governo dos EUA e não está sujeito à proteção de direitos autorais nos Estados Unidos. A aprovação para a divulgação pública deste Código foi aprovada pela 88ª Ala Asa Aira Pública de Asa Pública em 08 de março de 2019 sob o caso número 88ABW-2019-0910. A divulgação não classificada da dissertação foi aprovada em 03 de janeiro de 2019 sob o processo número 88ABW-2019-0024.
Este projeto abriga os scripts Python e R destinados a facilitar a engenharia reversa automatizada da rede de áreas do controlador (CAN), observadas nos veículos de passageiros. Este código foi originalmente desenvolvido pelo Dr. Brent Stone no Instituto de Tecnologia da Força Aérea em busca de um Doutor em Filosofia em Ciência da Computação. Consulte a dissertação incluída intitulada "Ativando as redes de área de auditoria e intrusões para redes de área de controladores proprietários" para obter detalhes sobre os métodos utilizados. Por favor, abra um problema, informe -me se você encontrar erros de digitação, gramática ruim, imagens protegidas por direitos autorais que você deseja remover ou outros problemas!
Agradeço especial a Dave Blundell, co-autor do Manual do Hacker de Carro, e à Comunidade de Garagens Open para obter conselhos técnicos e servir como uma tábua.
Esses scripts não serão executados imediatamente ao clonar este repositório. Espero que essas dicas economizem tempo e frustração dizendo "Por que essas coisas não funcionam!?!?!" Faça perguntas postando no grupo Open Garages Google. Esses scripts foram desenvolvidos e testados usando o Python 3.6. Certifique-se de ter os pacotes Numpy, Pandas e Scikit-Learn disponíveis para o seu intérprete Python.
Os arquivos são organizados com um exemplo de amostra de dados e três pastas. Cada pasta é um conjunto independente de classes de Python interdependentes ou scripts R para examinar dados CAN no formato mostrado no exemplo LoggerProgram0.log. Diferentes formatos de arquivo podem ser usados ajustando o pré -processador.py de acordo.
Pasta 1: Pipeline
Pasta 2: Pipeline_multi-File
Esta é a implementação mais completa e robusta dos conceitos apresentados na dissertação; No entanto, o código também é mais complicado para permitir o processamento automatizado de muitas amostras de dados CAN ao mesmo tempo. Se você ainda não está muito confortável com o Python e o Pandas, entenda como os scripts da pasta do pipeline funcionam antes de tentar passar por essa versão expandida do código.
Esta pasta inclui as mesmas classes do pipeline . No entanto, alguns bugs foram corrigidos aqui, mas não nas classes salvas no pipeline . Se uma alma generosa quiser transplantar as correções de volta para o pipeline , eu vou mesclar o garfo.
Leia os comentários sobre a estrutura esperada da pasta!
Pasta 3: r scripts
Os scripts R requerem o pacote Redm. Procure comandos_list.txt para uma série seqüencial de comandos R. Para obter mais informações sobre o EDM, consulte a página inicial do Laboratório Sugihara da UC San Diego: https://deepeco.ucsd.edu/.
As pastas "City" e "Home" incluem arquivos .CSV de RPM do motor, pressão do freio e séries temporais de velocidade do veículo durante diferentes condições de condução. Cada pasta inclui um arquivo "Commands_list _ ####.
Os arquivos .rda e a saída gráfica .pdf são exemplos de saída usando os comandos R e dados .csv fornecidos.
[Atualização de abril de 2020] Will Freeman adicionou suporte para argumentos da linha de comando e formato de log de Can-Utils pré-processamento. O uso é:
Exemplo Use com o formato de log de can -utils main.py -c inputfile.log
python main.py-can-utils inputfile.log
Exemplo Use com formato original python main.py originalFormat.log
Exemplo Use com ./loggerprogram0.log python main.py
Entrada : os dados podem no formato demonstrado no LoggerProgram0.log
Saída : Esta série de scripts produz uma matriz de saída, dependendo das variáveis globais definidas em main.py. Esta saída pode incluir o seguinte:
Entrada : os dados podem no formato demonstrado no LoggerProgram0.log.
Entrada : arquivos de texto simples .csv contendo dados de séries temporais como os incluídos nesta pasta.
Saída :