Skip to content

Latest commit

 

History

History
456 lines (339 loc) · 25.1 KB

File metadata and controls

456 lines (339 loc) · 25.1 KB

信号线逆向工程实验

说是方便后人进一步研究。

本篇文章为逆向南科大二期宿舍门锁的过程记录,因为整个逆向的过程类似于实验,所以这里用实验的方式来规划这篇文章。


0. 目录


1. 引言

1.1. 研究背景和目的

门锁系统是现代宿舍、办公楼等场景中常见的安防设备,其核心功能包括用户身份验证、状态指示和门锁控制等。

本实验的背景是 Freedorm 项目,这是一个专注于宿舍智能化的开源套件,通过改装传统宿舍门锁,实现 蓝牙靠近解锁、远程控制 等智能功能。为了支持这一套件的开发,我们需要对门锁系统的信号线和通信协议进行深入的逆向分析,明确门锁模块与门禁控制器的交互机制,并验证改装的可行性。

本次实验以南科大二期宿舍门锁为研究对象,采用逻辑分析仪和相关工具,对门锁的信号线功能及通信协议进行逆向分析。在此过程中,通过对关键信号线(D1、D0、LED、LOCK)的波形捕获与分析,尝试解密门锁模块与门禁控制器之间的交互机制,以及不同刷卡动作的反馈逻辑。

文章将围绕以下几个核心问题展开:

门锁信号线的基本功能是什么? 门锁模块和门禁控制器之间采用何种通信协议? 不同刷卡动作如何影响信号线的传输内容和门锁行为?


2. 实验背景

为了深入理解二期宿舍门锁的工作原理及其信号传输机制,本实验对门锁的硬件结构及信号交互进行逆向分析。以下为相关背景信息:

2.1. 二期宿舍门锁的基本功能

二期宿舍门锁是智能门禁系统的一部分,主要功能包括:

  • 住户身份验证:通过 NFC 读取住户卡片信息,实现刷卡开门。

NFC(近场通信):一种短距离无线通信技术,用于卡片数据的读取

  • 多种交互方式:支持校园卡、宿管卡(不支持按键密码)开门。
  • 状态反馈:通过指示灯、蜂鸣器显示刷卡结果,并通过电机控制门锁的开关状态。

2.2. 二期宿舍门锁的基本结构

二期宿舍门锁的硬件结构设计结合了电子控制与机械操作,主要由以下模块组成:

  1. 电子控制模块

    • 门锁的核心组件,主要负责:
      • NFC 读卡模块 位于门锁的外部面板,用于读取用户校园卡、门禁卡等认证设备的信息。
      • 数据处理:接收 NFC 模块读取的信息,通过信号线(D1、D0)传输至门禁控制器进行身份校验。
      • 信号执行:根据门禁控制器返回的结果,控制机械模块执行开锁或关锁操作。
      • 状态反馈:通过 LED 指示灯显示门锁状态(例如刷卡成功/失败),并通过蜂鸣器提供声音提示。
  2. 机械模块

    • 机械模块负责实现门锁的物理动作,具体包括:
      • 门把手控制:通过电机驱动,解锁或锁定门把手,实现开门或锁门操作。
      • 反锁功能:支持内部反锁机构,确保用户在内部能通过机械手动操作反锁装置。
      • 锁芯动作:根据控制信号调整锁芯状态,保障门锁的安全性和操作便利性。
  3. 通信接口

    • 门锁通过一根 8pin 的 PH2.0 排线与外部系统通信

PH2.0 排线:一种常见的扁平电缆接口类型。

  • 二期宿舍门锁

2.3. Freedorm桥接板的基本功能

Freedorm 桥接板是一款用于信号截取的中间件硬件,功能包括:

  • 信号隔离与中继:可以无干扰地截取信号并传递至逻辑分析仪或其他设备。
  • 调试工具支持:便于分析门锁与门禁控制器之间的信号交互。 本实验通过 Freedorm 桥接板连接门锁和逻辑分析仪,完成信号采集。 Freedorm桥接板

2.4. 逻辑分析仪的基本功能

