Что делать, когда хочется взломать пароль, крякнуть сенсор и попробовать Python? Ч1: исследуем ёмкостный touch screen

в 8:05, , рубрики: Capacitive touch screen, Focal Tech, FT6336DMB, timeweb_статьи, взлом пароля, емкостный сенсорный экран, кит Айфон 6, кряк, крякинг, логический анализатор, обратная разработка
Что делать, когда хочется взломать пароль, крякнуть сенсор и попробовать Python? Ч1: исследуем ёмкостный touch screen - 1

Он ловко держал инструменты и припаивал последний проводок. Весь такой пушистый и красивый. Дымок витиевато поднимался вверх, а в енотской разливался приятный запах канифоли…


Однажды нам с Кряком попался симпатичный смартфон. Стало любопытно залезть в него, установить приложения и продолжить эксперименты с ним. Но путь преградил экран с паролем. Потыкав пальцем и осознав, что попыток больше трёх, мы обрадовались, ведь это увеличивало наши шансы. Телефон временно отправился на полку, а Кряк по своим делам. Мне нужно было ещё доделать текущие проекты. А этот 100% опять что-то сломал.

В один из дней меня внезапно посетила интересная мысль.

– Давай сюда, тебе понравится! – зову я пернатого коллегу.
– …?
– Совмещаем интересы: исследуем сенсор, пишем приложение на Питоне и взламываем пароль! Попробуем новое, заодно получим доступ! А?! Круто?
Утёнок явно заинтересовался новой забавой и пошёл за своими инструментами.

Любопытно, что из этого получилось?)

Что делать, когда хочется взломать пароль, крякнуть сенсор и попробовать Python? Ч1: исследуем ёмкостный touch screen - 2

Какой интерфейс?

Просматривая схемы смартфонов, можно заметить, что интерфейс у контроллеров ёмкостного сенсора I2C, есть пара дополнительных линий (RST, INT) и интерфейс стандартный:

Alcatel 6043D.

Что делать, когда хочется взломать пароль, крякнуть сенсор и попробовать Python? Ч1: исследуем ёмкостный touch screen - 3

Explay A351.

Что делать, когда хочется взломать пароль, крякнуть сенсор и попробовать Python? Ч1: исследуем ёмкостный touch screen - 4

Huawei G620.

Что делать, когда хочется взломать пароль, крякнуть сенсор и попробовать Python? Ч1: исследуем ёмкостный touch screen - 5

ZTE Blade L130.

Что делать, когда хочется взломать пароль, крякнуть сенсор и попробовать Python? Ч1: исследуем ёмкостный touch screen - 6

Huawei-g6.

Что делать, когда хочется взломать пароль, крякнуть сенсор и попробовать Python? Ч1: исследуем ёмкостный touch screen - 7

Документации частенько нет либо она неполная, поэтому требуется обратная разработка.
Пожалуй, Кряк справится – специалист он хороший:

Что делать, когда хочется взломать пароль, крякнуть сенсор и попробовать Python? Ч1: исследуем ёмкостный touch screen - 8

– Печеньки?! ПЕЧЕНЬКИИИ!!!

Что делать, когда хочется взломать пароль, крякнуть сенсор и попробовать Python? Ч1: исследуем ёмкостный touch screen - 9

– Сначала займёмся делом. Мысли рационально.
– Но я всё равно хочу печеньку!
– Ладно.
[Перерыв на обед] …

Изучаем нашу жертву

Точную модель смартфона мы не определили. Какой-то китАйфон 6(S).

Что делать, когда хочется взломать пароль, крякнуть сенсор и попробовать Python? Ч1: исследуем ёмкостный touch screen - 10

Позже удалось выяснить, что при подключении по USB определяется как AQ5001. Видимо, вариантов подделок много.

Что делать, когда хочется взломать пароль, крякнуть сенсор и попробовать Python? Ч1: исследуем ёмкостный touch screen - 11

R7126_MainBoard_V3.0

Что делать, когда хочется взломать пароль, крякнуть сенсор и попробовать Python? Ч1: исследуем ёмкостный touch screen - 12

На задней крышке видим надписи FCC ID BCG-E2816A и Model A1586.

Что делать, когда хочется взломать пароль, крякнуть сенсор и попробовать Python? Ч1: исследуем ёмкостный touch screen - 13

Если поискать по FCC ID, то находится какая-то полезная информация. Но не для нашей подделки, а для оригинала. Экранчик и внутренности там несколько иные.

Что делать, когда хочется взломать пароль, крякнуть сенсор и попробовать Python? Ч1: исследуем ёмкостный touch screen - 14

