Технологии ATAMAH400h
7 987

Промышленный реверс-инжиниринг

Рассказ о процессе заимствования при разработке электроники на наглядном примере.

В закладки
Аудио
Запись лога работы лифта самодельным сниффером

Однажды мне понадобилось скопировать довольно простое устройство. Компания-производитель перестала существовать, но по всей стране ещё был спрос на замену сломанных или отработавших свой ресурс девайсов.

Само устройство — кнопка вызова лифта на фото слева. Для опытов мне дали два экземпляра, один из которых можно было полностью разобрать.

Общий план работы выглядел примерно так:

  1. Изучение схемы подключения платы;
  2. Изучение элементной базы самой платы;
  3. Срисовывание её электрической схемы;
  4. Попытка считывания файла прошивки из микроконтроллера;
  5. Дизассемблирование прошивки;
  6. Извлечение алгоритма работы;
  7. Разработка новой платы;
  8. Написание новой прошивки.

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

Изучаем подопытного

Плата собрана на микроконтроллере 1997 года выпуска AT89C2051, в основе которого лежит архитектура Intel MCS-51. В 2020 году она празднует свой 40-летний юбилей на рынке встраиваемых систем.

Небольшое пояснение: микроконтроллер — это такая микросхема, содержащая вычислительное ядро и набор периферии для управления внешними устройствами. Например, в современной стиральной машине микроконтроллер опрашивает кнопки управления, датчики, выводит информацию на экран и управляет насосами, нагревателем, клапанами и приводом барабана. Для большинства перечисленных функций ему не требуются промежуточные устройства, только набор пассивных электронных компонентов.

Разбираем плату для срисовывания электросхемы

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

Оригинальное устройство разработано китайской компанией, а потому его схема крайне запутана и со множеством лишних компонентов. Например, включение реле производилось через тройной каскад из биполярного транзистора, оптопары и полевика (именно в таком порядке).

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

Одно и то же место на китайской двухслойной плате с обеих сторон. Три огромных резистора ни к чему не подключены. Я даже просвечивал плату мощным фонариком, чтобы убедиться.

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

Пытаемся считать прошивку

Мне очень повезло, что на обоих платах в контроллерах не включена защита от чтения, поэтому я успешно слил два варианта прошивки подобной порнографией:

Фото из личного блога американского энтузиаста

Дизассемблирование прошивки

Следующим этапом нам нужно преобразовать этот машинный код во что-то более читаемое:

Берём известный инструмент IDA Pro, в котором уже есть наш контроллер со всеми регистрами периферии, и открываем HEX файл прошивки:

После этого идёт довольно нудный процесс изучения набора команд нашего вычислительного ядра, комментирование и расшифровка ассемблерного кода.

По адресам таблицы векторов прерываний нашлись сами обработчики прерываний, записи в регистры периферии дали информацию о конфигурации интерфейса связи. Шаг за шагом безымянный ассемблерный код превратился в то, что можно читать.

Извлечение алгоритма работы

Так как мне нужно было разработать новое устройство на другой элементной базе, из кода необходимо было извлечь алгоритм. Некоторое время спустя родился такой псевдокод:

Та же самая обработка принимаемых данных на языке Си

Кому интересен протокол передачи:

Станция управления лифтом общалась с платами кнопок вызовов по полнодуплексному 24-вольтовому интерфейсу. В обычном режиме платы кнопок слушали линию, ожидая 9-битный пакет данных. Если в этом пакете приходил адрес нашей платы (задавался DIP-переключателем на плате), то плата переключалась на 8-битный режим приёма, и все последующие пакеты аппаратно игнорировались остальными платами.

Первым после адреса шёл пакет с кодом команды управления. Конкретно эта плата принимала всего 3 команды:

1. Запись в регистры данных. Например частота и длительность мигания кнопки при вызове;

2. Включение подсветки кнопок;

3. Запрос состояния кнопок (нажаты или нет).

Последним байтом шла контрольная сумма, которая представляет собой простой XOR всех байт после адреса.