逻辑分析仪是一种电子测试工具,用于捕捉和分析数字信号,核心功能包括:

  • 信号采集:对多条信号线的状态进行高精度采样。
  • 波形分析:实时显示信号的波形数据,用于解析数据协议。
  • 协议解码:支持多种通信协议的解析,便于确认信号的时序和逻辑关系。 本实验使用 Pulseview 作为逻辑分析仪的上位机软件,采集并分析门锁信号线数据。 逻辑分析仪

3. 实验器材

序号 器材名称 用途说明
1 二期宿舍门锁 研究对象
2 Freedorm桥接板 用来“截取”信号
3 逻辑分析仪 用来获取分析信号
4 数据线 用来连接逻辑分析仪和上位机电脑
5 杜邦线 用来模拟短接调试线
6 装有Pulseview的电脑 Pulseview是开源逻辑分析仪上位机软件,用来分析信号
7 对应的门禁卡x3 用来执行刷卡成功动作
8 空白门禁卡 用来执行刷卡失败动作
9 (optional) 宿管卡 -

最后安装好的实验器材如下图所示: 实验器材

4. 详细的可执行实验步骤

4.1. 硬件准备

  1. 准备以下器材:

    • 门锁模块(实验对象)。
    • Freedorm桥接板
    • 逻辑分析仪
    • 杜邦线(用于连接信号线和逻辑分析仪通道)。
    • 电脑(安装 Pulseview 软件)。
    • 电源适配器(提供 12V 电源)。
    • 各种门禁卡(用户卡、宿管卡、空白卡等)。
  2. 按照以下步骤连接硬件:

    • 将门锁模块的 8-pin PH2.0 排线连接到 Freedorm 桥接板。
    • 使用杜邦线将桥接板上的信号线(D1、D0、LED、LOCK)连接到逻辑分析仪的输入通道(CH1~CH4)。
    • 将逻辑分析仪连接到电脑的 USB 接口。
    • 通过 12V 电源适配器为门锁模块供电,确保 GND 接地。
  3. 打开电脑上的 Pulseview 软件,确认逻辑分析仪已被正确识别。

4.2. 信号线静态电平测量

  1. 使用万用表测量信号线的静态电平:

    • 测量 D1、D0、LED、LOCK 四根信号线对 GND 的电压值。
    • 记录每根信号线的电平值。
  2. 在 Pulseview 软件中设置通道:

    • 将 CH1 设置为 D1,CH2 设置为 D0,CH3 设置为 LED,CH4 设置为 LOCK
    • 配置采样率为 1MHz,时基为 500ms/格。

4.3. 信号线动态波形捕获

  1. 在 Pulseview 软件中点击 开始捕获
  2. 刷用户门禁卡,观察 D1 和 D0 的波形变化。
  3. 停止捕获并保存波形,命名为 data_user_success.sr
  4. 重复以下刷卡动作,逐一捕获波形并保存数据:
    • 宿管卡 → 命名为 data_admin_success.sr
    • 陌生人卡 → 命名为 data_stranger_fail.sr
    • 空白卡 → 命名为 data_blank_fail.sr

4.4. 特殊信号短接实验

  1. 准备杜邦线进行短接实验:
    • 使用杜邦线将 D1 和 GND 短接,记录门锁是否有反应。
    • 使用杜邦线将 D0 和 GND 短接,记录门锁是否有反应。
    • 使用杜邦线将 LED 和 GND 短接,观察指示灯的颜色变化。
    • 使用杜邦线将 LOCK 和 GND 短接,检查门锁是否开启。
  2. 对每次短接实验进行捕获,保存波形,命名规则为 data_{信号线名称}_short.sr,例如:
    • data_D1_short.sr
    • data_D0_short.sr

4.5. 多次刷卡验证

  1. 按以下组合进行刷卡动作验证:
    • 短接信号线 + 刷用户卡:例如,短接 D1 和 GND 后刷用户卡。
    • 短接信号线 + 刷宿管卡:例如,短接 D0 和 GND 后刷宿管卡。
  2. 捕获并保存每次组合实验的波形,命名规则为 data_{信号线名称}_{刷卡动作}.sr,例如:
    • data_D1_user.sr
    • data_D0_admin.sr

