CAN 통신

CAN 리버스 엔지니어링 (자동차 및 산업용 기기 분석)

임베디드 친구 2025. 3. 6. 09:16
728x90
반응형

CAN 리버스 엔지니어링 (자동차 및 산업용 기기 분석)

1. CAN 리버스 엔지니어링이란?

CAN(Controller Area Network) 통신은 자동차, 산업용 기기, 로봇 등의 다양한 분야에서 널리 사용되는 직렬 통신 방식입니다. 하지만 제조사들은 CAN 메시지의 의미를 공개하지 않는 경우가 많아 특정 기기나 자동차의 동작을 분석하려면 리버스 엔지니어링이 필요합니다.

CAN 리버스 엔지니어링이란, 캡처된 CAN 데이터에서 의미 있는 정보를 추출하고, 특정 메시지가 어떤 역할을 하는지 분석하는 과정을 의미합니다. 이를 통해 차량의 속도, RPM, 센서 데이터 등을 해석하거나, 특정 제어 신호를 찾을 수 있습니다.


2. CAN 데이터 스니핑 기법

2.1 CAN 데이터 캡처 도구

CAN 데이터를 캡처하기 위해서는 다음과 같은 장비가 필요합니다:

  • CAN 인터페이스: PC와 CAN 네트워크를 연결하는 장치 (예: Peak-CAN, USBtin, Kvaser, Seeed CAN-Bus Shield 등)
  • 소프트웨어: CAN 데이터를 실시간으로 모니터링하고 분석하는 도구 (예: Wireshark, SavvyCAN, CANalyzr, BusMaster 등)

2.2 CAN 데이터 스니핑 방법

(1) 차량의 OBD-II 포트를 이용한 캡처

자동차의 경우 OBD-II 포트를 통해 CAN 데이터에 접근할 수 있습니다. 일반적으로 다음과 같은 방법을 사용합니다.

candump -t absolute -L can0

위 명령어를 실행하면 candumpcan0 인터페이스에서 캡처된 CAN 메시지를 실시간으로 출력합니다.

(2) 산업용 기기의 CAN 네트워크 분석

산업용 기기의 경우, 특정 기기의 CAN 단자를 찾아 직접 연결하거나 중간에 스니핑 장치를 삽입하여 데이터를 캡처할 수 있습니다. 하드웨어 인터페이스와 네트워크 구성을 파악하는 것이 중요합니다.


3. Unknown CAN 메시지를 해석하는 방법

캡처한 CAN 메시지는 일반적으로 ID(식별자) + 데이터 페이로드 형식으로 구성됩니다.

예를 들어, 아래와 같은 CAN 메시지가 캡처되었다고 가정합니다.

(1604325281.123456) can0  0x123   [8]  01 23 45 67 89 AB CD EF

각 필드의 의미는 다음과 같습니다.

  • 1604325281.123456: 타임스탬프
  • can0: 인터페이스 이름
  • 0x123: CAN ID (메시지의 식별자)
  • [8]: 데이터 길이 (DLC, Data Length Code)
  • 01 23 45 67 89 AB CD EF: 실제 데이터 페이로드

3.1 데이터 패턴 분석

Unknown CAN 메시지를 해석하려면 먼저 패턴을 찾는 것이 중요합니다. 대표적인 분석 방법은 다음과 같습니다.

  • 주행 속도에 따른 데이터 변화를 관찰: 차량이 정지 상태에서 출발할 때 특정 ID의 값이 변화하는지 확인
  • 액션 트리거 기반 캡처: 버튼을 누르거나 특정 동작을 수행할 때 변화하는 메시지 추적
  • 데이터 길이에 따른 분류: 동일한 길이의 데이터 그룹을 묶어서 공통 패턴 분석

3.2 주행 속도 메시지 찾기 예제

만약 자동차에서 속도 데이터를 찾으려 한다면, 차량을 정지 상태에서 서서히 가속하면서 CAN 데이터를 수집합니다. 그런 다음, 값이 증가하는 ID를 찾습니다.

예제 데이터:

(1604325281.123456) can0  0x200   [8]  00 00 00 00 00 00 00 00
(1604325282.123456) can0  0x200   [8]  00 00 00 00 00 00 00 10
(1604325283.123456) can0  0x200   [8]  00 00 00 00 00 00 00 20

위 데이터를 보면 마지막 바이트(00 10, 00 20)가 점진적으로 증가하고 있음을 확인할 수 있습니다. 이 ID(0x200)가 차량 속도 데이터일 가능성이 높습니다.


4. ID Reverse Engineering 및 패턴 분석

4.1 주요 분석 기법

ID를 리버스 엔지니어링하는 방법에는 여러 가지가 있지만, 가장 대표적인 방법은 다음과 같습니다.

  1. 고정 ID와 동적 ID 구분: 정지 상태에서도 계속 변하는 ID는 센서 데이터일 가능성이 높고, 특정 이벤트에서만 발생하는 ID는 제어 신호일 가능성이 큽니다.
  2. ID 간의 관계 분석: 특정 ID가 변경될 때 다른 ID도 함께 변화하는 경우 상관관계를 분석하여 기능을 추론할 수 있습니다.
  3. 바이트 단위 비교: 같은 ID의 데이터에서 특정 바이트가 반복적으로 증가하거나 감소하는 경우 해당 바이트가 센서 값일 가능성이 높습니다.

4.2 실전 예제: RPM 데이터 찾기

아래는 RPM 데이터를 찾기 위한 실전 예제입니다.

(1604325281.123456) can0  0x201   [8]  00 00 05 DC 00 00 00 00
(1604325282.123456) can0  0x201   [8]  00 00 06 40 00 00 00 00
(1604325283.123456) can0  0x201   [8]  00 00 07 00 00 00 00 00

위 데이터를 보면 0x201 메시지의 세 번째, 네 번째 바이트(05 DC, 06 40, 07 00)가 변화하고 있습니다. 이를 10진수로 변환하면 각각 1500, 1600, 1792이므로 RPM 값일 가능성이 큽니다.

rpm_hex_values = ['05DC', '0640', '0700']
for hex_value in rpm_hex_values:
    print(int(hex_value, 16))

위 Python 코드를 실행하면 10진수 값으로 변환할 수 있습니다.


5. 결론

CAN 리버스 엔지니어링은 자동차나 산업용 기기의 CAN 네트워크에서 유용한 정보를 추출하는 기술입니다. 주요 과정은 다음과 같습니다.

  1. CAN 데이터를 캡처하고 분석 도구를 활용하여 메시지를 수집
  2. Unknown CAN 메시지의 패턴을 분석하고 특정 동작과의 관계를 찾음
  3. 속도, RPM, 센서 데이터 등의 메시지를 추출하고, 이를 실전 활용

이를 통해 자동차 속도 계기판을 만들거나 특정 기능을 제어하는 것이 가능해집니다. 하지만 CAN 네트워크 분석은 제조사별로 다르므로 신중한 접근이 필요합니다.

반응형