Que tal Hackear seu carro e plugá-lo na nuvem ?!

60
Que tal hackear seu carro e plugá-lo na nuvem ?! Ricardo JL Rufino

Transcript of Que tal Hackear seu carro e plugá-lo na nuvem ?!

Page 1: Que tal Hackear seu carro e plugá-lo na nuvem ?!

Que tal hackear seu carro e plugá-lo na nuvem ?!

Ricardo JL Rufino

Page 2: Que tal Hackear seu carro e plugá-lo na nuvem ?!

Agenda

Introdução;

Um pouco sobre a parte elétrica (sensores) do carro;

Protocolos;

Demonstração das aplicações desenvolvida;

Engenharia reversa de um sensor de estacionamento.

Page 3: Que tal Hackear seu carro e plugá-lo na nuvem ?!

Sobre min

Ricardo JL Rufino

Esp. em Engenharia de SoftwareMestrado em Gestão de TI (UFPE)Sócio fundador da CriativaSoft (Teresina / PI) Sócio fundador da Edu3 ( São Bernardo / SP ) * Nova etapa !

Atuo no desenvolvimento de Software desde 2007, focado em soluções empresariais sobre plataforma JavaEE. Desenvolvedor de softwares open-source como Framework Web MVC Mentawai, Arduino IDE (autocomplete) e instrutor de cursos de Java.

Page 4: Que tal Hackear seu carro e plugá-lo na nuvem ?!

Sobre min

Page 5: Que tal Hackear seu carro e plugá-lo na nuvem ?!

Introdução

Motivação

− Com a crescente evolução tecnológica dos carros, principalmente no ramo de entretenimento e conforto, abre-se novas oportunidades;

− Existe também uma aposta forte na área de Apps para carros;

− E a análise dos dados gerados, o “Big Data”, pode possibilitar a criação de vários serviços.

Page 6: Que tal Hackear seu carro e plugá-lo na nuvem ?!

Introdução

Motivação / Pessoal

− Desafio (gabiarras) !

− Mais uma coisa para conectar na IoT !

− Ficar aberto a oportunidades !

Page 7: Que tal Hackear seu carro e plugá-lo na nuvem ?!

Sensores do Carro (alguns)

Em carros comuns (à injeção eletrônica) possuem vários sensores que são utilizados para controlar as válvulas injetoras de combustível.

Page 8: Que tal Hackear seu carro e plugá-lo na nuvem ?!

Sensores / RPM

Função: Rotação do motor e rodas (ABS) Tipos: Indutivo ( 2/3 pinos) e Hall (3 pinos)

Fonte: https://www.flightsystems.com

Page 9: Que tal Hackear seu carro e plugá-lo na nuvem ?!

Sensores / Pedal

Função: Detectara posição do pedal de acel. Tipos: Resistência e PWM

Fonte: http://www.ds.ind.br

Page 10: Que tal Hackear seu carro e plugá-lo na nuvem ?!

Sensores / Detonação

Função: Detectar a presença das detonações e ajustes do tempo de injeção.

Tipos: Piezo-elétrico / Resistivo

Fonte: http://www.cursosonlinemte.com.br

Page 11: Que tal Hackear seu carro e plugá-lo na nuvem ?!

Sensores / Borboleta / TPS

Função: Determinar a posição da borboleta (que controla o fluxo de ar para o motor) e é influenciada pelo pedal de aceleração.

Tipo: Resistivo

Fonte:http://www.autodaewoospark.com

Page 12: Que tal Hackear seu carro e plugá-lo na nuvem ?!

Sensores / Combustível

Função: Detectar o nível de gasolina no tanque.

– Existem outros sensores para calcular o consumo de combustível.

Tipo: Resistivo

Fonte:http://www.autodaewoospark.com

Page 13: Que tal Hackear seu carro e plugá-lo na nuvem ?!

Sensores de Oxigênio (Sonda Lâmbda)

Função: Determinar se a mistura está pobre ou rica, para ajustar a quantidade de ar/combustível.

Carac. Elétricas: 1...1000mV

Fonte:https://www.soinjecaoeletronica.com.b

Page 14: Que tal Hackear seu carro e plugá-lo na nuvem ?!

Prontos ?!

Page 15: Que tal Hackear seu carro e plugá-lo na nuvem ?!

Calma !!!!

É mais simples e existem padrões para coletar dados de vários sensores;

O protocolo: OBD ( On-Board Diagnostic );

Veículos produzidos desde 1996 (USA, Europa), e no Brasil a partir de 2010 (ODBII), porém a introdução da tecnologia foi em 1980;

Em 2008 (USA), entra a regulamentação da rede CAN ( ISO 15765-4 ), referente ao padrão de transmissão de dados.

Page 16: Que tal Hackear seu carro e plugá-lo na nuvem ?!

Protocolos

SAE J1850 PWM (41.6 kbit/s) SAE J1850 VPW (10.4 kbit/s) ISO 9141-2 (5 baud init, 10.4 kbit/s) ISO 14230-4 KWP (5 baud init, 10.4kbit/s) ISO 14230-4 KWP (fast init, 10.4 kbit/s) ISO 15765-4 CAN (11 bit ID, 500 kbit/s) ISO 15765-4 CAN (29 bit ID, 500 kbit/s) ISO 15765-4 CAN (11 bit ID, 250 kbit/s) ISO 15765-4 CAN (29 bit ID, 250 kbit/s) SAE J1939 (250kbps) SAE J1939 (500kbps)

Female OBD-II connector pinout – front view

Consulte demais pinos: https://en.wikipedia.org/wiki/On-board_diagnostics

Page 17: Que tal Hackear seu carro e plugá-lo na nuvem ?!

Protocolos / ELM327

ELM327 – Abstrai o padrão OBD/II para vários protocolos de comunicação.

É configurado através de comandos AT. Baseado no microcontrolador PIC. Existem muitos clones na versão v1, e

reportam ser uma versão mais nova.

Page 18: Que tal Hackear seu carro e plugá-lo na nuvem ?!

Protocolos / ELM327

https://www.elmelectronics.com/wp-content/uploads/2017/01/ELM327DS.pdf

Page 19: Que tal Hackear seu carro e plugá-lo na nuvem ?!

Protocolos / ELM327

Page 20: Que tal Hackear seu carro e plugá-lo na nuvem ?!

Protocolos / ELM327

Conexão (Bluetooth) Localizar o MAC do dispositivo

# hcitool scan

Pareamento

# bluetooth-wizard

Conectar e criar uma porta serial

# rfcomm connect 1 00:1D:A5:68:98:XX

Connected /dev/rfcomm0 to 00:07:80:93:54:1C on channel 1

Press CTRL-C for hangup

http://www.janosgyerik.com/how-to-communicate-with-bluetooth-devices-in-linux/

Page 21: Que tal Hackear seu carro e plugá-lo na nuvem ?!

Protocolos / ELM327

Page 22: Que tal Hackear seu carro e plugá-lo na nuvem ?!

Protocolos / ELM327

Configuração / Comandos AT: ATZ – Reset ATE0 – Desabilitar o ECHO ATS0 – Desabilitar impressão de espaços. ATAT1 – Ajusta tempos de resposta. ATSP0 – Selecionar protocolo automático.

Lista de Comandos:https://www.sparkfun.com/datasheets/Widgets/ELM327_AT_Commands.pdf

Page 23: Que tal Hackear seu carro e plugá-lo na nuvem ?!

Protocolos / OBD2

A consulta de parâmetros do veículo, como: RPM, velocidade e etc, é feita através dos PIDs.

Os PIDs são padronizados em modos: Mode 01 – Exibir dados atuais; Mode 02 – Exibe dados capturados; Mode 03 – Exibe códigos de erros (se

houver); Mode 04 – Limpar os códigos de erro; Mode 05 – Testes do sensor de oxigênio. …. Mode 0A

https://en.wikipedia.org/wiki/OBD-II_PIDs

Page 24: Que tal Hackear seu carro e plugá-lo na nuvem ?!

Protocolos / OBD2

PID – Modo 01 (resumido) 0100 – Lista os PIDs suportados (01-20); 0101 – Status dos erros que foram limpos; 0102 – Congela os dados para o modo 02; 0103 – Status do sistema de combustível; 0104 – Carga do Motor; 0105 – Temp. liquido de arrefecimento ?!; 010C – RPM (Rotação do Motor); 010D – Velocidade; Até …. 01C4 (196); Lista Completa:

https://en.wikipedia.org/wiki/OBD-II_PIDs#Mode_01

Page 25: Que tal Hackear seu carro e plugá-lo na nuvem ?!

Protocolos / OBD2

PID – Modo 03 – Requisitar Códigos de Erros

Exemplo de erro: P2119

Pesquisar Erros: https://www.obd-codes.com/

Page 26: Que tal Hackear seu carro e plugá-lo na nuvem ?!

OBD2 / Simulador

ObdsimObdsim - Permite simular alguns sensores, podendo criar uma porta serial ou um emulador bluetooth.

Instalação: # apt-get install obdgpslogger

Site: http://icculus.org/obdgpslogger/obdsim.html

Page 27: Que tal Hackear seu carro e plugá-lo na nuvem ?!

OBD2 / Simulador

Comandos Abrir a interface (porta serial)

# obdsim -p 8 -g gui_fltk

Criar adaptador virtual bluetooth