После контрольной суммы плата опять переходила в режим ожидания своего адреса.

Разработка новой платы

Для этапа разработки новой электросхемы и печатной платы у меня нет картинок, но всё было примерно так:

Составление электросхемы и разводка платы делались в Altium Designer. Изготовление печатной платы заказывалось в зеленоградском «Резоните».

Написание новой прошивки

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

Дальше нужно было действовать крайне аккуратно, чтобы не спалить ничего в лифте и не допустить его остановки.

Проверяем, что всё работает как надо, исправляем косяки и пишем новую прошивку под наше устройство:

Код на Си для новой платы на основе микроконтроллера AVR ATmega328P

Простоту устройства и прошивки можно оценить по объёму кода, он содержит всего лишь около 600 строк на языке Си.

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

Да, плата другая, но станок тот же

Фотографию готового устройства приложить не могу, просто поверьте, что оно до сих пор производится и продаётся.

Лирическое заключение

По поводу кнопок лифта «вверх» и «вниз» на этаже. Я заметил, что многие люди совершенно не понимают их назначение и жмут обе сразу.

Отсюда

У лифта есть два набора кнопок: в кабине — панель приказов, и на этаже — панель вызова. Уже по названию можно догадаться, что панель приказов имеет более высокий приоритет управления.

Все лифты, имеющие панели вызовов с кнопками «вверх» и «вниз», работают с каким-то из вариантов алгоритма оптимизации поездок, целью которых является перевозка максимального числа пассажиров за минимальное время и отдельное условие максимального времени ожидания на этаже (регулируется госстандартом).

Такой алгоритм обычно предполагает подбор пассажиров на этажах, если они едут в том же направлении, которое указывают нажатием кнопки вызова «вверх» или «вниз».

Представим ситуацию, что лифт с пассажирами едет вниз и по пути получает с этажа ниже вызов «вниз». Лифт остановится для подбора пассажира (да, есть ещё учёт загрузки кабины по весовому датчику, но его мы опустим).

Лифт едет дальше и получает с этажа ниже вызов «вверх». Логично, что лифт не остановится для подбора пассажира, так как не будет менять направление движения (это тоже регулируется стандартом), а подбирать пассажира, чтобы поехать вниз, а затем вверх — бесполезный расход энергии и места в лифте.

Лифт едет дальше и получает с этажа ниже сразу два вызова «вверх и «вниз», которые нажал какой-то нетерпеливый пассажир, которому нужно ехать вверх. Логично, что лифт остановится на этом этаже, но пассажир в него не войдёт, зато потратит время людей в кабине на замедление и остановку лифта, открытие дверей, ожидание, закрытие дверей и разгон до номинальной скорости.

Если у лифта только одна кнопка на этаже, то в 99% случаев он работает по алгоритму «собирательный вниз», и при наличии приказов в кабине останавливается только при движении вниз.

Если у вас есть навыки программирования на JS, то можете попробовать реализовать подобный алгоритм управления в онлайновой игре Elevator Saga. В ней есть все аспекты оптимизации поездок без углубления в хардкор вроде работы цепей безопасности лифта.

Я завёл себе телеграм-канал, где буду выкладывать подобные материалы. Прямо сейчас там можно следить за разработкой очередного устройства.

Отдельное спасибо Роману Персианинову, который помог это всё прилично оформить.

Материал опубликован пользователем. Нажмите кнопку «Написать», чтобы рассказать свою историю.

Написать
{ "author_name": "ATAMAH400h", "author_type": "self", "tags": [], "comments": 101, "likes": 276, "favorites": 104, "is_advertisement": false, "subsite_label": "tech", "id": 103351, "is_wide": false, "is_ugc": true, "date": "Wed, 26 Jun 2019 16:36:23 +0300" }
Объявление на TJ
Музыка
Новые альбомы, клипы, концерты, истории о музыкантах, а также эксперименты читателей TJ.
Подписаться
Подписан
Отписаться
{ "id": 103351, "author_id": 182816, "diff_limit": 1000, "urls": {"diff":"\/comments\/103351\/get","add":"\/comments\/103351\/add","edit":"\/comments\/edit","remove":"\/admin\/comments\/remove","pin":"\/admin\/comments\/pin","get4edit":"\/comments\/get4edit","complain":"\/comments\/complain","load_more":"\/comments\/loading\/103351"}, "attach_limit": 2, "max_comment_text_length": 5000, "subsite_id": 214344, "last_count_and_date": null }
101 комментарий