У нашего пациента контроллер тача на шлейфе.

Что делать, когда хочется взломать пароль, крякнуть сенсор и попробовать Python? Ч1: исследуем ёмкостный touch screen - 15

Что делать, когда хочется взломать пароль, крякнуть сенсор и попробовать Python? Ч1: исследуем ёмкостный touch screen - 16

Focal Tech FT6336DMB. На шлейфе даже подписаны контакты. Удобно!
Есть пусть неполный, но даташит на контроллер. Какая удача!
FT6236 FT6336 FT6436L FT6436_Datasheet

Что интересного в даташите?

FT6X36 – контроллеры ёмкостной сенсорной панели со встроенным 16-битным микроконтроллером. Поддерживают одну точку касания и жест или две точки касания одновременно.

Что делать, когда хочется взломать пароль, крякнуть сенсор и попробовать Python? Ч1: исследуем ёмкостный touch screen - 17

Подключение довольно простое. Данные передаются по обычному I2C интерфейсу. 

Что делать, когда хочется взломать пароль, крякнуть сенсор и попробовать Python? Ч1: исследуем ёмкостный touch screen - 18

Контроллер сенсора может работать в нескольких режимах:

  1. Активный. В этом режиме он активно сканирует сенсорную панель. По умолчанию 60 кадров/с. Можно настроить быстрее или медленнее.
  2. Слежение (monitor mode). Панель сканируется на пониженной частоте (25 кадров/с, настраивается). В данном режиме большинство алгоритмов отключено. Работает простое определение наличия касания для перехода в активный режим.
  3. Спящий. Можно пробудить сигналом Reset.

Если у FT6X36 есть полезные данные по касаниям, то он информирует управляющий процессор сигналом прерывания (/INT).

Делаем стендик для работы

Даташит – это хорошо. Но в данном случае в нём описано далеко не всё, что нам нужно. Зато у нас есть рабочее устройство и логический анализатор.

– Кряк, позови монтажника! Пусть проводки к разъёму припаяет.
[Спустя 20 минут в енотской] …

Что делать, когда хочется взломать пароль, крякнуть сенсор и попробовать Python? Ч1: исследуем ёмкостный touch screen - 19

(рисунок доктора Штрих)

– О, нормально так припаял!

Что делать, когда хочется взломать пароль, крякнуть сенсор и попробовать Python? Ч1: исследуем ёмкостный touch screen - 20

Знакомьтесь. Это наш монтажник Кузя. В школе ему делали замечания по поводу воровства хлеба из столовки, но потом парень взялся за ум и стал прекрасным специалистом.

Что делать, когда хочется взломать пароль, крякнуть сенсор и попробовать Python? Ч1: исследуем ёмкостный touch screen - 21

С кошками он по-прежнему общается.
Получается вот такой удобный стендик:

Что делать, когда хочется взломать пароль, крякнуть сенсор и попробовать Python? Ч1: исследуем ёмкостный touch screen - 22

Анализатор подключаем с помощью гребёнки контактов. Штатная кнопка выключения неудобная, поэтому припаяем свою. Питание удобно подключать с помощью разъёма с ключом. Для перезапуска телефона достаточно просто разъединить и соединить обратно.

Чтобы проводки не отваливались, можно прикрепить их термоклеем. При необходимости он легко удаляется. Если есть такая цель, то можно сделать ещё аккуратнее. В данном случае хочется быстро сделать интересный проект без лишних усложнений.

Записываем и анализируем обмен

Рассмотрим обмен контроллера сенсорной панели с процессором телефона при включении, а потом немного реакцию на касания.

Файлы с записанным обменом можно найти здесь.

Анализ общей картины.

Что делать, когда хочется взломать пароль, крякнуть сенсор и попробовать Python? Ч1: исследуем ёмкостный touch screen - 23

В самом начале мы видим импульсы. Затем большая пауза. Это телефон включается. На курсоре 1 появляется стартовый экран.

Что делать, когда хочется взломать пароль, крякнуть сенсор и попробовать Python? Ч1: исследуем ёмкостный touch screen - 24

На курсоре 2 экран отключается. На курсоре 3 включаем экран кнопкой блокировки. На курсоре 4 экран вновь отключается. На курсоре 5 через некоторое время после включения экрана кнопкой блокировки пробуем касаться экрана (в тот момент начинается активность импульсов на линиях SDA и SCL). Смахиваем заставку вправо, потом пробуем вводить пароль.
При касаниях на лини INT наблюдается активность.

