Это пока скорее теоретическая статья. "Пока" и "теоретическая" это потому, что на текущий момент есть не много подтверждений, что этот метод работает.
Так же эта статья не в помощь криминальным элементам, так как с проблемой о которой далее пойдет речь, сталкиваются обычно добропорядочные граждане, которые неудачным апгрейдом окирпичили свой R-Link2, купили на замену б/у но получили на экране "anti-theft activated".
Обычно такая проблема решается перепрошивкой с помощью программатора, но я уже давно предполагал, что ее можно вылечить неинвазивным методом. Сам проверить не могу, так как ради эксперимента не хочу блокировать свой RL2 :)
Итак, механизм блокировки работает следующим образом: Блок ЦКБС периодически посылает на CAN шину 4-байтное значение VehicleID во фрейме 0x69F. R-Link2, когда впервые запускается на заводе, запоминает значение этого числа во внутренней переменной, которая называется ACODE. Далее, при каждом запуске, RL2 сравнивает значение VehicleID с шины, с тем, которое запомнил при первом запуске в переменной ACODE. Если значения не совпадают, то активируется блокировка, если значения совпадают то RL2 запускается в нормальном режиме.
Метод заключается в том, чтобы во время запуска RL2 активно посылать на шину то значение VehicleID которое ожидает там увидеть RL2.
Для проверки теории я немного дописал pyren3 и сделал специальный макрос
! Внимание ! Запускайте этот макрос только если у вас действительно есть эта проблема. !
1) Обновляем pyren3 до последней версии кнопкой в лаунчере
2) Копируем макрос к себе на диск
$addr = 13
can500
1003
value 1000 7 4 FFFFFFFF
1101
at sh 69F
at cra 69F
at r0
:begin
#
# Press q for Exit
#
if_key q end
_$hexValue
wait 0.1
goto begin
:end
exit
3) Убеждаемся что на экране висит надпись "anti-theft activated" с замочком
4) Подключаем ELM327 и запускаем макрос
5) RL2 должен перезагрузиться и если повезет, то уже без блокировки
6) В окне выполнения макроса нажимаем Q и отключам ELM327
Это снятие блокировки будет работать только до следующего перезапуска, поэтому далее вам нужно сбросить RL2 до девственного состояния кнопкой в DeveloperSide и настроить свой RL2 заново. Как это делается я уже писал в одной из своих прежних статей.
Ну и если эта инструкция поможет, то не поленитесь написать здесь об этом.
Удачи

