Прослушка ИК приемника с помощью анализатора логики

  • 10.02.18, 00:45
На днях решил реализовать мини-пульт для телевизора. Дело в том, что у нас телевизор стоит в стенке и кнопка включения/выключения недоступна. Так вот, я хочу разместить рядом с телевизором мини-пульт с одной кнопкой. Чтоб можно было подойти и включить телевизор без поиска основного пульта.
Первый вариант я делал на Arduino с помощью библиотеки IRRemote. С помощью ее самой узнал код, который передает оригинальный пульт и попытался его повторить. Ардуишный приемник реагировал одинаково и на оригинальный пульт и на мой самодельный. А вот телевизор чувствовал разницу и на мой пульт не реагировал. Тогда я решил прослушать сигнал на приемнике с помощью анализатора логики от Saleae.
Накидал я себе макетку. Подал на нее 5 вольт от USB, кинул на нее обычный светодиод, чтоб следить за питанием и подсоединил сигнальный провод от приемника к каналу 0 анализатора. И тут меня ждал обломчик. На приемнике горел красный светодиод, хотя он должен быть погашен и мигать только в момент приема посылки. Поковырявшись в мануалах я пришел к выводу что сигнальный вывод следует подтянуть к питанию через резистор 22кОм. Я такого номинала не нашел и использовал резистор 15кОм. После этого заработало.


Проанализировав картинку стало понятно, что используется протокол NEC. И был вычислен нужный код

Робота з 7-сегментним індикатором модуля ICPDAS I7231

  • 28.10.17, 02:42
Яскравість індикатора можна задати функцією
Set5DigitLedIntensity(int mode);
Рівень яскравості mode може приймати значення від 0 до 15.

Для того щоб відобразити будь-який символ, треба використовувати функцію
Show5DigitLedSeg(int pos, unsigned char data);
Де pos - це позиція індикатора.
data - це маск де кожний біт відповідає за один з елементів індикатора.
0x01 - Горизонтальний середній
0x02 - Вертикальний лівий верхній
0x04 - Вертикальний лівий нижній
0x08 - Горизональний нижній
0x10 - Вертикальний правий нижній
0x20 - Вертикальний правий верхній
0x40 - Горизонтальний верхній
0x80 - Крапка

Мои мучения. sftp, delphi и synapse (продолжение)

  • 11.04.17, 21:59
После того, как я пропатчил CryptLib программа TestSftp все равно сопротивлялась.

При попытке присоединиться к серверу она зависала на ощутимое время, а потом выдавала сообщение:

Synapse TCP/IP Socket error 10091: Timeout on read (select()) after 15 seconds.

Судя по логам, клиент отсылал пакет с командой  SSH_FXP_INIT получал в ответ от сервера пакет SSH_FXP_VERSION, а дальше происходило зависание.

Я выяснил, что зависание происходит в библиотеке Synapse в модуле ssl_cryptlib.pas в методе TSSLCryptLib.PopAll.





Мои мучения. sftp, delphi и synapse

  • 21.03.17, 02:02
Недавно началось мое сотрудничество с одним книжным издательством. Мне по наследству выпало поддерживать ихний сайт. Я для них на Delphi написал программу для добавления отсканированных листов книг на сайт. Для передачи файлов на сайт использовался старый добрый ftp и все было замечательно. Святая простота! Когда я установил в издательстве программу, в тот же день на сайт пролезли веселые вирусы и провайдер отключил сайт. Стало понятным, что использовать ftp нельзя ведь в нем данные аккаунта передаются в открытом виде. Пришлось искать другие варианты.

Выбор пал на протокол sftp так как к сайту был доступ по ssh.
Я в своих Delphi проектах для работы с сетью использую библиотеку Synapse. Не могу толком сказать, почему именно на нее пал мой выбор. Просто однажды попробовал. Что-то заработало и после этого тянется эта дружба.