Популярные

По порядку

Написать комментарий...
59

Крутой материал

Ответить
1

Если вам реально интересна тематика реверс-инжиниринга, заходите к нам в блог, мы там вообще делаем самодельный жёсткий диск (за исключением пластин, головок и подобного, разумеется) с подробным описанием процесса:

https://blog.rlab.ru/tags/reverse-engineering

Также тэг "Сделай сам" (/diy) посмотрите.

Ответить
0

Такое лучше в твиттер писать, как раз каждый пост в 140 символов уместится.

Ответить
0

В твиттер? Например, вот такое?

https://blog.rlab.ru/izobretaem-zhestkiy-disk-chast-6-tehnologicheskiy-rezhim-527.html

Да меня там как расиста сначала заклеймят, а потом совсем забанят, т.к. для негро..., в смысле афроамериканцев будет слишком сложно :)

Ответить
23

Почти нихера не понял, но круто!

Ответить
9

Материал хороший, но на хабре же больше ЦА

Ответить
38

Не пользуюсь хабром и не люблю тамошнюю публику.

Ответить
11

Хозяин — барин!

Просто достаточно странный выбор площадки для такого контента. Тут как-то лучше заходят тренды (особенно тренды двухлетний давности), прямые эфиры из психиатрических лечебниц, мэмы с котами, ЛГБТ (даже если новость совершенно не о ЛГБТ, кого ебёт?), православие и т.д. Но такое... ¯\_(ツ)_/¯

Ответить
13

Вот она, аудитория, взращенная Никитой Цыплачевым

Ответить
4

хехехе, а еще минусуют, сопротивляются)))))

Ответить
0

Так всё перечисленное не выходит в топ по оценкам.

Ответить
10

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

Материал топ.

Ответить
2

Такого сборища напыщенных, пытающихся унизить друг друга пидоров больше нет нигде.

Те, кому не хватило (или мамка не дала) денег на подписку, чтобы стать токсичным олдом на ТЖ, окопались именно на хабре.

Ответить
0

Я про твой материал))

Ответить
14

Обе кнопки вверх-вниз и оба лифта могут вызывать только долбоебы. И это не про какие-то случаи, когда реально приспичило, а про привычку.

Ответить
0

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

Ответить
12

Люблю таких задротов! Храни вас господь!

Ответить
6

перенесите в /dev

Ответить
4

чё вы минусуете? нахуя тогда этот подсайт?

Ответить
12

dev 2 975 подписчиков
flood 247 998 подписчиков

Ответить
3

А если на аниме выйдет офигенная статья, то ее можно будет перенести во флуд?

Ответить
0

Так ведь так и было. Лонгрид выходил в Историях

Ответить
11

Педрильный клуб любителей пощекотать очко

Ответить
3

Ты не туда воюешь

Ответить
2

Потому что статья не про разработку
Потому что в текущем состоянии он нахуй не нужен и постить туда только самому ограничивать аудиторию заметки, ширяев где кросспост
Потому что заебали своими "перенесите"

Еще вопросы?

Ответить
10

Хакер. Позвоню в кгб.

Ответить
3

Ну нахер. Я лучше по лестнице пойду

Ответить
13

Тут поддержу, это всегда безопаснее.

Ответить
3

Интересно, а есть ли какая-то реализация вызова в приоритете грузового лифта над пассажирским. Допустим через зажатие кнопки или двойное нажатие.

Ответить
10