Что делать, когда хочется взломать пароль, крякнуть сенсор и попробовать Python? Ч1: исследуем ёмкостный touch screen - 25

Подключим I2C декодер и посмотрим, что там передаётся.
Подробнее изучим область в начале записи.

Что делать, когда хочется взломать пароль, крякнуть сенсор и попробовать Python? Ч1: исследуем ёмкостный touch screen - 26

До включения питания сенсора есть активность на SCL и SDA. На этом интерфейсе сидят ещё какие-то устройства. К тачу это не имеет отношения.

До появления заставки на экране и большой активности на SCL и SDA у нас есть 3 места малой активности. На картинке они отмечены стрелочками. Из-за масштаба левая стрелка указывает сразу на 2 места.

Что делать, когда хочется взломать пароль, крякнуть сенсор и попробовать Python? Ч1: исследуем ёмкостный touch screen - 27

Анализ общей картины подробнее

Через 100 мс после отпускания RST (линия перешла высокое состояние) INT тоже переходит в высокий уровень. Затем с 428й начинаются посылки для сенсорной панели (на интерфейсе сидят несколько устройств).

Что делать, когда хочется взломать пароль, крякнуть сенсор и попробовать Python? Ч1: исследуем ёмкостный touch screen - 28

После прочтения ДШ на контроллер тача всё становится понятнее. Что мы тут видим?
0b111000 – это I2C адрес контроллера тача
0х70 = 0b111000 и последний бит 0 (запись)
0х71 = 0b111000 и последний бит 1 (чтение)

Что делать, когда хочется взломать пароль, крякнуть сенсор и попробовать Python? Ч1: исследуем ёмкостный touch screen - 29

Сначала записываем адрес, из ктр будем читать – 0х00, затем читаем.

Что делать, когда хочется взломать пароль, крякнуть сенсор и попробовать Python? Ч1: исследуем ёмкостный touch screen - 30

Из DEVICE_MODE считывается код 0х00 – WORKING MODE. 
Далее из 0xА8 (FOCALTECH_ID) считывается 0x11.
Из 0xА6 (Firmware Version) – 0x01.
Через длительное время пишется в В0 (описания такого регистра нет) 00.

Далее адреса записи/чтения 4C/4D. Это какое-то другое устройство, процесор общается с ним до подачи питания на тач. Там ещё несколько устройств.

После этого на экране появляется стартовая заставка и начинается пачка импульсов до отключения экрана.

Что делать, когда хочется взломать пароль, крякнуть сенсор и попробовать Python? Ч1: исследуем ёмкостный touch screen - 31

В пачке посылки для и от устройства с адресом записи/чтения 4C/4D.
Периодически что-то читается из регистра 02 этого устройства. Есть и другие посылки, но по адресам 70/71 для/от нашего тача ничего нет. 
Чтобы ничего не пропустить, используем поиск строки «Address write: 70» и переключаемся по результатам поиска.

Что делать, когда хочется взломать пароль, крякнуть сенсор и попробовать Python? Ч1: исследуем ёмкостный touch screen - 32

Оп! В большой пачке мы сразу не заметили посылки для тача (смотрели быстро). А там есть.

Что делать, когда хочется взломать пароль, крякнуть сенсор и попробовать Python? Ч1: исследуем ёмкостный touch screen - 33

Эта позиция показана курсором. Как раз в конце пачки.
Процессор пишет в регистр А5 (PWR_MODE) значение 03 (описания нет, похоже на спящий режим).
[7:0] Current power mode which system is in  R/W
Далее конец пачки – экран отключился.
Потом новая пачка – это я нажал кнопку блокировки и экран включился.
В начале этой пачки сигнал Reset, чтобы контроллер тача проснулся.

Что делать, когда хочется взломать пароль, крякнуть сенсор и попробовать Python? Ч1: исследуем ёмкостный touch screen - 34

А в конце пачки снова процессор пишет в регистр А5 (PWR_MODE) значение 03 (описания нет, но видимо спящий режим).
Изучим участок, где мы начали касаться тача.

Что делать, когда хочется взломать пароль, крякнуть сенсор и попробовать Python? Ч1: исследуем ёмкостный touch screen - 35

После включения экрана кнопкой блокировки процессор будит контроллер тача импульсом Reset. Затем касаемся сенсора и начинается активность на линии INT.

Что делать, когда хочется взломать пароль, крякнуть сенсор и попробовать Python? Ч1: исследуем ёмкостный touch screen - 36

Процессор пишет адрес регистра 00 (Device Mode), из ктр будет читать.
Контроллер сенсора отвечает 00 00 01 00 52 03 65 00