В примерах библиотеки Synapse есть программа TestSftp. Первым делом собрал этот проект для проверки. Сначала проект даже не собрался. Дело в том, что для шифрование он использует библиотеку CryptLib. Пришлось раздобыть файл cryptlib.pas для проекта, ну и динамическую библиотеку cl32.dll. Проект собрался, но при попытке подключении меня ожидала неудача. Выскакивала ошибка
Synapse TCP/IP Socket error 10091: 
Собравшись с силами я решил искать решение проблемы в дебрях исходников библиотеки CryptLib. Благо она оупенсорсная.

Собрав Debug версию библиотеки я при подключение получил сообщение с более глубокомысленным текстом:
Synapse TCP/IP Socket error 10091: Invalid PAM authentication request packet

Прошерстив библиотеку я обнаружил что это сообщение возникает в функции pamAuthenticate в файле ssh2_authc.c. 

Библиотека CryptLib имеет классную фичу. Отладочная версия выводит в окно Output протокол обмена. Вот кусок, на котором происходит залипание

Read SSH_MSG_USERAUTH_INFO_REQUEST (60) packet, length 59.
0000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 ................
0016: 00 00 00 26 50 61 73 73 77 6F 72 64 20 66 6F 72 ...&Password for
0032: 20 6C 79 62 69 64 40 63 75 70 69 64 2E 63 6F 6C  [email protected]
0048: 6F 63 61 6C 6C 2E 6E 65 74 3A 00                ocall.net:.
Wrote SSH_MSG_USERAUTH_INFO_RESPONSE (61) packet, length 20.
0000: 00 00 00 01 00 00 00 xx xx xx xx xx xx xx xx xx ........Password
0016: xx xx xx xx                                     
Read SSH_MSG_USERAUTH_INFO_REQUEST (60) packet, length 16.
0000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................

А вот выдержка из протокола программы psftp входящей в состав утилиты Putty, в котором соединение происходило нормально

Incoming packet #0x5, type 60 / 0x3c (SSH2_MSG_USERAUTH_INFO_REQUEST)
  00000000  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01  ................
  00000010  00 00 00 26 50 61 73 73 77 6f 72 64 20 66 6f 72  ...&Password for
  00000020  20 6c 79 62 69 64 40 63 75 70 69 64 2e 63 6f 6c   [email protected]
  00000030  6f 63 61 6c 6c 2e 6e 65 74 3a 00                 ocall.net:.
Outgoing packet #0x6, type 61 / 0x3d (SSH2_MSG_USERAUTH_INFO_RESPONSE)
  00000000  00 00 00 01 XX XX XX XX XX XX XX XX XX XX XX XX  ....XXXXXXXXXXXX
  00000010  XX XX XX XX                                      XXXX                                  C...
Incoming packet #0x6, type 60 / 0x3c (SSH2_MSG_USERAUTH_INFO_REQUEST)
  00000000  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
Outgoing packet #0x8, type 61 / 0x3d (SSH2_MSG_USERAUTH_INFO_RESPONSE)
  00000000  00 00 00 00       

 Получается, что после того как сервер запросил и получил пароль он отправляет еще один пустой пакет запроса SSH2_MSG_USERAUTH_INFO_REQUEST на который psftp отсылала пустой пакет ответа SSH2_MSG_USERAUTH_INFO_RESPONSE, а библиотека CryptLib падала.

Я решил пропатчить библиотеку, чтоб она вела себя аналогично программе psftp.

В файле ssh2_authc.c я сделал следующее изменение в функции pamAuthenticate: 
заменил блок

if( noPrompts <= 0 || noPrompts > 4 )
{
/* Requesting zero or more than a small number of prompts is 
  suspicious */
status = CRYPT_ERROR_BADDATA;
}
}

на

if( noPrompts < 0 || noPrompts > 4 )
{
/* Requesting zero or more than a small number of prompts is 
  suspicious */
status = CRYPT_ERROR_BADDATA;
}
else if(noPrompts == 0)
{
//Отправим назад пустой пакет
status = openPacketStreamSSH( &stream, sessionInfoPtr, 
 SSH_MSG_USERAUTH_INFO_RESPONSE );
if( cryptStatusError( status ) )
return( status );
writeUint32( &stream, 0);
status = sendPacketSSH2( sessionInfoPtr, &stream, FALSE );
return status;
}