На некоторых лифтах есть, но такое можно встретить только в административных зданиях.
Забавные ситуации бывают с вип-поездками, это когда на этаже есть замок или считыватель для вип-карты, при использовании которой лифт отменяет все приказы и едет на этот вызов. Так вот смешное начинается, когда таких «випов» несколько и они одновременно используют свои карты. Лифт просто встаёт на этаже и ждёт.

Ответить
9

Было бы совсем замечательно, встроить слабый электрошок в кнопку, который срабатывает от нажатия 3 раз и более (если уже вызвали).

Ответить
4

И еще. Для того чтоб пользоваться этими кнопками вверх-вниз надо знать куда ты едешь, а для этого надо помнить на каком ты этаже и где он относительно того, куда тебе надо. Что жать когда ты в ноль бухой?

Ответить
8

Жми цифры бывшей.

Ответить
3

Сегодняшней или вчерашней?

Ответить
0

А вот какие пьяным вспомнишь, такие и жми.

Ответить
5

t.me/govnokoder

Козуля, ТЫ?

Ответить
4

Я за него!

Ответить
6

Первый текст, который я сегодня прочитал от начала до конца.

Ответить
2

По поводу кнопок в лифтах. В старых зданиях есть явно старые лифты и управляются они в смерть убитыми железными кнопками явно сделанными где-то еще [очень давно], когда хипстерских ардуин точно не было. Что там, тоже контроллеры типа описанного, или как-то попроще всё?

Ответить
8

Там с каждой кнопки непосредственно выведены провода в станцию управления, а сама станция собрана на релейной логике.

Ответить
4

Редкая годная статья, спасибо.

Ответить
3

Всегда мечтал сделать в лифте бэкдор, чтобы можно было зажать кнопку и без остановки опуститься/подняться на нужный этаж.

Ответить
2

Почти во всех кабинах есть место для пожарного ключа. Оно это делает.
Поворачиваешь ключ и нажимаешь кнопку, например, первого этажа — лифт едет вниз и после отпускания кнопки останавливается на ближайшем этаже. Так же и вверх по кнопке второго этажа.

Ответить
3

А лифт не сообщает куда-нибудь, что ключ был использован? И продаются ли такие ключи?

Ответить
8

Нет, не сообщает. В диспетчеризацию обычно только остановка по аварии и пожар выводятся, но диспетчеризация не на всех лифтах.
Где ключи брать не скажу, а то и без этого немало дураков травмируется.

Ответить
1

Ну я же не дурак. Эх, ладно.

Ответить
5

Так нас все читают.

Ответить
1

Лёгкий способ оскорбить сразу Всех. Уважаю. Гыгы))

Ответить
1

Сколько ты заработал на этом реинжиниринге?

Ответить
2

Я тогда за зарплату работал. С изготовлением платы всё заняло около 3 недель.

Ответить
0

А если бы ты был на фрилансе и тебе поступил такой заказ, какая вилка примерно будет на такую работу сейчас?

Ответить
2

50-100к с комплектацией и изготовлением.

Ответить
0

Хотел было в комментах спросить, стоит ли описанный труд (с выездом еще, вот это все) хотя бы полмиллиона. Не понимаю, почему так мало?
Даже если это для тебя пара вечеров (а сколько на деле?), это же узко специализированные знания. 50-100к можно грубо говоря брать за натянутый шаблон на вордпресс (простите, «сайт под ключ»).

Ответить
0

Ты сильно переоцениваешь стоимость подобных работ. Да, большая часть работы делается почти рефлекторно, но и чисто по времени выгодно получается. Работы тут часов на 40-50.

Ответить
1

50 часов за 50-100 тыщ человеку, который понимает где в какой ноге ассемблер у ебучей китайской микросхемы, thats why we cant have nice things. Ну, то есть, сантехник или там плитоукладчик какой за час выезда (с дорогой) столько в пересчете берет. Мне кажется подобная квалификация должна давать кратный доход от сантехника.

Ответить
0

У редкого сантехника или плиточника загрузка на фуллтайм.

Ответить
0