Процессор считывает данные из регистра 08 (P1_MISC 1st Touch Area)
Ответ 00 FF FF FF FF FF FF FF

Процессор читает из 10 (описания нет) Ответ FF FF FF FF FF FF FF FF
Процессор читает из А6 (Firmware Version) Ответ 01.
Странно: зачем снова читать версию прошивки контроллера тача при касании?

Что делать, когда хочется взломать пароль, крякнуть сенсор и попробовать Python? Ч1: исследуем ёмкостный touch screen - 37

Рассмотрели левую пачку после первого касания.
Теперь посмотрим правую (после курсора 2).
Запрос от процессора на чтение из 00 (Device Mode) Ответ 00 00 01 80 63 03 62 00
Запрос от процессора на чтение из 08 (P1_MISC 1st Touch Area) Ответ 00 FF FF FF FF FF FF FF
Процессор читает из 10 (описания нет) Ответ FF FF FF FF FF FF FF FF
Процессор читает из А6 (Firmware Version) Ответ 01.

Анализ общей картины кратко.
После подачи питания на контроллер сенсорной панели из DEVICE_MODE считывается 0х00 – WORKING MODE.

Далее из 0xА8 (FOCALTECH_ID) считали 0x11.
Из 0xА6 (Firmware Version) считали 0x01.
Через длительное время пишем в В0 значение 00 (описания такого регистра в даташите нет).

После этого на экране появляется стартовая заставка и начинается пачка импульсов до отключения экрана. Почти все посылки в пачке для других устройств. В конце пачки процессор пишет в регистр А5 (PWR_MODE) контроллера тача значение 03 (описания нет, похоже на спящий режим).

Далее конец пачки – экран отключился.

После включения экрана кнопкой блокировки процессор будит контроллер тача импульсом Reset. Затем касаемся сенсора и начинается активность на линии INT. Этим сигналом контроллер сенсора сообщает процессору, что есть полезные данные.

Получив прерывание INT от тача, процессор начинает считывать данные. Это всегда происходит по одной схеме:

  1. Процессор пишет адрес регистра 00 (Device Mode), из ктр будет читать.
    В ответ контроллер сенсора посылает 8 посылок, например, 00 00 01 00 52 03 65 00.
  2. Процессор считывает данные из регистра 08 (P1_MISC 1st Touch Area)
    Ответ 00 FF FF FF FF FF FF FF
  3. Процессор читает из 10 (описания нет). Ответ FF FF FF FF FF FF FF FF
  4. Процессор читает из А6 (Firmware Version). Ответ 01.

И при каждом касании процессор зачем-то считывает версию прошивки. Постоянно забывает или проверяет обновления? 😊
Процессор отправляет один адрес для чтения, в ответ приходит 8 посылок. Наверное, это значения из восьми регистров подряд.
В ДШ есть описание регистров, но не всех.

Что делать, когда хочется взломать пароль, крякнуть сенсор и попробовать Python? Ч1: исследуем ёмкостный touch screen - 38
Что делать, когда хочется взломать пароль, крякнуть сенсор и попробовать Python? Ч1: исследуем ёмкостный touch screen - 39

Пока не всё понятно. Запишем и проанализируем обмен при касаниях разных мест экрана разными способами (1 и 2 точки, жест и т. д.) Для удобства писать лучше в разные файлы. Касаться лучше аккуратно, кончиком пальца.
Измеряем частоту.

Что делать, когда хочется взломать пароль, крякнуть сенсор и попробовать Python? Ч1: исследуем ёмкостный touch screen - 40

100 кГц. Частоту выборки нужно выбирать минимум в 4 раза больше частоты сигнала. Сделаем в 10 раз больше – 1 МГц (было 50 МГц). Так будет меньше точек и программа будет работать шустрее.

Касание левого верхнего угла

При касании обмен выглядит так:

Что делать, когда хочется взломать пароль, крякнуть сенсор и попробовать Python? Ч1: исследуем ёмкостный touch screen - 41

За малый промежуток времени видим довольно много пачек импульсов. Частота опроса сенсорной панели 91,6 Гц.

Что делать, когда хочется взломать пароль, крякнуть сенсор и попробовать Python? Ч1: исследуем ёмкостный touch screen - 42

Что передаётся в пачках?

Жирным подчёркнутым помечены изменения относительно предыдущей пачки.