4.6. LED 和 LOCK 线功能测试

  1. 刷用户门禁卡,观察以下情况:
    • 捕获 LED 信号,记录是否变为绿色或红色。
    • 捕获 LOCK 信号,记录门锁是否开启。
  2. 刷宿管门禁卡,重复上述实验步骤。
  3. 刷陌生人门禁卡,重复上述实验步骤。

4.7. 数据存档

  1. 将所有捕获的波形数据保存到指定文件夹(如 reverse_engineering/data/)。
  2. 确保所有文件按照命名规则整理:
    • data_{刷卡动作}_{反馈类型}.sr
    • 例如:data_user_success.sr, data_stranger_fail.sr

4.8. 数据分析

  1. 打开 Pulseview 软件,加载捕获的波形数据文件。
  2. 使用以下步骤分析数据:
    • 检查 D1 和 D0 的脉冲模式:
      • 确定每次刷卡对应的二进制编码序列。
      • 验证脉冲宽度是否为 200~250us,间隔是否为 2150us。
    • 确认 LED 和 LOCK 的功能:
      • 分析刷卡成功和失败时的 LED 和 LOCK 波形变化。
  3. 使用表格总结以下内容:
    • 每种刷卡动作对应的反馈(门锁、LED 和蜂鸣器)。
    • 信号线功能表:总结每根信号线的用途。

5. 实验结果

5.1. 信号线电平

通过测量对GND电平,得到下表:

D1 D0 LED LOCK
颜色 绿
电平 5V 5V 3V3 3V3

5.2. 逻辑分析仪数据

通过执行刷卡动作,逻辑分析仪得到一些数据,命名规则为data_刷卡动作_对应反馈

刷卡动作有(比较感兴趣的进行了加粗):

  1. admin:宿管卡
  2. user:本宿舍住户校园卡
  3. stranger:陌生人校园卡
  4. touch_num:点击门锁面板密码键盘数字键
  5. touch_ok:点击门锁面板密码键盘确认键
  6. blank:空白UFUID-IC卡
  7. miband9:小米手环9模拟IC卡
  8. D1: 短接D1和GND
  9. D0: 短接D0和GND
  10. LED: 短接LED和GND
  11. LOCK: 短接LOCK和GND
  12. D1&user: 短接D1和GND,刷本宿舍住户校园卡
  13. D0&user: 短接D0和GND,刷本宿舍住户校园卡
  14. LED&user: 短接LED和GND,刷本宿舍住户校园卡
  15. LOCK&user: 短接LOCK和GND,刷本宿舍住户校园卡
  16. D1&admin: 短接D1和GND,刷宿管卡
  17. D0&admin: 短接D0和GND,刷宿管卡

对应反馈有:

  1. success:门打开
  2. fail:门不打开
  3. blank:没有反馈,门不打开
  4. locked:门锁上了,刷卡刷不开

5.2.1. 刷卡动作-反馈类型对应表

通过实验,得到每种刷卡动作的对应反馈表,如下表所示:

刷卡动作 门锁 面板LED 蜂鸣器 反馈类型
admin 开,6s后锁上 持续6s绿色 长滴一声 success
user 开,6s后锁上 持续6s绿色 长滴一声 success
stranger 不开 红色闪烁3s 长滴一声 fail
touch_num 不开 无反应 短滴一声 blank
touch_ok 不开 绿色闪烁5s fail
blank 不开 无反应 blank
miband9 不开 无反应 blank
D1 不开 保持蓝色 blank
D0 不开 保持蓝色 blank
LED 不开 蓝色变成绿色,并保持绿色 blank
LOCK 常开 保持蓝色 success
D1&user 不开 绿色闪烁一下,1s 长滴一声 locked
D0&user 不开 绿色闪烁一下,1s 长滴一声 lockde
LED&user 开,6s后锁上 持续6s绿色 长滴一声 blank
LOCK&user 本来就是常开的 持续6s绿色 长滴一声 success
D1&admin
D0&admin