Комментарии 39
Hello everyone I have checked the information given here, download the EMMC information and look for the ACODE address, now I can activate the radio with CAN Hacker, I found the location in the ACODE dump and I modified the VIN to test in a car.
Hello! Thank you a lot for your guides! I need help booting up RLINK using a test bed, I have connected BCM + Rlink unit + Display and OBD port ( 12v, gnd and CAN H + CAN L ), but the unit is not booting up, is there any CAN wake up message? I tried to send various macro for RLINK2 in hope that it wakes up, but maybe there is another way?
Thank you
Hello! I do not know exactly which frame wake it up. You may use the mod_term.py for saving all frames on a BUS during car opening and then make a macro for replaying all these frames in yours test bed.
For sending a raw frame from the macro you need to start the line with underscore "_"
Куда можно послать?
Добрый вечер у меня не получилось, перезагружается думает ну всё равно замочек висит
Пришлите пожалуйста логи посмотреть из папки pyren3/logs
Spasibo vsio rabotaet idealno.
Спасибо за подтверждение!
Спасибо! У меня получилось, включился после перезагрузки! Но машину закрыл/открыл — он опять в блокировке
Спасибо за обратную связь! Хорошо что метод работатет.
Такое поведение и предполагается. Но это позволяет вам добраться до кнопки virginize. После ее нажатия r-link2 нужно заново настроить макросом восстановления заводских настроек и уже после этого блокировка будет полностью снята
Так и сделал. Нажал virgin, а потом правда всё настроил по скриншотам из другого Эспаса, только уже убрал противоугонную защиту
Dobrij den. Kak panimaju etot mackro kod pisem v Pyren macro file s okancianiem .cmd i zapuskajem nazmia na Macro. Eto vsio? Spasibo.
Да — все верно.
Напишите пожалуйста по результатам, получилось или нет.
Добрый день, нажал случайно на кнопку сброса конфигурации, при конфигурировании Р-Линка2 от Каджара, теперь все включается, работает, но нет звука(при прокрутке ручки громкости даже не появляется полоска уровня громкости) и не настраивается радио, остальное настроил. В телеграм бот раньше, примерно пол года назад, отправлял вины, других авто, приходили ответы, сейчас отправляю, видно, что дошло, но ответ не приходит.Он еще работает, не знаете?
Привет, сэр. Я уже пробовал ваше решение, но оно не работает.
А логи можно посмотреть из папки logs?
Теоретически можно и канхакером отпралять пакет с ид в кан. Только вот девелоп мод я еще не пробовал жмакать кнопку виржин. Проверим. Больше интерисует вопрос с изилинк и магнитолами R013. Изилинк я разблокирую правкой дампа, в некоторых случаях неккоректно, но технология работает. А вот с магнитолами R013 на данный момент есть решение только с эмулятором от поляков за 50 евро
Да сработает на столе. У изилинков аналогичная блокировака. Кстати в том фрейме 69ф перевернутый с обратной стороны часть винкода. Но в вашей сети бегает такое же сообщение только с вашим айди. И будет срабатывать не всегда. Так же после включения может видить чужой айди и вырубаться. Вот бы найти как отключить полностью эту проверку.
Должен сработать и не только на столе. 69F посылается не очень часто, а макро шлет его примерно 10 раз в секунду. Вероятность "опередить" ЦКБС по меньшей мере 9:1
69F не всегда содержит перевернутых хвост VIN — у меня не так, но это и не суть важно — это в любом случае не какое-то секретное число.
Полностью проверку на RL2 можно снять через verginize. Не знаю как у изилинка — наверное там есть аналогичная процедура.
Еще не встречал что бы не край винкода во фрейме 69ф был. А где прочитать об этой процедуре очистки?
Какого-то подробного описания не встречал. На RL2 это просто кнопка на экране DeveloperSide.
Как туда попасть, например, можно посмотреть здесь.
Та это понятно. Но тогда автоугон перестанет быть защитой. Вы пробовали его нажимать? Скорее всего чип ругнется ошибкой и не даст вам этого сделать. Точно так же и в изилинке. Даже винкод заменить не дает.
Что нажимать? Virgin mode? эту кнопку у себя нажимал, как раз для того чтобы временно сменить VIN. VIN меняется.
Вопрос по командам макроса.
Как я понял после "at r0" на КАН-шину передается фрейм с ранее прочитанным VID? (используется $lastResponse ?).
Но как-бы <command> для такой передачи фрейма нет. Можно ли добавить такую <command> (и чтение и запись фреймов) в PyRen. Хотелось-бы иметь возможность в макросе одновременно использовать несколько диагностических команд и чтение-запись фреймов.
Сегодня еще немного дописал в mod_term — добавил команду var которая показывает текущее состояние всех переменных.
Не уверен, что правильно понял вопрос.
Если в терминале просто набрать команду для блока, которая начинается с шестнадцатеричной цифры, то эта команда будет отправлена в ELM как есть
13:712:ELM# 221000
62 10 00 11 12 13 14
13:712:ELM#
если спереди поставить подчерк, то терминал не будет ждать ответа
13:712:ELM# _221000
13:712:ELM#
Чтобы еще и сам ELM не ждал ответа, мы ему предварительно посылаем "at r0"
Служебная переменная
$lastResponse = 62 10 00 11 12 13 14
хранит последний ответ целиком
команда value создает несколько служебных переменных и она об этом сообщает
13:712:ELM# value 1000 7 4 FFFFFFFF
# LID( 1000 ) $rawValue = 286397204 $scaledValue = 286397204.0 $hexValue = 11121314
13:712:ELM#
Все текущие переменный можно посмотреть командой var
13:712:ELM# var
###### Variables #####
# $addr = 13
# $txa = 712
# $rxa = 732
# $prompt = ELM
# $lastResponse = 62 10 00 11 12 13 14
# $rawValue = 286397204
# $scaledValue = 286397204.0
# $hexValue = 11121314
13:712:ELM#
Вы так же можете сделать новую переменную, например так
13:712:ELM# $tmp = $hexValue
#(subst) $tmp = 11121314
13:712:ELM# var
###### Variables #####
# $addr = 13
# $txa = 712
# $rxa = 732
# $prompt = ELM
# $lastResponse = 62 10 00 11 12 13 14
# $rawValue = 286397204
# $scaledValue = 286397204.0
# $hexValue = 11121314
# $tmp = 11121314
Спасибо! Вот сейчас понятно (ранее "не понял" $hexValue)!
Тогда вопрос — какие команды для чтения фрейма, и в какой переменной сохраняются данные в этом случаи?
Системные фреймы терминал читать не может. Можно только режим монитора запустить ATMA но данные оттуда никуда не сохранятся. Здесь макро читает ACODE с самого "чужого" заблокированного rl2 командой 221000 и посылает ему на шину то что он ждет.
Понятно. После ATMA "посыпятся" фреймы без останова (до "буфер фул") :))
Привет, а как скрипт понимает что лежит в ACODE? И далее не проще ли тогда изменить данные в ACODE?
Я так понял что изменить данные не так просто. Вот для этого надо запустить макрос после как заработает rl2 надо сбросить на заводские настройки и тогда он изменит код.
Первый вопрос остался без ответа, как скрипт подбирает нужный код.
Походу скрипт затирает старый код.
Тогда отпадает необходимость обнулени, сразу свой вписываешь и всё.
Не могу сказать наверняка. Я один раз разблокировал r-link правкой дампа. Там кроме этого кода нужно ещё в нескольких местах править дамп ( если защита активирована)
Дамп в еммс нравится? Или в еемроме?
В еепроме
GeoDen87
Привет, а как скрипт понимает что лежит в ACODE? И далее не проще ли тогда изменить данные в ACODE?
Привет. Скрипт читает текущее состояние acode вот этой командой
value 1000 7 4 FFFFFFFF
считанное значение сохраняется в служебной переменной $hexValue
затем отправляет RL2 в перезагрузку командой
1101
и потом начинает каждые 100мс слать запомненное значение ACODE на шину
_$hexValue
подчерк в начале команды означает, что ответа на эту команду ждать не нужно так как это системный фрейм
напрямую изменить acode командой 2e1000xxxxxxxx нельзя.
Отлично, читать можем, а писать не пробовал? Может можно.
Скажу честно — не пробовал ), но почти уверен, что как и VIN его нельзя изменить если он не нулевой. После процедуры virgine vin изменить можно, а acode запоминается автоматически.