Пачка 1
Процессор считывает из
00 Ответ 00 00 01 00 82 00 4С 00
08 Ответ 00 FF FF FF FF FF FF FF.
10 Ответ FF FF FF FF FF FF FF FF
A6 Ответ 01
Пачка 2
Процессор считывает данные из
00 Ответ 00 00 01 80 82 00 4С 00
08 Ответ 00 FF FF FF FF FF FF FF.
10 Ответ FF FF FF FF FF FF FF FF
A6 Ответ 01
Пачка 3
Процессор считывает данные из
00 Ответ 00 00 01 80 86 00 4D 00
08 Ответ 00 FF FF FF FF FF FF FF.
10 Ответ FF FF FF FF FF FF FF FF
A6 Ответ 01
Пачка 4
Процессор считывает данные из 
00 Ответ 00 00 01 80 89 00 4D 00
08 Ответ 00 FF FF FF FF FF FF FF.
10 Ответ FF FF FF FF FF FF FF FF
A6 Ответ 01
В 5ой-9ой пачках так же.
Пачка 10
Процессор считывает данные из 
00 Ответ 00 00 01 80 85 00 48 00
08 Ответ 00 FF FF FF FF FF FF FF.
10 Ответ FF FF FF FF FF FF FF FF
A6 Ответ 01
Пачка 11
Процессор считывает данные из 
00 Ответ 00 00 01 80 80 00 44 00
Остальное так же.
Пачка 12
Процессор считывает данные из 
00 Ответ 00 00 00 40 80 00 44 00
Остальное так же.
Пачка 13.
Процессор считывает данные из 
00 Ответ 00 00 00 FF FF FF FF FF
08 Ответ FF FF FF FF FF FF FF FF.
10 Ответ FF FF FF FF FF FF FF FF
A6 Ответ 01
14-я …18-я пачки такие же

Меняется только ответ из 00. И то незначительно и не в каждой пачке.
Видимо, при касании палец приложил не мгновенно или несколько смещал. Поэтому значения чуть-чуть меняются. А так бы не менялись.
Ближе к концу чуть-чуть меняется ответ из 08 (первая позиция с 00 на FF). Потом снова не меняется.

Касание правого верхнего угла

Что делать, когда хочется взломать пароль, крякнуть сенсор и попробовать Python? Ч1: исследуем ёмкостный touch screen - 43

Что передаётся в пачках?

Жирным подчёркнутым помечены изменения относительно предыдущей пачки.
Пачка 1. Процессор читает из 
00 Ответ 00 00 01 01 E3 00 1D 00
08 Ответ 00 FF FF FF FF FF FF FF
10 Ответ FF FF FF FF FF FF FF FF
A6 Ответ 01
Пачка 2. Процессор читает из 
00 Ответ 00 00 01 81 E3 00 1D 00
08 Ответ так же
10 Ответ так же
A6 Ответ так же
Пачка 3. Процессор читает из 
00 Ответ 00 00 00 41 E3 00 1D 00
08 Ответ так же
10 Ответ так же
A6 Ответ так же
Пачка 4. Процессор читает из 
00 Ответ 00 00 00 FF FF FF FF FF
08 Ответ FF FF FF FF FF FF FF FF
10 Ответ так же
A6 Ответ так же
Пачки 5-8. Процессор читает из 
00 Ответ так же
08 Ответ так же
10 Ответ так же
A6 Ответ так же

Тут у нас касание вышло покороче. Поэтому пачек 8, а не 18, как в прошлый раз.
Полагаю, после отпускания касания происходят изменения такого вида:
при касании 00 ответ 00 00 00 41 E3 00 1D 00
08 ответ 00 FF FF FF FF FF FF FF,
после отпускания 
00 ответ 00 00 00 FF FF FF FF FF
08 ответ FF FF FF FF FF FF FF FF

Сравним ответ из 00 для левого и правого верхнего углов.
Левый верхний   00 Ответ 00 00 01 80 89 00 4D 00
Правый верхний 00 Ответ 00 00 01 81 E3 00 1D 00

Касание правого нижнего угла

Что передаётся в пачках?

Жирным подчёркнутым помечены изменения относительно предыдущей пачки.
Пачка 1. Процессор читает из 
00 Ответ 00 00 01 01 CA 03 BE 00
08 Ответ 00 FF FF FF FF FF FF FF
10 Ответ FF FF FF FF FF FF FF FF
A6 Ответ 01
Пачка 2. Процессор читает из 
00 Ответ 00 00 01 81 CA 03 BE 00
08 Ответ 00 FF FF FF FF FF FF FF
10 Ответ FF FF FF FF FF FF FF FF
A6 Ответ 01
Пачки 3,4,5,6,7 такие же
Пачка 8. Процессор читает из 
00 Ответ 00 00 00 41 CA 03 BE 00
08 Ответ 00 FF FF FF FF FF FF FF
10 Ответ FF FF FF FF FF FF FF FF
A6 Ответ 01
Пачка 9. Процессор читает из 
00 Ответ 00 00 00 FF FF FF FF FF
08 Ответ FF FF FF FF FF FF FF FF
10 Ответ FF FF FF FF FF FF FF FF
A6 Ответ 01
Оставшиеся несколько пачек такие же.

