/gree-air-conditioner-passcode

格力空调开机密码暴力破解(Arduino)

Primary LanguageArduinoGNU General Public License v2.0GPL-2.0

格力空调开机密码暴力破解

  • 适用于KW-35
  • 开心就好,其实没有什么实际用途

起因

坑爹的华工,等了六年终于装了空调,然而却是一个需要开机密码的空调。据学校不知道什么无聊部门的规定,安装空调的第二年才能用,但是那时候我已经毕业了……

开机密码获取的(正规)方法:

  1. 安装一个叫“格力掌上通”的应用,并登录
  2. 输入大量空调安装信息(如业主信息、安装工程编号、安装地点等)和空调条码,应用会验证信息的正确性并查询该空调的开机密码(应该是查询了格力专门建的数据库)
  3. 使用专用的密码遥控器输入密码完成空调激活

步骤1需要和当地供应商申请,绑定手机号;步骤2需要知道空调安装的所有信息;步骤3需要特殊的遥控器。显然这些步骤是由空调安装人员完成的,目的是保证空调安装人员来自有安装资质的正规安装队,用户理论上不需要接触这个过程。

实现

前两步很难搞定,因此选了第3步为突破口。万能淘宝上有密码遥控器卖。通过分析密码遥控器的红外信号,构造出任意组合的密码信号,暴力破解密码。密码有6位,总共1,000,000种组合。

使用

  • 单片机:Genuino(类似于Arduino Uno)
  • 红外发射模块:TSAL6200,TX接至DIGITAL (PWM~)3~
  • 红外收发库:IRRemote
  • 需修改IRremoteInt.h的RAWBUF值,#define RAWBUF 255

硬件均从SeeedStudio购买

数据格式

  • 密码发送采用类似NEC的格式。
  • 高电平宽度为650us,低电平宽度为550us或者1650us,650 550被代表逻辑0,650 1650代表逻辑1。
  • 整体采用反向译码(从右向左读)。总共发送139个高低电平,6位密码写在最右的32bits(64个高低电平)数据中。
  • 从右读起,最开始的4bits用作数据校验,校验方式为当前要发送数据的第2、4、6位与0x1011求和并抛弃溢出得到的结果。接下来的24bits为数据位(直接把密码每一位的10进制数写成16进制),然后是4bits的固定值0x0000
  • 从左读起,前75个高低电平为固定值,9000us和4500us作为引导序列,接下来是0x0000000F对应的电平,接下来是0x1101,但是最后一个1的低电平宽度为20,000us,之后再补1个高电平。

数据示例

发送数据123456:
(从左向右75个电平值为固定值) 9000 4500 650 550 650 550 650 550 650 550 650 550 650 550 650 550 650 550 650 550 650 550 650 550 650 550 650 550 650 550 650 550 650 550 650 550 650 550 650 550 650 550 650 550 650 550 650 550 650 550 650 550 650 550 650 550 650 550 650 1650 650 1650 650 1650 650 1650 650 1650 650 1650 650 550 650 20000 650 (到此为止的部分是固定的,接下来的部分从右向左读) (固定为0)<-- 550 650 550 650 550 650 550 650 (数字6)<-- 550 650 1650 650 1650 650 550 650 (数字5)<-- 1650 650 550 650 1650 650 550 650 (数字4)<-- 550 650 550 650 1650 650 550 650 (数字3)<-- 1650 650 1650 650 550 650 550 650 (数字2)<-- 550 650 1650 650 550 650 550 650 (数字1)<-- 1650 650 550 650 550 650 550 650 (数字7,123456的第2、4、6位分别为2、4、6,与0x1011加和并丢掉进位的结果为0x0111)<-- 1650 650 1650 650 1650 650 550 650

致命提示

空调每收到1次错误密码就会进入Cool Down状态,长度为15秒,在这期间不接受任何密码输入。因此最差情况需要尝试1,000,000 * 15 / 86400 = 173.61天。结论:本方法不行,开心就好。呵呵。