Ну так и ты, наверно, не жаждешь 8х5 ковыряться в ассемблере?

Ответить
0

Обычная работа.

Ответить
1

Ну нахер, прям на лифт с кнопками то присесть и послушать было бы поприятнее. Тем более, что по описанию протокол похож на модбас.

Ответить
1

Ну раз ты такой любитель асма, зацени тему, читал вместо детектива недавно - https://electronix.ru/forum/index.php?app=forums&module=forums&controller=topic&id=152092

Ответить
0

Великолепная история, но там сразу предположили контрольную сумму прошивки.

Ответить
0

Выглядит, как большой геморрой. Разве нельзя найти готовую плату в том же Китае и прошить?

Ответить
3

Это очень узкая область автоматизации и потому такое оборудование только от производителя.

Ответить
1

Интересуюсь, интересно. Полезно. 😌

Ответить
1

Это тебе по работе надо было, или в доме лифт сломался?

Ответить
0

Работа.

Ответить
1

И зачем в кнопке процессор.

Ответить
0

Чтобы сократить число проводов. Так на все кнопки для подсветки и получения состояния кнопок нужно два провода питания и два провода шины связи.

Ответить
1

Супер познавательно и круто! Благодарю.

Ответить
1

Логично, что лифт остановится на этом этаже, но пассажир в него не войдёт, зато потратит время людей в кабине на замедление и остановку лифта, открытие дверей, ожидание, закрытие дверей и разгон до номинальной скорости.

Я работаю в здании именно с такими кнопками, и это настоящая боль.
но пассажир в него не войдёт

9 из 10 студов решает зайти. Но самый ад случается, когда какая-нибудь тупая группа хочет подняться с четвёртого этажа куда нибудь наверх, и занимает лифт идущий вниз. Нужно видеть лица других студов и преподов, которые стоят внизу и торопятся на свои пары, когда на первом этаже открывается полный лифт, и оттуда никто не выходит.

Ответить
0

Просто студенты тупые. Сам таким был.

Ответить
0

А если б она была защищена от чтения?

Ответить
0

Тогда в зубы логический анализатор и снифать сигналы прямо с ног микросхемы. Это всё становится сложнее, когда узнаёшь, что пины контроллера мультиплексированы не только на несколько функций, но и по назначению «вход» и «выход».

Ответить
3

Хах! Ещё как!)
(Я и остальные случайные читатели с заумным видом киваем головами, ничего не понимая:)

Ответить
1

Мультиплексируются - значит для экономии пинов они выполняют несколько функций. На этой плате за счёт хитрой коммутации одни пины используются для чтения адреса с дип-переключателя и для включения светодиодов.

Ответить
0

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

Ответить
0

В видосе типа домашний станок? Как он захватывает элементы - присосом? А пайка как происходит? Сколько такой стоит?

Ответить
1

Нет, это промышленный на моей старой работе. http://www.mechatronika.com.pl/content/view/20/4/lang,en/

Если не ошибаюсь, тогда он стоил около 4 миллионов рублей. +Питатели.

Ответить
0

В детстве из лифтерской катали народ вверх вниз в лифтах, там панель управления приоритет имела видимо над лифтовой, бывало и по 15 минут туда/сюда ездили люди xD

Ответить
0

Да, от самой станции есть возможность управления для аварийной эвакуации.

Ответить
0

А как реализуются упомянутые в материале алгоритмы безопасности, особенно в современных высотках. Меняется ли скорость движения, допустимый вес и прочее?
Пардон если вопрос скомкан

Ответить
0

Безопасность обеспечивается несколькими электрическими цепями. Например срабатывание датчика обрыва канатов, превышения скорости, обрыва каната ограничителя скорости или открытие двери кабины или шахты во время движения отключает питание тяговой лебёдки и требуется вмешательство специалиста. А вот датчик превышения загрузки кабины просто не даёт лифту начать движение до выхода кого-либо из кабины. Датчиков очень много и на разных конструкциях лифтов могут быть особенности, которые я могу не знать.