Сравним установившиеся значение на запрос чтения из 00.
Правый верхний угол 00 Ответ 00 00 01 81 E3 00 1D 00
Правый нижний угол 00 Ответ 00 00 01 81 CA 03 BE 00

2 касания одновременно (левые верхний и нижний углы)

Что передаётся в пачках?

Жирным подчёркнутым помечены изменения относительно предыдущей пачки.
Пачка 1. Процессор читает из 
00 Ответ 00 00 02 00 08 03 72 00
08 Ответ 00 00 58 10 2E 00 00 FF
10 Ответ FF FF FF FF FF FF FF FF
A6 Ответ 01

Касания держал долго, поэтому пачек много. Посмотрим через 10: 1,11,21…
Пачка 11. Процессор читает из 
00 Ответ 00 00 02 80 08 03 72 00
08 Ответ 00 80 58 10 2E 00 00 FF
10 Ответ FF FF FF FF FF FF FF FF
A6 Ответ 01
Пачка 21. Процессор читает из 
00 Ответ 00 00 02 80 08 03 72 00
08 Ответ 00 80 58 10 2E 00 00 FF
10 Ответ FF FF FF FF FF FF FF FF
A6 Ответ 01
Пачка 31. Процессор читает из
00 Ответ 00 00 02 80 08 03 74 00
08 Ответ 00 80 58 10 2E 00 00 FF
10 Ответ FF FF FF FF FF FF FF FF
A6 Ответ 01
Пачка 41 такая же.
Пачка 61. Процессор читает из
00 Ответ 00 00 02 80 0С 03 76 00
08 Ответ 00 80 58 10 2E 00 00 FF
10 Ответ FF FF FF FF FF FF FF FF
A6 Ответ 01
Пачка 101. Процессор читает из
00 Ответ 00 00 02 80 10 03 78 00
08 Ответ 00 80 58 10 2E 00 00 FF
10 Ответ FF FF FF FF FF FF FF FF
A6 Ответ 01
Пачка 131. Процессор читает из
00 Ответ 00 00 02 80 10 03 79 00
08 Ответ 00 80 55 10 2F 00 00 FF
10 Ответ FF FF FF FF FF FF FF FF
A6 Ответ 01
Пачка 133. Процессор читает из
00 Ответ 00 00 01 80 52 10 2C 00

Кол-во касаний в байте 2 стало 1
08 Ответ 00 FF FF FF FF FF FF FF

Видно, здесь отпустили касание №2
10 Ответ FF FF FF FF FF FF FF FF
A6 Ответ 01
Последние 4 пачки. Процессор читает из
00 Ответ 00 00 00 FF FF FF FF FF
08 Ответ FF FF FF FF FF FF FF FF
10 Ответ FF FF FF FF FF FF FF FF
A6 Ответ 01

Отпустили оба касания.

Пока понимание такое:
00 – параметры касания №1
08 – параметры касания №2
10 – параметры жеста или касания №3? Проверим позже.
Так же есть подозрение, что в начале касания меняются площадь касания (Touch Area) и Touch Weight. Могут незначительно меняться координаты касания даже при касании без движения, так как человек может немного двигать палец.

Смахивание заставки вправо

Что делать, когда хочется взломать пароль, крякнуть сенсор и попробовать Python? Ч1: исследуем ёмкостный touch screen - 44

Записываем файлик. На картинке чётко видны паузы между смахом вправо и касанием цифр 1-9, 0.
Возможно, смах вправо – это жест, поэтому попробуем найти в записанных посылках код 0х14 жеста «Move Right».

Что делать, когда хочется взломать пароль, крякнуть сенсор и попробовать Python? Ч1: исследуем ёмкостный touch screen - 45

Поиск по декодированным кодам пока ничего не дал. Разбираем посылки.

Что передаётся в пачках?

