某10

分类 逆向工程 下的文章

Motorola Advisor Pager 串口通信解析

Motorola Advisor 的串口通信不像是常见串口设备的命令/响应模式,而像是一个固定的步骤流程。
在与设备同步后必须按照固定步骤发送和接收数据。以下是详细步骤解析:


通信方向定义

  • => 上位机到设备
  • <= 设备到上位机

串口通信维护流程(协议)

上位机首先需要循环发送 0xAA 并等待设备响应 0x32,即为同步完成,可以开始执行流程。
注:设备响应的 0x32 对应的 ASCII 为数字 2,可能是型号或者固件版本?

  1. => 维护配置: {F0, F1, F2, F3} (4 字节)F0-F3 定义请查看后面的“维护配置定义”。
  2. <= 设备状态:T/B/N/P/D(1 字节) 状态解释请查看后面的“设备状态表”。
  3. <= Inventory Control Number(10 字节) 只有设置了 F0.bit1 才会返回。
  4. <= Serial Number (10 字节)只有设置了 F0.bit0 才会返回。
  5. => 发送密码 (10 字节,不足部分用空格补齐)只有设备处于 P 状态才需要发送密码。
  6. <= 如果密码正确或无需密码(N 状态),会返回 0xbb。

    • 密码错误时,会返回重试计数(0x01~0x08)当计数达到 0x08 时,设备进入 D 状态。
    • 密码错误时,设备将复位,当前流程将结束,需要重新同步开始新一轮通信。
    • 密码正确时不会自动清除重试计数器,需要手动修改 codeplug。
  7. 发送要执行的代码,长度为 F3*2。发送完设备会自动按照 F2 设置的地址执行代码

维护配置定义

F0 位域定义:

位功能值说明
bit0请求 Inventory Control Number1=请求请求返回库存控制编号
bit1请求 Serial Number1=请求请求返回序列号
bit2–bit4未使用——
bit5结束流程1=结束结束通信流程并进入默认运行模式
bit668HC05 RAM1 映射1=RAM
0=用户 ROM
地址范围 $0100–$017F
bit768HC05 RAM0 映射1=RAM
0=用户 ROM
地址范围 $0020–$004F

F1: RAM 加载地址,上位机下发的代码会被写入到这个地址。
F2: 执行入口地址
F3: 待接收代码长度,以半字为单位(字节数 = F3 * 2)

设备状态表

状态含义判断条件
T测试,u2 通信错误?codeplug[0] != 0xe2
&& send_u2_command(0x8e) != 0xc1
B空白,codeplug 为空codeplug[0] != 0xe2
&& send_u2_command(0x8e) == 0xc1
N无密码codeplug[0] == 0xe2
&& codeplug[37].bit5 == 0
P有密码,需要密码才能加载并执行代码。如果密码重试次数过多,将进入 D 状态codeplug[0] == 0xe2
&& codeplug[37].bit5 == 1
&& codeplug[37].bit3 == 0
D禁用,设备被锁定无法使用,无法通过串口维护流程解锁codeplug[0] == 0xe2
&& codeplug[37].bit5 == 1
&& codeplug[37].bit3 == 1
阅读更多

A1706 820-01375 AMS983 JC01-0 逆向

J形排线上包含一些用于保护 IO 的 ESD 器件,一颗猜测是存储固件或者配置的 NOR SPI FLASH 和一颗 STOD32A AMOLED供电芯片。

将这跟J形排线去除阻焊层扫描正反面后,结合 A1706 的原理图分析得到这根排线大致的连接器定义。
STOD32A 没有公开的 datasheet (只有Data brief), 一番搜索发现 SGM3833A 应该可以直接替换它,这部分定义就来自于它的 datasheet。

在此感谢 yukidama 的工作,本文内容部分参考了它的 schlitzblende 项目。

阅读更多

小米运动APP的坎坷抓包之旅

0x00

今天在研究小米手环3 NFC版的模拟Mifare卡功能,发现模拟出的卡0扇区是只读的,遂在网上搜索操作0扇区方法。
经过一番搜索 发现了这位老哥的一篇文章《小米手环3 NFC 自定义 门禁卡数据》。仔细阅读了一下,发现这位老哥的思路可行。当我架好了Fiddler,安卓端设置好代理,安装好Fiddler的根证书,开始抓包的时候却发现Fiddler并不能解密,而且小米运动app也无法正常通信。尝试用浏览器开了个网页检查了下证书,发现Fiddler证书配置正确,并且可以正常抓包。猜测是App设置了只信任系统中的证书。
无奈,只好对APK方面进行动手。

阅读更多