Ответить
0

У лифта обычно одна номинальная скорость и скорость «дотягивания», которая используется при приближении к месту остановки или при поездке на соседний этаж. Так и на двухскоростных лифтах и на лифтах с регулируемым приводом.

Ответить
0

Я завёл себе телеграм-канал

Я должен был догадаться...

Ответить
0

Молодец. Ты кто?

Ответить
0

пользователь сайта tjournal. а ты?

Ответить
0

Да нет, ты какая-то протухшая консерва 2013 года с минимальной активностью. Не тебе ещё что-то про телеграм-каналы писать.

Ответить
0

во-первых, иди нахуй. в 2) я в другом городе. в третих, не тебе решать, что мне писать и не писать

Ответить
0

Много вас таких, кто даже комментарии не пишет, но типа "в тренде".

Ответить
0

здравствуйте, это канал об аниме?

Ответить
0

Хм, а есть ли схема, чтобы тех, кто нажимает сразу обе кнопки било 220в? Можно без заземления. Буду благодарен.

Ответить
0

Первую фотку я бы назвал "Пингуем лифтовую кнопку"

Ответить
0

Откуда в дизассембле отладочные символы? Вы же не ELF туда загружали

Ответить
0

Это уже с моими комментариями и именованиями. Ещё для конкретного контроллера в IDA есть сразу разбор регистров и имён прерываний.

Ответить
–6

перенесите в хабр

Ответить
0

Прямой эфир

[ { "id": 1, "label": "100%×150_Branding_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox_method": "createAdaptive", "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "cndo", "p2": "ezfl" } } }, { "id": 2, "label": "1200х400", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "cndo", "p2": "ezfn" } } }, { "id": 3, "label": "240х200 _ТГБ_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "i", "ps": "cndo", "p2": "fizc" } } }, { "id": 4, "label": "240х200_mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "i", "ps": "cndo", "p2": "flbq" } } }, { "id": 5, "label": "300x500_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "cndo", "p2": "ezfk" } } }, { "id": 6, "disable": true, "label": "1180х250_Interpool_баннер над комментариями_Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "clmf", "p2": "ffyh" } } }, { "id": 7, "label": "Article Footer 100%_desktop_mobile", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "p1": "byswn", "p2": "fjxb" } } }, { "id": 8, "label": "Fullscreen Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "cndo", "p2": "fjoh" } } }, { "id": 9, "label": "Fullscreen Mobile", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "cndo", "p2": "fjog" } } }, { "id": 10, "disable": true, "label": "Native Partner Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyb" } } }, { "id": 11, "disable": true, "label": "Native Partner Mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyc" } } }, { "id": 12, "label": "Кнопка в шапке", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "cndo", "p2": "fdhx" } } }, { "id": 13, "label": "DM InPage Video PartnerCode", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox_method": "createAdaptive", "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "cndo", "p2": "flvn" } } }, { "id": 14, "label": "Yandex context video banner", "provider": "yandex", "yandex": { "block_id": "VI-223677-0", "render_to": "inpage_VI-223677-0-130073047", "adfox_url": "//ads.adfox.ru/228129/getCode?pp=h&ps=cndo&p2=fpjw&puid1=&puid2=&puid3=&puid4=&puid8=&puid9=&puid10=&puid21=&puid22=&puid31=&puid32=&puid33=&fmt=1&dl={REFERER}&pr=" } }, { "id": 15, "label": "Плашка на главной", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "p1": "byudv", "p2": "ftjf" } } }, { "id": 16, "label": "Кнопка в шапке мобайл", "provider": "adfox", "adaptive": [ "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "p1": "ccydt", "p2": "ftwx" } } }, { "id": 17, "label": "Stratum Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "cndo", "p2": "fzvb" } } }, { "id": 18, "label": "Stratum Mobile", "provider": "adfox", "adaptive": [ "tablet", "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "cndo", "p2": "fzvc" } } } ]
Оперативные новости со всего мира
Подписаться на push-уведомления