有太多种可能的刷卡动作,因此选取了感兴趣的11个刷卡动作,用逻辑分析仪获取数据。 每个数据对应一个动作;有4个通道,对应D1、D0、LED、LOCK。储存在data文件夹下


6. 实验数据分析

6.1. 硬件分析

在开始分析数据之前,我们需要了解硬件的基本情况,会对数据分析有所帮助。

dorm_pcb

门锁模块的核心组件包括一颗 STM32f030C8T6 微控制器(主控芯片)、一颗丝印为 GT23SC5 的恩智浦 NFC 芯片(负责读取卡片信息),以及一颗 TI ULN2003A 七路反向器(推测用于处理信号线的数据接收与发送)。

6.2. 信号线的基本功能

首先查询制造商智慧赛宁的资料,也没有翻到相关的资料,只能自己动手了。

智慧赛宁logo

这一部分通过pcb板子上的丝印已经大概了解,8pin的ph2.0排线中,有两根线被剪断,分别是BUZ和SENSE,剩下的6根线分别是:GND、D1、D0、LED、LOCK、12V。

dorm_pcb_silkprint dorm_pcb_silkprint

暂时不浪费时间在没用到的线(BUZ和SENCE)上和完全已知(12V和GND)的线上,我们只关注D1、D0、LED、LOCK这四根线。

通过查看按门板上数字的逻辑分析仪的数据 data_touch_num_1234567890#_blank,这个数据是我分别单独按了1234567890#这11个数字键(没有按确认键*

得到波形和对应数字二进制编码如下:

数字键1 0001

num_1

数字键2 0010

num_2

数字键3 0011

num_3

数字键4 0100

num_4

如果你对二进制足够熟悉,那应该能看到这些数字都是从左到右(大端序)四位二进制编码

大端序:一种数据排列方式,最重要的位排在数据流的开头。

6.2.1. 按键对应编码表

经过多次实验和统计,门板上的数字键的二进制编码如下:

门板按键 数字 二进制编码
1 1 0001
2 2 0010
3 3 0011
4 4 0100
5 5 0101
6 6 0110
7 7 0111
8 8 1000
9 9 1001
0 0 0000
*(确定键) 10 1011
# (不清楚功能) 11 1010

所以D1和D0的功能确定了,D1是数据传输线,比特1;D0是数据传输线,比特0。

接下来我们来看看LED和LOCK这两根线的功能。

我们可以观察刷卡成功和失败的数据(data_user2_success.sr data_stranger_fail.sr):

data_user2_success 回顾上面的刷卡动作-反馈类型对应表,刷卡成功后,LED保持绿色6s,门锁打开,6s后锁上。 于是初步猜测LED是控制门锁面板指示灯的。LOCK是控制门锁电机状态的,低电平打开门。 data_stranger_fail 同样回顾上面的刷卡动作-反馈类型对应表,刷卡失败后,LED闪烁红色3s,门锁不打开,发出长滴一声。对应LED振荡3次,LOCK保持高电平。

所以我们可以初步确定LED和LOCK的功能,LED是控制门锁面板指示灯,LOCK是控制门锁电机状态,低电平门锁打开。

但是似乎LED还有更细节的功能,比如为什么有时候是低电平是绿色,有时候是红色呢?时间有限,我不去深究了。

6.2.2. 信号线功能表

总结来说,假如GND和12V这两根线完全就是提供电源,6根线的功能如下:

pcb丝印 信号线颜色 功能
D1 数据传输线,比特1
D0 绿 数据传输线,比特0
LED 控制门锁面板指示灯
LOCK 控制门锁电机状态
GND 接地
12V 12V电源

6.3. 确定数据传输线的通讯协议

正如上面 所说,D1和D0分别是数据传输线,比特1和比特0。那么我们可以初步确定这是一种魔改的二进制通讯协议。

没有时钟信号,单次脉冲宽度200~250us,脉冲见间隔2150us,D1和D0不会同时出现脉冲,D1代表二进制1,D0代表二进制0,按照大端序(先出现的是MSB-最高有效位)的顺序传输二进制数据。

GPT说这不是一个标准的有规范的通讯协议,而是一种自定义的通讯协议,Freedorm项目的产品定义不需要用到这个通讯协议,所以这里我就不深究了。

6.4. 确定数据传输和开门的流程

在确定开门流程的细节之前,需要先了解一下门锁的工作架构。

6.4.1. 门锁物理架构

经过我的观察,门锁的物理架构如下:

  1. 连接门锁的8pin ph2.0排线穿过门体内部,…… cable.jpg
  2. 通过一个弹簧铠甲管穿过进入墙体,…… cable_case.jpg cable_hole.jpg
  3. 从墙体里出来,进入黑色理线管,…… door.jpg
  4. 黑色理线管到走廊上方理线槽,…… wire_duct.jpg
  5. 理线槽最终走到每层楼的弱电井。 elv_riser.jpg

6.4.1. 门锁逻辑架构

以下是基于数据和实验的猜测,没有找到任何资料交叉验证,可能有部分错误,抛砖引玉,仅供参考。

门锁模块本身是一个独立的模块,电源由外部12v供应,硬件主要包含NFC验证电路、电机,还有指示灯。

但是门锁模块本身不负责具体的住户身份校验,只负责执行开门和关门的操作。

具体的住户身份校验是由弱电井中的门禁控制器负责的,门禁控制器负责接收门锁模块的数据传输线(D1、D0)的数据,校验身份,然后通过LED和LOCK控制门锁模块的指示灯和电机。

然后门禁控制器接入网络,可以远程更新住户信息,也可以远程开门。

一个完整的开门流程如下:

  1. 住户刷卡
  2. 门锁模块通过NFC读取信息,将信息通过D1、D0传输给门禁控制器
  3. 门禁控制器校验信息,如果通过,通过LED和LOCK控制门锁模块的指示灯和电机
  4. 门锁模块执行开门操作

流程细节如下:

对应流程的逻辑分析仪数据为data_user2_success.sr

data_user2_success

通过分析6次重复刷卡数据data_user_6_success.sr,每一次刷卡成功的数据传输都是一样的,共34bit,所以我们可以初步确定这是在传输身份信息。

更进一步,分析了宿舍三位室友的刷卡数据,其中两位的验证信息只有一位不同,正好两位室友都没有补过卡,所以这两张卡都是开学一起被办理的,点到为止。

6.5. 确定不同刷卡动作下的数据传输线的具体内容

由于此次逆向的背景是Freedorm项目,目前为止已经得到想要的东西了,这部分留给对此更加感兴趣的人。

7. 总结

实验结论

本实验对南科大二期宿舍门锁信号线进行了详细的逆向分析,通过实验和数据验证得出了以下结论:

  1. 信号线功能

    • D1 和 D0:为数据传输线,分别表示二进制 10,采用无时钟、自定义的二进制通信协议,数据以大端序(MSB 优先)传输,单次脉冲宽度为 200~250us,间隔为 2150us。
    • LED 和 LOCK:分别控制门锁的指示灯和电机,LED 提供刷卡结果的状态反馈(绿色/红色),LOCK 控制门锁的开关状态(低电平解锁)。
  2. 通讯协议

    • 确定 D1 和 D0 的通信协议是一种非标准、自定义的二进制传输协议,不依赖时钟信号。
    • 每次刷卡成功传输的数据长度为 34 位,包含用户的身份信息。
  3. 门锁与门禁控制器的交互流程

    • 门锁模块通过 NFC 读取卡片信息后,将数据通过 D1、D0 发送给门禁控制器。
    • 门禁控制器完成身份校验后,通过 LED 和 LOCK 返回结果,控制门锁状态。

应用价值

此次实验为进一步研究和改造门锁通信协议提供了基础,为 Freedorm 项目的功能扩展(如蓝牙解锁、远程控制)打下了坚实的技术依据。

实验结论和分析不仅适用于宿舍门锁,也可为其他类似设备的逆向工程提供参考。