key programming immo tools emergency start device программаторы ключа заводилки Кодграббер штатных охранных систем, toyota, lexus, subaru.

попробовал брутить keyloq )))

#1
делать нех... было - набросал подбор криптоключа с инкрементом оного и проверкой на совпадение дискриминатора и старшего байта счетчика а младшего байта на отличие на единицу. срисовал с брела шерифовского два последовательных посыла и поставил брутить. брутил в симуляторе MPLab(ы). кароче за сутки брута наклацало 6 милимонов вариантов после чего от экспериментов с ксеноновой лампочкой рядом с блоком компа
комп глюканул и повис. на этом чюдо брут закончился.)))
а проект остался ну и решил выложить мож кто заморочится да и накрутит чего нового??? функция декрипта рабочая стопудов - проверено с помощью микрочиповской тулзы "KEELTOOL".
 

Вложения

#3
запускаеш МПлабу открываеш файл startup.asm

береш две последовательные посылки кейлока типа 1 и 2. первый хоппинг прописываеш сюда:
movlw 0xXX
movwf BUF1_0
movlw 0xXX
movwf BUF1_1
movlw 0xXX
movwf BUF1_2
movlw 0xXX
movwf BUF1_3

второй хоппинг прописываеш сюда:

movlw 0xYY
movwf BUF2_0
movlw 0xYY
movwf BUF2_1
movlw 0xYY
movwf BUF2_2
movlw 0xYY
movwf BUF2_3

компилируеш всё енто и запускаеш в симуляторе. симулятор расшифровывает хоп1 и хоп2 и сверяет значение дискриминатора и проверяет счетчик на +1 в случае удачной проверки прога выскакивает на брекпоинт и зависает. ключ шифрования в этом случае
находится в регистрах M_KEY_7 - M_KEY_0 и его можно посмотреть просто наведя курсор на регистр. если не срослось то симулятор увеличивает ключ на единицу
и все повторяется.)))
 

gar47

New Member
#4
ясно, но мне кажется к этуму времени мои внуки станут дедами )))

---------- Добавлено в 14:22 ---------- Предыдущее сообщение было написано в 13:55 ----------

кстати от скорости компа сильно зависит или неочень? сколько он перебирает например за секунду?
 

gar47

New Member
#5
малотит уже сутки:D пока ничего, чувствую бессмысленное занятие, но азарт есть! а где посмотреть кол-во перибранных вариантов?
 
#8
Ну выб уж разделились, разбилибы на части ключ и каждый брутил бы свою часть. В симуляторе наверно будет долго, непробывали перенести эту прогу в делфи или Си, скорость то будет быстрея.
Яб для начала проверил прогу на извесной сиге с извесным ключем (мангуст).
 
#9
да поболту!))) если б и разбили на десять частей то - десять лет вперед десять назад х...йня ))):35: в обсчем накатал это все для интереса: работает энкрипт-декрипт или нет.
ато обсуждали это с Oleg-om еще год назад. он сделал а я нет.))) там еще косяк может быть с дискриминатором так как я не до конца понял что это такое.:)
 
#10
На в какой версии мп-лаб можно это запустить. Как ты определяеш значение NLF функции, а то я разобраться не могу.
 
#11
у меня мплаб 742 помойму.

определение переменной nlf (функция представляет собой простую таблицу от 0 до 31 где каждому числу соответствует 0 или 1):

NLF_1(метка)
CLRF NLF_TMP ; очищаем временный регистр
BTFSC CSR0,0 ; смотрим HOP0,0
BSF NLF_TMP,0 ; помещаем значение в NLF_TMP,0
BTFSC CSR1,0 ; смотрим HOP1,0
BSF NLF_TMP,1 ; помещаем значение в NLF_TMP,1
BTFSC CSR2,3 ; смотрим HOP2,3
BSF NLF_TMP,2 ; помещаем значение в NLF_TMP,2
BTFSC CSR3,1 ; смотрим HOP3,1
BSF NLF_TMP,3 ; помещаем значение в NLF_TMP,3
BTFSC CSR3,6 ; смотрим HOP3,6
BSF NLF_TMP,4 ; помещаем значение в NLF_TMP,4
; в итоге в NLF_TMP,4 - NLF_TMP,0 имеем номер ; ; ячейки таблицы(от 0 до 31)

MOVF NLF_TMP,W ;
CALL NLF_F ;

NLF_F(метка)
ADDWF PCL,F ; используя этот номер как смещение +PCL ; ; извлекаем из таблицы значение функции для ; данного круга

RETLW D'0'
RETLW D'1'
RETLW D'1'
RETLW D'1'
RETLW D'0'
RETLW D'1'
RETLW D'0'
RETLW D'0'
RETLW D'0'
RETLW D'0'
RETLW D'1'
RETLW D'0'
RETLW D'1'
RETLW D'1'
RETLW D'1'
RETLW D'0'
RETLW D'0'
RETLW D'0'
RETLW D'1'
RETLW D'1'
RETLW D'1'
RETLW D'0'
RETLW D'1'
RETLW D'0'
RETLW D'0'
RETLW D'1'
RETLW D'0'
RETLW D'1'
RETLW D'1'
RETLW D'1'
RETLW D'0'
RETLW D'0'