Жирным подчёркнутым помечены изменения относительно предыдущей пачки.
Пачка 1. Касание. Процессор читает из 
00 Ответ 00 00 01 00 6F 03 5E 00
08 Ответ 00 FF FF FF FF FF FF FF
10 Ответ FF FF FF FF FF FF FF FF
A6 Ответ 01
Пачка 2. Удержание. Процессор читает из
00 Ответ 00 00 01 80 6F 03 5E 00
08 Ответ 00 FF FF FF FF FF FF FF
10 Ответ FF FF FF FF FF FF FF FF
A6 Ответ 01
Пачка 3. Удержание, deltaX=9. Процессор читает из
00 Ответ 00 00 01 80 78 03 5C 00
08 Ответ 00 FF FF FF FF FF FF FF
10 Ответ FF FF FF FF FF FF FF FF
A6 Ответ 01
Пачка 4. Удержание, deltaX=10. Процессор читает из

      ?? ?? ?? ?? ХХ ?? YY ??
00 Ответ 00 00 01 80 82 03 5B 00
08 Ответ 00 FF FF FF FF FF FF FF
10 Ответ FF FF FF FF FF FF FF FF
A6 Ответ 01
Пачка 5. Удержание, deltaX=7. Процессор читает из
00 Ответ 00 00 01 80 89 03 5B 00
08 Ответ 00 FF FF FF FF FF FF FF
10 Ответ FF FF FF FF FF FF FF FF
A6 Ответ 01
Пачка 6. Удержание, deltaX=4. Процессор читает из
00 Ответ 00 00 01 80 8D 03 5B 00
08 Ответ 00 FF FF FF FF FF FF FF
10 Ответ FF FF FF FF FF FF FF FF
A6 Ответ 01
Пачка 7. Удержание, deltaX=1.Процессор читает из
00 Ответ 00 00 01 80 8E 03 5A 00
08 Ответ 00 FF FF FF FF FF FF FF
10 Ответ FF FF FF FF FF FF FF FF
A6 Ответ 01
Пачка 8. Удержание, deltaX=4. Процессор читает из
00 Ответ 00 00 01 80 92 03 5A 00
08 Ответ 00 FF FF FF FF FF FF FF
10 Ответ FF FF FF FF FF FF FF FF
A6 Ответ 01
Пачка 9. Удержание, deltaX=8. Процессор читает из
00 Ответ 00 00 01 80 9A 03 59 00
08 Ответ 00 FF FF FF FF FF FF FF
10 Ответ FF FF FF FF FF FF FF FF
A6 Ответ 01
Пачка 10. Удержание, deltaX=12. Процессор читает из
00 Ответ 00 00 01 80 A6 03 59 00
08 Ответ 00 FF FF FF FF FF FF FF
10 Ответ FF FF FF FF FF FF FF FF
A6 Ответ 01
Пачка 11. Удержание, deltaX=15.Процессор читает из
00 Ответ 00 00 01 80 B5 03 58 00
08 Ответ 00 FF FF FF FF FF FF FF
10 Ответ FF FF FF FF FF FF FF FF
A6 Ответ 01
Пачка 12. Удержание, deltaX=12.Процессор читает из
00 Ответ 00 00 01 80 C7 03 57 00
08 Ответ 00 FF FF FF FF FF FF FF
10 Ответ FF FF FF FF FF FF FF FF
A6 Ответ 01
Пачка 13. Удержание, deltaX=13. Процессор читает из
00 Ответ 00 00 01 80 DA 03 56 00
08 Ответ 00 FF FF FF FF FF FF FF
10 Ответ FF FF FF FF FF FF FF FF
A6 Ответ 01
Пачка 14. Удержание, deltaX=21. Процессор читает из
00 Ответ 00 00 01 80 EF 03 55 00
08 Ответ 00 FF FF FF FF FF FF FF
10 Ответ FF FF FF FF FF FF FF FF
A6 Ответ 01
Пачка 15. Удержание, deltaX=23. Процессор читает из

      ?? ?? ?? ?X ХХ ?? YY ??
00 Ответ 00 00 01 81 06 03 53 00
08 Ответ 00 FF FF FF FF FF FF FF
10 Ответ FF FF FF FF FF FF FF FF
A6 Ответ 01

Пачка 16. Удержание, deltaX=24. Процессор читает из
00 Ответ 00 00 01 81 1E 03 52 00
08 Ответ 00 FF FF FF FF FF FF FF
10 Ответ FF FF FF FF FF FF FF FF
A6 Ответ 01
Пачка 20. Удержание, deltaX=110. Процессор читает из
00 Ответ 00 00 01 81 8C 03 4D 00
08 Ответ 00 FF FF FF FF FF FF FF
10 Ответ FF FF FF FF FF FF FF FF
A6 Ответ 01
Пачка 22. Удержание, deltaX=66 Процессор читает из
00 Ответ 00 00 01 81 CE 03 49 00
08 Ответ 00 FF FF FF FF FF FF FF
10 Ответ FF FF FF FF FF FF FF FF
A6 Ответ 01
Пачка 23. Удержание, deltaX=24 Процессор читает из
00 Ответ 00 00 01 81 E6 03 48 00
08 Ответ 00 FF FF FF FF FF FF FF
10 Ответ FF FF FF FF FF FF FF FF
A6 Ответ 01
Пачка 24. Отпускание Процессор читает из
00 Ответ 00 00 00 41 E6 03 48 00
08 Ответ 00 FF FF FF FF FF FF FF
10 Ответ FF FF FF FF FF FF FF FF
A6 Ответ 01
Пачки 25-28. Процессор читает из
00 Ответ 00 00 00 FF FF FF FF FF
08 Ответ FF FF FF FF FF FF FF FF
10 Ответ FF FF FF FF FF FF FF FF
A6 Ответ 01

В движении, параллельном одной из осей, отлично видно, где какие координаты. Одна из координат изменяется незначительно (хоть и стараемся вести ровно, чуть кривим), а вторая сильно.
Понаблюдав, как изменяются байты от пачки к пачке, можно предположить следующую структуру ответа на чтение из 00:
      ?? ?? ?? ?X ХХ ?? YY ??

Структура посылок

Ещё раз посмотрим таблицу регистров.

Что делать, когда хочется взломать пароль, крякнуть сенсор и попробовать Python? Ч1: исследуем ёмкостный touch screen - 46

Когда касание одно, во втором (счёт от нуля) байте 01, когда 2, то 02.
00 00 01 00 6F 03 5E 00
00 00 02 80 08 03 72 00
Отметим. NT – number of touch points. Регистры считываются просто по порядку по 8 штук. Видимо, это сделано для уменьшения посылок с адресом и экономии трафика.
Ответ на 00: ?? ?? NT XH ХL YH YL ??
Нулевой байт вообще всегда 00. Похоже на Device Mode. 00 – это working mode.
Первый байт во всех опробованных до этого касаниях и смахе вправо 00. Честно говоря, я ожидал, что смах вправо будет распознан как жест «move right», тогда в этом регистре появился бы код 14. Но этого почему-то не случилось.
Ответ на 00 
DEV_MODE GEST_ID? NT P1_XH P1_ ХL P1_YH P1_YL P1_WEIGHT?
Ответ на 08
P1_MISC? P2_XH P2_XL P2_YH P2_YL P2_WEIGHT P2_MISC ??
Можно заметить, что при отпускании касания №1 P1_MISC становится FF. До отпускания P1_MISC = 00.
При отпускании P1_XH P1_ ХL P1_YH P1_YL P1_WEIGHT меняется на FF FF FF FF FF.
До отпускания P1_WEIGHT=00
Ответ на 10
?? ?? ?? ?? ?? ?? ?? ??
Описания регистров с 0E до 80 нет. Интересно, это параметры точки №3, параметры жеста или просто зарезервированные под модернизацию регистры?

Что делать, когда хочется взломать пароль, крякнуть сенсор и попробовать Python? Ч1: исследуем ёмкостный touch screen - 47

Коротко о главном

Встречаются сенсорные панели с собственным контроллером на шлейфе. Обычно такой контроллер связывается с процессором телефона по I2C. Дополнительно используется линия сброса (Reset) и линия прерывания (INT).

Опыты проводились над каким-то китАйфоном 6(S). Вероятно, разных копий много.
Контроллер сенсорной панели здесь на шлейфе, Focal Tech FT6336DMB.
Благодаря ловким ручонкам еноту хорошо удаются мелкие работы.)
С помощью логического анализатора мы записали и проанализировали более десяти файлов при разных вариантах касаний (разные координаты, жесты, кол-во точек касаний и др.) Удалось выяснить структуру посылок.

Данный контроллер определяет максимум два касания одновременно.

Жесты пока не получается сделать. Пробовал двигать две точки сразу слева направо, потом ребро ладони так же. Пробовал и увеличение или уменьшение масштаба. Но не получается вызвать жест. Возможно, жесты ещё нужно включить.

Продолжение следует.)
Выражаю благодарность доктору Штрих за симпатичного енота!

Понравился проект, статья – поделитесь впечатлением!
Не стесняйтесь писать комментарии, нам важно ваше мнение 😊.


Читайте также:

Автор: Kopcheniy

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js