# sudo rfcomm bind 0 48:5A:B6:F4:D9:XX 1

# sudo sdptool add SP

# obdsim -p 8 -b

DO SEU PC

Em seguida é possível parear usando seu celular

Page 29: Que tal Hackear seu carro e plugá-lo na nuvem ?!

OBD2 / API Java

Foi desenvolvida uma extensão para o OpenDevice[1] que permite se comunicar via USB / Bluetooth / Wi-Fi*;

OpenDevice: Ferramenta para construção de projetos de IoT;

Perite desenvolver aplicações Arduino, Web / Desktop / Android, para visualização e análise dos dados.

[1] http://opendevice.io[*] Não testado

Page 30: Que tal Hackear seu carro e plugá-lo na nuvem ?!

OBD2 / API Java

Instalação / AndroidAdicionar as dependências no app/build.gradle

Compilar os fontes - Opcional (e recomentado)Fontes: https://github.com/OpenDevice/opendevice-extensionsPré-requisitos: Maven + JavaBasicamente: mvn install (na pasta obd-connection)Guia: https://opendevice.atlassian.net/wiki/display/DOC/Building+from+source

dependencies { compile 'br.com.criativasoft.opendevice:opendevice-android-stream:0.1.4-SNAPSHOT' compile 'io.opendevice.ext:obd-connection:0.1.4-SNAPSHOT' compile 'com.noveogroup.android:android-logger:1.3.5'}

Page 31: Que tal Hackear seu carro e plugá-lo na nuvem ?!

OBD2 / API Java

Java / Maven: <dependency> <groupId>br.com.criativasoft.opendevice</groupId> <artifactId>opendevice-wasync-client</artifactId> <version>${opendevice-version}</version></dependency>

<dependency> <groupId>br.com.criativasoft.opendevice</groupId> <artifactId>opendevice-connection-stream</artifactId> <version>${opendevice-version}</version></dependency>

<dependency> <groupId>io.opendevice.ext</groupId> <artifactId>obd-connection</artifactId> <version>${opendevice-version}</version> <type>jar</type></dependency>

// Conexão remota com servidor / websocket

// USB / Serial / TCP / Bluetooh

// Extensão OBD2

Page 32: Que tal Hackear seu carro e plugá-lo na nuvem ?!

OBD2 / API Java Exemplo:

Configurações para usar um servidor remoto

Habilitar sensores individuais...

Conectar todos, e definir o servidor

Page 33: Que tal Hackear seu carro e plugá-lo na nuvem ?!

OBD2 / API Java

O servidor remoto aqui é “opcional”!

Exemplo de como trabalhar com os dados localmente:

Page 34: Que tal Hackear seu carro e plugá-lo na nuvem ?!

OpenDevice

Instalação do servidor OpenDevice:− https://opendevice.atlassian.net/wiki/display/DOC/Setting-up+the+Server

Pré-requisitos: Java Login: admin / admin Serviços:

− Banco Embarcado, HTTP(8181), Rest(8181), WebSocket(8181) e MQTT(1883).

Page 35: Que tal Hackear seu carro e plugá-lo na nuvem ?!

OpenDevice

Page 36: Que tal Hackear seu carro e plugá-lo na nuvem ?!

OpenDevice

Page 37: Que tal Hackear seu carro e plugá-lo na nuvem ?!

OpenDevice

Page 38: Que tal Hackear seu carro e plugá-lo na nuvem ?!

Demo / IoTCar

Código: https://github.com/OpenDevice/opendevice-examples/tree/master/IoTCar

Page 39: Que tal Hackear seu carro e plugá-lo na nuvem ?!

Demo / IoTCar

https://youtu.be/PYu6LimVcJI

Page 40: Que tal Hackear seu carro e plugá-lo na nuvem ?!

E as GAMBIARRAS ?

Page 41: Que tal Hackear seu carro e plugá-lo na nuvem ?!

Engenharia Reversa – Sensor de Estacionamento

Page 42: Que tal Hackear seu carro e plugá-lo na nuvem ?!

Engenharia Reversa

Page 43: Que tal Hackear seu carro e plugá-lo na nuvem ?!

Engenharia Reversa – Sensor de Estacionamento

Componentes Identificados: NE5532 - Dual Low-Noise High-Speed Audio Operational

Amplifier

74HC4052 - Dual 4-channel analog multiplexer/demultiplexer

EM78P156E - 8-bit microprocessor http://www.xinpian.net/EMC/EM78P/EM78P156.pdf

Page 44: Que tal Hackear seu carro e plugá-lo na nuvem ?!

Engenharia Reversa

O foco dá análise será na saída no microcontrolador que vai para o display.

A análise foi feita utilizando as ferramentas:

Analisado lógico: USBee AX PRO (~R$ 50) Sigrok[1] – Suíte de ferramentas de

analisadores lógicos e osciloscópios, com suporte a vários hardwares.

PulseView – Ferramenta visual que acompanha o Sigrok

Open Bench Logic Sniffer[2] – Similar ao PulseView, só que com uma usabilidade relativamente melhor.

[1] https://sigrok.org/[2] https://lxtreme.nl/projects/ols/

Page 45: Que tal Hackear seu carro e plugá-lo na nuvem ?!

Engenharia Reversa

USBee AX PRO

Page 46: Que tal Hackear seu carro e plugá-lo na nuvem ?!

Engenharia Reversa

Sigrok / PulseView

Page 47: Que tal Hackear seu carro e plugá-lo na nuvem ?!

Engenharia Reversa

Erros cometidos: Utilizar um Arduino para ler os dados como

se fosse Serial/UART. Os dados “pareciam” alguma coisa, muito

tempo perdido !! Queima de um módulo, após dar partida.

Page 48: Que tal Hackear seu carro e plugá-lo na nuvem ?!

Identificação do Padrão de Comunicação

Procedimento: Foram realizadas medidas dos 4 sensores individualmente (usando o PulseView), usando a saída que vai para o display.

As leituras foram feitas e identificadas em intervalos de 10cm.

A analise preliminar identificou que os sensores tem a relação: A = B, e C = D

E que o módulo envia os dados para o display em intervalos de 400ms a 500ms.

Page 49: Que tal Hackear seu carro e plugá-lo na nuvem ?!

Identificação do Padrão de Comunicação

Análise do SINAL

Inicio da transmissão: Sinal de nível baixo, em seguida nível alto por 1000uS = 1ms

Captura na configuração de 25Khz, identificados os pacotes em intervalos de ~450ms

A seguir os detalhes de um pacote:

Page 50: Que tal Hackear seu carro e plugá-lo na nuvem ?!

Identificação do Padrão de Comunicação

Análise dos Dados Foram considerados vários padrões de transmissão em [1],

porém não foi identificado inicialmente nenhuma similaridade.

A codificação dos 0 e 1, é feita através da largura/tempo dos pulsos em alta (5v), algo similar à transmissão IR[2].

[1] https://pt.slideshare.net/RathoreRavindra/line-coding-37072941[2] https://www.vishay.com/docs/80071/dataform.pdf

Page 51: Que tal Hackear seu carro e plugá-lo na nuvem ?!

Identificação do Padrão de Comunicação

Análise dos Dados

Os 8 bits iniciais são do conjunto sensores A e B, ou seja, é uma única medida (Esquerda). O 8bits seguintes são do C e D (Direita);

O valor convertido em decimal varia de : 19 (distância de 0cm) até 4 (distância de 1.7m);

As leituras individuais apresentaram a mesma correlação.

Page 52: Que tal Hackear seu carro e plugá-lo na nuvem ?!

Arduino / Código

A leitura é feita usando as interrupções externas e calculado o tempo do pulso em alta. Usando as interrupções ao invés de pulseIn(), permitimos o arduino executar outras tarefas.

No Arduino UNO (328p) – Pinos 2, 3

No ESP8266 – Todos os pinos GPIO ( - GPIO16 )

O código desenvolvido está disponibilizado em:https://github.com/OpenDevice/opendevice-examples/tree/master/IoTCar/firmware

Page 53: Que tal Hackear seu carro e plugá-lo na nuvem ?!

Arduino / Demo

Setup ESP8266 – Captura os dados vindos da central de

controle, faz a decodificação e envia para o Arduino via Serial/UART;

O ESP8266 também disponibilizará os dados para o App (usando a lib OpenDevice), e permite um sistema de detecção automática no App.

Arduino UNO – Responsável pelo display LCD (usando a lib Tvout).

Page 54: Que tal Hackear seu carro e plugá-lo na nuvem ?!

Demo / Esquemático

NÃO ESQUEÇA , TODOS OS GNDs DEVEM SER CONECTADOS !

Page 55: Que tal Hackear seu carro e plugá-lo na nuvem ?!

Demo / Video

Page 56: Que tal Hackear seu carro e plugá-lo na nuvem ?!

Demo / App

Page 57: Que tal Hackear seu carro e plugá-lo na nuvem ?!

Demo / Esquemático

Page 58: Que tal Hackear seu carro e plugá-lo na nuvem ?!

Dúvidas ?

Page 59: Que tal Hackear seu carro e plugá-lo na nuvem ?!

Contatos

E-mail: [email protected] [email protected]

Facebook: /ricardojlrufino /opendevice

Page 60: Que tal Hackear seu carro e plugá-lo na nuvem ?!

Obrigado pela sua atenção.