После этого авторизация стала проходить. Возникла другая ошибка, но тут уже дело было не в CryptLib.
Результат патча для CryptLib.
Файл ssh2_authc.c
Сама библиотека cl32.dll

Бредятинки

  • 06.01.17, 01:07
Плывут по небу корабли
А позади летят драконы
Ведь капитаны не учли
Небес суровые законы

Красиво, что ни говори
На флагмана идет атака
И паруса уже сожгли
В каютах дети стали плакать.

И нет надежды никакой
Осталось разве что молиться
Чтоб вовремя пришел конвой
На богатырской колеснице.

А в ней Алеша и Илья
Спешат дубины сунуть в дело
И стая черного зверья
Смотается, чтоб не влетело.

Подключение программатора ST-Link к плате stm32 Maple Mini

  • 02.01.17, 01:48
Схема подключения:


ST-LinkMapleMini
SWDIO 2 ----------- 22PA13
GND4 ----------- GND GND
SWCLK 6 ----------- 21PA14
3.3V8 ----------- VccVcc

Мое хобби - ремонт

  • 17.10.16, 01:38
Попросила мама посмотреть ее старый калькулятор. Большой CITIZEN оставшийся еще от времен ее работы бухгалтером. На дисплее перестали отображаться некоторые сегменты. Раскурочивание аппарата и задабривание его спиртиком ни к чему не привели. Пришлось обращаться за помощью к интернету. Нарыл в нем совет по ремонту с помощью фена. Нужно просто прогреть дисплей и его шлейф феном и сегментики вернуться к жизни. Так я и поступил. Взял фен, прогрел. Дисплей затянулся черной пеленой. По мере остывания пелена стала спадать. И, о чудо! Все сегменты работают! Спасибо добрым, а главное, смекалистым людям.

Осенние бега

  • 09.10.16, 00:16
4 октября забег получился с настоящим осенним колоритом - дождем. Начался он где-то на пятом круге и все подмывал меня закончить забег и бежать в направлении трамвая. Но ливень так и не пошел и я дотерпел до конца. Результат получился следующий:

  General laps: 13
  General time: 21:29
  Lap1 time: 01:18
  Lap2 time: 01:39
  Lap3 time: 01:40
  Lap4 time: 01:39
  Lap5 time: 01:38
  Lap6 time: 01:41
  Lap7 time: 01:41
  Lap8 time: 01:43
  Lap9 time: 01:41
  Lap10 time: 01:44
  Lap11 time: 01:44
  Lap12 time: 01:43
  Lap13 time: 01:32

Осенние бега

  • 04.10.16, 01:34
Забег от 27 сентября дал до секунды в точности такое же время как и предыдущий.

General laps: 13
  General time: 21:35
  Lap1 time: 01:22
  Lap2 time: 01:41
  Lap3 time: 01:41
  Lap4 time: 01:40
  Lap5 time: 01:38
  Lap6 time: 01:41
  Lap7 time: 01:43
  Lap8 time: 01:39
  Lap9 time: 01:43
  Lap10 time: 01:42
  Lap11 time: 01:44
  Lap12 time: 01:43
  Lap13 time: 01:31

Осенние бега

  • 19.09.16, 23:50
Очередной забег
Сегодня уже стало довольно прохладно и народу на стадионе было мало. За всю дистанцию мне пришлось только один раз поменять дорожку для обгона. А сам результат следующий:

  General laps: 13
  General time: 21:35
  Lap1 time: 01:23
  Lap2 time: 01:39
  Lap3 time: 01:41
  Lap4 time: 01:39
  Lap5 time: 01:37
  Lap6 time: 01:43
  Lap7 time: 01:42
  Lap8 time: 01:43
  Lap9 time: 01:38
  Lap10 time: 01:44
  Lap11 time: 01:42
  Lap12 time: 01:43
  Lap13 time: 01:34