может кто поправит потому что по математике в ПТУ у меня была твердая 3- (с минусом))):eek:
 
Последнее редактирование:
#12
Открою великую тайну)))))))))))))
Вместо забивания таблицы, забиваете в регистры константу nlf=3a5c742e (это тоже самое в БИН виде) и берете из этой константы бит под номером
(32-(число переведенное из набора битов3.6,3.1,2.3,1.0,0.0))
3 . 6
3 . 1
2 . 3
.....
| |_________номер бита в байте
|___номер байта
конечно каждый делает как удобнее!!!!
 
Последнее редактирование:
#13
да не вопрос))), я как бы для наглядности так расписал чтоб человек побыстрее догнал мыслю.
но ваще-то нада даташит почитать повнимательнее и несколько раз пока понимание придет. а лучче попробовать сравнить пару трое даташитов.
 
#14
По даташиту все понятно .Как у тебя в программе определяется что значение 00011 соответствует номеру ячейки 3(может у тебя гдето еще таблица ).
 
#15
00011 это 3(dec)

NLF_F(метка)
ADDWF PCL,F ; добавляем 3 к PCL и автоматом перескакиваем...

RETLW D'0'
RETLW D'1'
RETLW D'1'
RETLW D'1' ; СЮДА!!! где возврат из подпрограммы с загрузкой ; константы D'1' в аккумулятор
RETLW D'0'
RETLW D'1'
RETLW D'0'
RETLW D'0'
RETLW D'0'
RETLW D'0'
RETLW D'1'
RETLW D'0'
RETLW D'1'
RETLW D'1'
RETLW D'1'
RETLW D'0'
RETLW D'0'
RETLW D'0'
RETLW D'1'
RETLW D'1'
RETLW D'1'
RETLW D'0'
RETLW D'1'
RETLW D'0'
RETLW D'0'
RETLW D'1'
RETLW D'0'
RETLW D'1'
RETLW D'1'
RETLW D'1'
RETLW D'0'
RETLW D'0'

---------- Добавлено в 11:33 ---------- Предыдущее сообщение было написано в 11:29 ----------

потом смотрим таблицу в даташите и точно!!! переменной b'00011' соответствует значение функции "1"
 
#17
да фиг ево знает. по мойму она ничего не определяет а просто оперирует этим (двоичным!) числом и все. компилятору ,например, похуй в каком виде ему тройку суют лишь бы синтаксис правильный был. или я чивой-то не понял вопроса:confused:

---------- Добавлено в 07:41 ---------- Предыдущее сообщение было написано в 07:22 ----------

чтоб было понятней забей это число (00011) в калькулятор и переведи в децимал. калькулятор покажет "3".

---------- Добавлено в 07:47 ---------- Предыдущее сообщение было написано в 07:41 ----------

имеем из хоппинга число b'00011'

NLF_F(метка)
ADDWF PCL,F ; добавляем b'00011' к PCL и автоматом перескакиваем...

RETLW D'0'
RETLW D'1'
RETLW D'1'
RETLW D'1' ; СЮДА!!! где возврат из подпрограммы с загрузкой ; константы D'1' в аккумулятор
RETLW D'0'
RETLW D'1'
RETLW D'0'
RETLW D'0'
RETLW D'0'
RETLW D'0'
RETLW D'1'
RETLW D'0'
RETLW D'1'
RETLW D'1'
RETLW D'1'
RETLW D'0'
RETLW D'0'
RETLW D'0'
RETLW D'1'
RETLW D'1'
RETLW D'1'
RETLW D'0'
RETLW D'1'
RETLW D'0'
RETLW D'0'
RETLW D'1'
RETLW D'0'
RETLW D'1'
RETLW D'1'
RETLW D'1'
RETLW D'0'
RETLW D'0'

вот так прога выглядит в реале т.е. десятичными числами в реале мы не оперируем.
 
Последнее редактирование:
#18
Так бы и сказали что из двоичной системы переводим в десятичную получаем 3.
Да по письмам трудно объяснятся.
Так я не понял серийный номерпульта в получении хопинговой части не учавствует?
 
#20
косвенно участвует, из него и мануфака крипто ключ генерится, которым крипт\декрипт делают
Тут ты не прав, крипто ключ не генирится из серийника т.к. сига с двумя разными пультами(с разными сетийными номерами) открываю одну сигу(крипта у них одинакова).
Я думаю что он учавствуют в формирования хопинга, 32 бита как раз и состоит из 4 бита код кнопки+16 серийный номер пульта+12 значение синхронизации.Это написано и в даташите.
 
Последнее редактирование: