Библиотека чтения ID брелков сигнализациий HCS301 KEELOQ

vlkam
Offline
Зарегистрирован: 17.02.2013

Вот накарябал свою первую библиотечку по чтению кодов с брелков на микросхеме HCS301 Keeloq

Целевое назначение - можно использовать в разных системах контроля доступа

Чип HCS301 Keeloq довольно часто используемый в брелках, отличается тем, что имеет "катящийся" код, т.е. постянно изменяемый. Расшифровку кода я не сделал, однако из передаваемых данных можно вытащить следующую инфу : блок кодированной инфы 32 бита, серийный номер брелка, нажатые кнопки, состояние батареи брелка

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

"Катящийся код" позволяет делать систему с брелками, защищенную от клонирования и сканирования

Найти такие брелки на ебее можно по ключевым словам hcs 301

Например вот лот, который я использовал

http://www.ebay.com/itm/433MHZ-2PCS-HCS301-Rolling-Code-Remotes-Control-1-pcs-Learning-Key-Receiver-/251245266676?_trksid=p2047675.l2557&ssPageName=STRK%3AMEWNX%3AIT&nma=true&si=oow8DsBVnWQDJJGoPu%252FRSN6Z5Oo%253D&orig_cvip=true&rt=nc

Официально платка имеет 4 выхода, которые активируются при нажатии на одну из 4х кнопок брелка, но неофициально есть контакт "data" с которого можно считывать данные.
Подозреваю, что это можно делать любым приемником с соответствующей частотой

Не знаю, как тут прикрепить файлы, поэтому вот внешние ссылки
Библиотека
http://71reg.ru/HCS301.rar

Data sheet на HCS301
http://71reg.ru/hcs301.pdf

Ключевые слова:
Ардуино Arduino HCS301 KEELOQ Code Hopping rolling роллинг прыгающий код уникальный айди unique ID брелок KeyFob  брелоков

vlkam
Offline
Зарегистрирован: 17.02.2013

Вот пример того, что читается с брелка

Зашифрованный постоянно меняющийся блок 1605787492
Серийный номер 223657
Нажата кнопка Close
Повтор =0
Батарея в норме

Evgen
Evgen аватар
Offline
Зарегистрирован: 10.06.2011

То есть если купить вот такой наборчик http://www.ebay.com/itm/433Mhz-RF-transmitter-and-receiver-link-kit-for-Arduino-ARM-MCU-WL-/140719918135?pt=LH_DefaultDomain_0&hash=item20c38f8c37, использовать из него приемник совместно с вашей библиотекой, то можно будет считывать коды с брелков автосигнализаций?

vlkam
Offline
Зарегистрирован: 17.02.2013

Evgen пишет:
То есть если купить вот такой наборчик http://www.ebay.com/itm/433Mhz-RF-transmitter-and-receiver-link-kit-for-Arduino-ARM-MCU-WL-/140719918135?pt=LH_DefaultDomain_0&hash=item20c38f8c37, использовать из него приемник совместно с вашей библиотекой, то можно будет считывать коды с брелков автосигнализаций?

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

vlkam
Offline
Зарегистрирован: 17.02.2013

Еще один брелок протестировал, сига APS, тоже считывается

vlkam
Offline
Зарегистрирован: 17.02.2013

Evgen пишет:
То есть если купить вот такой наборчик http://www.ebay.com/itm/433Mhz-RF-transmitter-and-receiver-link-kit-for-Arduino-ARM-MCU-WL-/140719918135?pt=LH_DefaultDomain_0&hash=item20c38f8c37, использовать из него приемник совместно с вашей библиотекой, то можно будет считывать коды с брелков автосигнализаций?

Проверил - работает.

Patrik
Offline
Зарегистрирован: 15.05.2013

Имея код брелка как при помощи Arduino воспроизвести его?

vlkam
Offline
Зарегистрирован: 17.02.2013

 С какой целью ? Чтобы приемник KEELOQ типа сигнализации сигнал воспринял как родной ?

Patrik
Offline
Зарегистрирован: 15.05.2013

vlkam пишет:

 С какой целью ? Чтобы приемник KEELOQ типа сигнализации сигнал воспринял как родной ?

Открывать то, что по техпричинам временно не открывается. В законном понимание этого смысла)))

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

Вообще можно зашить код в брелок  с Arduino без самой сигнализации?

vlkam
Offline
Зарегистрирован: 17.02.2013

Тут вся фишка в том, что HCS301 имеет "прыгающий" код.  Каждая посылка уникальна в пределах что то около 65000 посылок.
Код формируется из кода производителя + серийный номер. Алгоритм KEELOQ вроде взломан, но настолько глубоко я не копал

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

 

Patrik
Offline
Зарегистрирован: 15.05.2013

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

vlkam
Offline
Зарегистрирован: 17.02.2013

По поводу простых радиопультов поищи по ключевому слову RCswitch это вроде библиотека для работы радиобрелками (но без прыгающего кода)

Я разбирался по даташиту HCS301
http://www.allcomponents.ru/pdf/microchip/hcs301.pdf

 

vlkam
Offline
Зарегистрирован: 17.02.2013

А теперь тоже самое, но на прерываниях

001#define LED_PIN           13
002#define HCS_RECIEVER_PIN  2    // пин к которому подключен приемник для брелков
003 
004 
005class HCS301 {
006public:
007    unsigned BattaryLow : 1;  // На брелке села батарейка
008    unsigned Repeat : 1; // повторная посылка
009    unsigned BtnNoSound : 1;
010    unsigned BtnOpen : 1;
011    unsigned BtnClose : 1;
012    unsigned BtnRing : 1;
013    unsigned long SerialNum;
014    unsigned long Encript;
015 
016    void print();
017};
018 
019volatile boolean    HCS_Listening = true;      
020byte                HCS_preamble_count = 0;
021uint32_t            HCS_last_change = 0;
022uint32_t            HCS_start_preamble = 0;
023uint8_t             HCS_bit_counter;                // счетчик считанных бит данных
024uint8_t             HCS_bit_array[66];              // массив считанных бит данных
025#define             HCS_TE      400                 // типичная длительность имульса Te
026#define             HCS_Te2_3   600                 // HCS_TE * 3 / 2
027 
028HCS301 hcs301;
029 
030#define HCS_DEBUG_
031 
032#ifdef HCS_DEBUG
033 
034uint16_t HCS_PulseDuration[12];
035uint16_t HCS_BitDuration[66];
036uint32_t HCS_msg_duration;
037 
038struct dta_ {
039    uint16_t delay;
040    byte f;
041    byte st;
042};
043 
044volatile dta_ arr[1000];
045volatile int poz_a = 0,poz_b = 0;
046#endif
047 
048void HCS301::print(){
049    String btn;
050 
051    if (BtnRing == 1) btn += "Ring";
052    if (BtnClose == 1) btn += "Close";
053    if (BtnOpen == 1) btn += "Open";
054    if (BtnNoSound == 1) btn += "NoSound";
055 
056    String it2;
057    it2 += "Encript ";
058    it2 += Encript;
059    it2 += " Serial ";
060    it2 += SerialNum;
061    it2 += " ";
062    it2 += btn;
063    it2 += " BattaryLow=";
064    it2 += BattaryLow;
065    it2 += " Rep=";
066    it2 += Repeat;
067 
068    Serial.println(it2);
069 
070}
071 
072void setup() {               
073     
074    Serial.begin(9600); 
075    attachInterrupt(0, HCS_interrupt, CHANGE);
076 
077    pinMode(LED_PIN, OUTPUT);
078    pinMode(HCS_RECIEVER_PIN, INPUT);
079}
080 
081void loop() {
082     
083    if(HCS_Listening == false){
084         
085        HCS301 msg;
086        memcpy(&msg,&hcs301,sizeof(HCS301));
087     
088        msg.print();
089        #ifdef HCS_DEBUG
090        if(msg.SerialNum != 639){
091 
092            Serial.println("Raw >>>>>>>>>>>>>>>>>>>>>>>");
093            while(1){
094                if(poz_b == poz_a) break;
095                Serial.println(String(poz_b)+String("   ")+String(arr[poz_b].delay)+String("   ")+String(arr[poz_b].f == 0 ? "LOW":"HIGH")+String("   ")+String(arr[poz_b].st));
096                poz_b++;
097            }
098            Serial.println("Data >>>>>>>>>>>>>>>>>>>>>>>");
099            for(int i = 0;i<66;i++){ Serial.println(HCS_bit_array[i]);       }
100        } else {
101             
102        }
103        poz_a = 0,poz_b = 0;
104        #endif
105 
106        HCS_Listening = true;
107    }
108}
109 
110//
111 
112void HCS_interrupt(){
113 
114    if(HCS_Listening == false){
115        return;
116    }
117 
118    uint32_t cur_timestamp = micros();
119    uint8_t  cur_status = digitalRead(HCS_RECIEVER_PIN);
120    uint32_t pulse_duration = cur_timestamp - HCS_last_change;
121    HCS_last_change         = cur_timestamp;
122 
123    #ifdef HCS_DEBUG
124    if(poz_a < 999){
125        arr[poz_a].delay = pulse_duration;
126        arr[poz_a].f = cur_status == HIGH ? 0 : 1;
127        poz_a++;
128    }
129    #endif
130 
131    // ловим преамбулу
132    if(HCS_preamble_count < 12){
133        if(cur_status == HIGH){
134            if( ((pulse_duration > 200) && (pulse_duration < 400)) || HCS_preamble_count == 0){
135                // начало импульса преамбулы
136                if(HCS_preamble_count == 0){
137                    HCS_start_preamble = cur_timestamp; // Отметим время старта преамбулы
138                }
139            } else {
140                // поймали какую то фигню, неправильная пауза между импульсами
141                HCS_preamble_count = 0; // сбрасываем счетчик пойманных импульсов преамбулы
142                goto exit;
143 
144            }
145        } else {
146            // конец импульса преамбулы
147            if((pulse_duration > 400) && (pulse_duration < 600)){
148                #ifdef HCS_DEBUG
149                    HCS_PulseDuration[HCS_preamble_count] = pulse_duration;
150                #endif
151                // поймали импульс преамбулы
152                HCS_preamble_count ++;
153                #ifdef HCS_DEBUG
154                arr[poz_a-1].st = HCS_preamble_count;
155                #endif
156                if(HCS_preamble_count == 12){
157                    // словили преамбулу
158                    //HCS_Te = (cur_timestamp - HCS_start_preamble) / 23;  // вычисляем длительность базового импульса Te
159                    //HCS_Te2_3 = HCS_Te * 3 / 2;
160                    HCS_bit_counter = 0;
161                    goto exit;
162                }
163            } else {
164                // поймали какую то фигню
165                HCS_preamble_count = 0; // сбрасываем счетчик пойманных импульсов преамбулы
166                goto exit;
167            }
168        }
169    }
170     
171 
172    // ловим данные
173    if(HCS_preamble_count == 12){
174        if(cur_status == HIGH){
175            if(((pulse_duration > 300) && (pulse_duration < 900)) || HCS_bit_counter == 0){
176                // начало импульса данных
177            } else {
178                // неправильная пауза между импульсами
179                HCS_preamble_count = 0;
180                goto exit;
181            }
182        } else {
183            // конец импульса данных
184            if((pulse_duration > 300) && (pulse_duration < 900)){
185                HCS_bit_array[65 - HCS_bit_counter] = (pulse_duration > HCS_Te2_3) ? 0 : 1; // импульс больше, чем половина от Те * 3 поймали 0, иначе 1
186                 
187                #ifdef HCS_DEBUG   
188                HCS_BitDuration[HCS_bit_counter] = pulse_duration;
189                #endif
190                HCS_bit_counter++; 
191                #ifdef HCS_DEBUG       
192                arr[poz_a-1].st = HCS_bit_counter;
193                #endif
194                if(HCS_bit_counter == 66){
195                    // поймали все биты данных
196                 
197                    HCS_Listening = false// отключем прослушку приемника, отправляем пойманные данные на обработку
198                    HCS_preamble_count = 0; // сбрасываем счетчик пойманных импульсов преамбулы
199                    #ifdef HCS_DEBUG               
200                    HCS_msg_duration = cur_timestamp - HCS_start_preamble;
201                    #endif                 
202 
203                    hcs301.Repeat = HCS_bit_array[0];
204                    hcs301.BattaryLow = HCS_bit_array[1];
205                    hcs301.BtnNoSound = HCS_bit_array[2];
206                    hcs301.BtnOpen = HCS_bit_array[3];
207                    hcs301.BtnClose = HCS_bit_array[4];
208                    hcs301.BtnRing = HCS_bit_array[5];
209 
210                    hcs301.SerialNum = 0;
211                    for(int i = 6; i < 34;i++){
212                        hcs301.SerialNum = (hcs301.SerialNum << 1) + HCS_bit_array[i];
213                    };
214 
215                    uint32_t Encript = 0;
216                    for(int i = 34; i < 66;i++){
217                         Encript = (Encript << 1) + HCS_bit_array[i];
218                    };
219                    hcs301.Encript = Encript;
220                }
221            } else {
222                // поймали хрень какую то, отключаемся
223                HCS_preamble_count = 0;
224                goto exit;
225            }
226        }
227    }
228     
229    exit:;
230 
231    //digitalWrite(LED_PIN,cur_status);
232}

 

maksim
Offline
Зарегистрирован: 12.02.2012

vlkam пишет:

Тут вся фишка в том, что HCS301 имеет "прыгающий" код.  Каждая посылка уникальна в пределах что то около 65000 посылок.
Код формируется из кода производителя + серийный номер. Алгоритм KEELOQ вроде взломан, но настолько глубоко я не копал

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

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

Все верно, что бы организовать защиту от клонирования (копирования) пакета существует счетчик синхранизации:

Данный счетчик (Sync Value) при каждом нажатии на кнопку брелка инкрементируется (увеличивается на 1). В сигнализации помимо серийного номера брелка хранится еще и значение этого счетчика и каждый последующий пакет должен иметь значение счетчика больше чем предыдущий, иначе сигнализация никак не отреагирует на пакет, а может даже и сирену включит "распознав" в этом попытку взлома.

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

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

И так, рассмотрим как это делается на сигнализациях, которые на одну и ту же кнопку снимается и ставится на охрану.
Когда хозяин авто нажимает на кнопку считываем пакет, но при этом глушим его передатчиком, сигнализация данный пакет не принимает - то есть пакет прочитан только нами, сохраняем этот пакет. Далее хозяин авто (так как машина не закрылась) тыкает еще раз, а мы делаем тоже самое. И сразу же отправляем сохраненный ранее пакет. Все! Машина закрыта, хозяин авто уходит, а у нас есть сохраненый пакет от второго нажатия с инкрементированным счетчиком, который и снимет сигналку с охраны.

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

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

Вот как то так. 

nikolaki
nikolaki аватар
Offline
Зарегистрирован: 14.02.2013

Кто-нить может поделиться библиотекой HCS301? Линк с поста 1 дохлый.

vlkam
Offline
Зарегистрирован: 17.02.2013

Поделюсь, отчего ж нет. Только я её на прерывания переписал и теперь это не библиотека, а просто функция.

001#define LED_PIN     13
002 
003// Радиобрелки ///////////////////////////////////////////////////////////////////////////////////////
004#define HCS_RECIEVER_PIN  2    // пин к которому подключен приемник для брелков
005 
006class HCS301 {
007public:
008    unsigned BattaryLow : 1;  // На брелке села батарейка
009    unsigned Repeat : 1; // повторная посылка
010    unsigned BtnNoSound : 1;
011    unsigned BtnOpen : 1;
012    unsigned BtnClose : 1;
013    unsigned BtnRing : 1;
014    unsigned long SerialNum;
015    unsigned long Encript;
016 
017    void print();
018};
019 
020volatile boolean    HCS_Listening = true;      
021byte                HCS_preamble_count = 0;
022uint32_t            HCS_last_change = 0;
023//uint32_t          HCS_start_preamble = 0;
024uint8_t             HCS_bit_counter;                // счетчик считанных бит данных
025uint8_t             HCS_bit_array[66];              // массив считанных бит данных
026#define             HCS_TE      400                 // типичная длительность имульса Te
027#define             HCS_Te2_3   600                 // HCS_TE * 3 / 2
028 
029HCS301 hcs301;
030 
031 
032void setup()
033{
034    Serial.begin(9600);
035 
036    // Брелки
037    pinMode(HCS_RECIEVER_PIN, INPUT);
038    attachInterrupt(0, HCS_interrupt, CHANGE);
039 
040    Serial.println("Setup OK");
041}
042 
043 
044void loop()
045{
046    long CurTime = millis();
047 
048    // проверяем наличие команды брелка
049    if(HCS_Listening == false){
050         
051        HCS301 msg;
052        memcpy(&msg,&hcs301,sizeof(HCS301));
053 
054        // включаем слушанье брелков снова
055        HCS_Listening = true;
056 
057        Serial.println(String("KeyFb#")+String(msg.SerialNum));
058    }
059 
060}
061  
062// Функции класса  HCS301 для чтения брелков
063void HCS301::print(){
064    String btn;
065 
066    if (BtnRing == 1) btn += "Ring";
067    if (BtnClose == 1) btn += "Close";
068    if (BtnOpen == 1) btn += "Open";
069    if (BtnNoSound == 1) btn += "NoSound";
070 
071    String it2;
072    it2 += "Encript ";
073    it2 += Encript;
074    it2 += " Serial ";
075    it2 += SerialNum;
076    it2 += " ";
077    it2 += btn;
078    it2 += " BattaryLow=";
079    it2 += BattaryLow;
080    it2 += " Rep=";
081    it2 += Repeat;
082 
083    Serial.println(it2);
084 
085}
086 
087void HCS_interrupt(){
088 
089    if(HCS_Listening == false){
090        return;
091    }
092 
093    uint32_t cur_timestamp = micros();
094    uint8_t  cur_status = digitalRead(HCS_RECIEVER_PIN);
095    uint32_t pulse_duration = cur_timestamp - HCS_last_change;
096    HCS_last_change         = cur_timestamp;
097 
098    // ловим преамбулу
099    if(HCS_preamble_count < 12){
100        if(cur_status == HIGH){
101            if( ((pulse_duration > 150) && (pulse_duration < 500)) || HCS_preamble_count == 0){
102                // начало импульса преамбулы
103                //if(HCS_preamble_count == 0){
104                //  HCS_start_preamble = cur_timestamp; // Отметим время старта преамбулы
105                //}
106            } else {
107                // поймали какую то фигню, неправильная пауза между импульсами
108                HCS_preamble_count = 0; // сбрасываем счетчик пойманных импульсов преамбулы
109                goto exit;
110 
111            }
112        } else {
113            // конец импульса преамбулы
114            if((pulse_duration > 300) && (pulse_duration < 600)){
115                // поймали импульс преамбулы
116                HCS_preamble_count ++;
117                if(HCS_preamble_count == 12){
118                    // словили преамбулу
119                    //HCS_Te = (cur_timestamp - HCS_start_preamble) / 23;  // вычисляем длительность базового импульса Te
120                    //HCS_Te2_3 = HCS_Te * 3 / 2;
121                    HCS_bit_counter = 0;
122                    goto exit;
123                }
124            } else {
125                // поймали какую то фигню
126                HCS_preamble_count = 0; // сбрасываем счетчик пойманных импульсов преамбулы
127                goto exit;
128            }
129        }
130    }
131     
132 
133    // ловим данные
134    if(HCS_preamble_count == 12){
135        if(cur_status == HIGH){
136            if(((pulse_duration > 250) && (pulse_duration < 900)) || HCS_bit_counter == 0){
137                // начало импульса данных
138            } else {
139                // неправильная пауза между импульсами
140                HCS_preamble_count = 0;
141                goto exit;
142            }
143        } else {
144            // конец импульса данных
145            if((pulse_duration > 250) && (pulse_duration < 900)){
146                HCS_bit_array[65 - HCS_bit_counter] = (pulse_duration > HCS_Te2_3) ? 0 : 1; // импульс больше, чем половина от Те * 3 поймали 0, иначе 1
147                HCS_bit_counter++; 
148                if(HCS_bit_counter == 66){
149                    // поймали все биты данных
150                 
151                    HCS_Listening = false// отключем прослушку приемника, отправляем пойманные данные на обработку
152                    HCS_preamble_count = 0; // сбрасываем счетчик пойманных импульсов преамбулы
153 
154                    hcs301.Repeat = HCS_bit_array[0];
155                    hcs301.BattaryLow = HCS_bit_array[1];
156                    hcs301.BtnNoSound = HCS_bit_array[2];
157                    hcs301.BtnOpen = HCS_bit_array[3];
158                    hcs301.BtnClose = HCS_bit_array[4];
159                    hcs301.BtnRing = HCS_bit_array[5];
160 
161                    hcs301.SerialNum = 0;
162                    for(int i = 6; i < 34;i++){
163                        hcs301.SerialNum = (hcs301.SerialNum << 1) + HCS_bit_array[i];
164                    };
165 
166                    uint32_t Encript = 0;
167                    for(int i = 34; i < 66;i++){
168                         Encript = (Encript << 1) + HCS_bit_array[i];
169                    };
170                    hcs301.Encript = Encript;
171                }
172            } else {
173                // поймали хрень какую то, отключаемся
174                HCS_preamble_count = 0;
175                goto exit;
176            }
177        }
178    }
179     
180    exit:;
181 
182    //digitalWrite(LED_PIN,cur_status);
183}

 

nikolaki
nikolaki аватар
Offline
Зарегистрирован: 14.02.2013

Спасибки огромное!!!

vlkam
Offline
Зарегистрирован: 17.02.2013

nikolaki пишет:
Спасибки огромное!!!

Не за что, если ошибки какие нароешь или доработаешь, скинь сюда пожалуйста

Но в принципе ошибки маловероятны, код уже скоро полгода в работе

4ishops
Offline
Зарегистрирован: 06.10.2012

Круто, не думали добавить поддержку этих чипов в RCSwitch?

satai
satai аватар
Offline
Зарегистрирован: 22.04.2014

всем привет ! начну свой вопрос с того,что задался целью зделать брелок СЕЗАМ откройся !ну и как обычно это бывает у начинающего,я много и по долгу гуглил И прихожу к такому мнению,что не стоит настолько углубляться ,ВЕДЬ истина лежит на поверхности !мне сегодня приносили пацаны одну такую на ПЯТЁРОЧКИ и я посмотрев повнимательнее понял что к ней в домашних условиях не прикосались !но вот интерестная штука - кварц в ней на 21.4 Мгц в противоположность стандарту 433.92 !,так-жэ некоторые умельцы ставят на 1.0 Мгц ! Вопрос :достаточно ли в брелках замены кварца чтобы из него вышел кодграббер ?

 

vlkam
Offline
Зарегистрирован: 17.02.2013

satai пишет:
Вопрос :достаточно ли в брелках замены кварца чтобы из него вышел кодграббер ?

Конечно не достаточно!

Параллельно кварцу нужно еще подстроечный резистор поставить на 100 кОм.  Вот именно этим резистором и граббить код

satai
satai аватар
Offline
Зарегистрирован: 22.04.2014

АЛЛЕЛУЯ ! друг скинь схемку а ? я паяльным ремеслом занялся недавно и первое что зделал-жучок !нехочу останавливаться !в инете помоему банят подобные темы-очень трудно чтолибо найти !но я знал что есть пацаны которые не оставят без хлеба других пацанов !      то есть в любом брелке накинуть кудато лапы резистра параллельно любому кварцу ??? вот блин надо было брелок у себя оставить,но и звонить пока не хочу,пока с уверенностью не скажу им что да смогу зделать !

satai
satai аватар
Offline
Зарегистрирован: 22.04.2014

satai
satai аватар
Offline
Зарегистрирован: 22.04.2014

вот чтото наподобие такой схемы да ?

satai
satai аватар
Offline
Зарегистрирован: 22.04.2014

satai
satai аватар
Offline
Зарегистрирован: 22.04.2014

satai
satai аватар
Offline
Зарегистрирован: 22.04.2014

satai
satai аватар
Offline
Зарегистрирован: 22.04.2014

satai
satai аватар
Offline
Зарегистрирован: 22.04.2014

satai
satai аватар
Offline
Зарегистрирован: 22.04.2014

 очень нужны любые коментарии к вышепроэллюстрированным схемам !любая инфа !!!!

vlkam
Offline
Зарегистрирован: 17.02.2013

satai пишет:
очень нужны любые коментарии к вышепроэллюстрированным схемам !любая инфа !!!!

Клевые схемы, бро!

А если серьезно, то

1. Дело не в схеме, а в "мозгах", т.е. программе
2. Взлом HCS не тривиальная задача, тут описывался способ, но к нему есть серьезные вопросы.
3. Эта задача не для твоего уровня квалификации, это 100%

 

satai
satai аватар
Offline
Зарегистрирован: 22.04.2014

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

satai
satai аватар
Offline
Зарегистрирован: 22.04.2014

а у заводских ведь мозги есть ?!

roman2712@mail.ru
Offline
Зарегистрирован: 16.01.2014

почитайте http://phreakerclub.com/

satai явно не ваша квалификация, либо вы просто народ троллите...

 

vlkam
Offline
Зарегистрирован: 17.02.2013

roman2712@mail.ru пишет:
почитайте http://phreakerclub.com/

Какой интересный сайт. И прямо сходу там нашел алгоритм дешифрации посылки Keeloq

http://phreakerclub.com/forum/showthread.php?t=1094

Спасибо за ссылку.

satai
satai аватар
Offline
Зарегистрирован: 22.04.2014

ну да я понимаю ! вы ведь уже родились такими-с програматором в голове !когда права получали вспомните ка с каким призрением на вас автолюбители смотрели-тоже наверное с рулём родились !)))я не оскорбляю,а констатирую факт !полгода назад купил себе ноут и не знал как его включить,а сейчас уже не пользуюсь антивирусами !всё в этом мире познаётся ребята и для вас это может и хобби,но для меня жэ хлеб насущный-от практики перехожу к теорий!я ещё с линеички начинал(40см.)!не ну я конечно жэ понимаю,что можно открыть и прописать ключь !вот только работёнка эта при котороой можно и получить,да хотябы и срок !,да короче давайте расказывайте и объясняйте что по чём.при себе имею комп и паяльник !)))

vlkam
Offline
Зарегистрирован: 17.02.2013

satai пишет:
да короче давайте расказывайте и объясняйте что по чём.при себе имею комп и паяльник !)))

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

satai
satai аватар
Offline
Зарегистрирован: 22.04.2014

не вопрос !я микроконтроллер сниму с игрушки,у которой светодиоды мигают )))

satai
satai аватар
Offline
Зарегистрирован: 22.04.2014

http://rsataev2014.wordpress.com  - я всёравно найду единомышленников !

roman2712@mail.ru
Offline
Зарегистрирован: 16.01.2014

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

satai
satai аватар
Offline
Зарегистрирован: 22.04.2014

не ну я могу конечно проАНАЛлизировать ваш внутренний мир глубоко уважаемый roman,но боюсь что вам это может понравится,а я не хотел бы заводить себе поклонников !а то время ,когда пояльником вымогали деньги безвозратно прошло !да и я не  из категории быдла,если я иду на преступление,то только от голода и только в адрес тех,кто не прочухает пропажу части денег ! я джентельмен ))) вы лучше просветите меня об новшествах в сфере защиты новых сигналок !

Jaqwerty
Jaqwerty аватар
Offline
Зарегистрирован: 25.06.2014

Все привет! 

Вскрыл брелок и обнаружил что чип там HCS 201. Подскажите в чем разница между 201 и 301?

4ishops
Offline
Зарегистрирован: 06.10.2012

Jaqwerty пишет:

Все привет! 

Вскрыл брелок и обнаружил что чип там HCS 201. Подскажите в чем разница между 201 и 301?

 

а Datasheet на чипы что говорит, смотрели?

 

Jaqwerty
Jaqwerty аватар
Offline
Зарегистрирован: 25.06.2014

посмотрел, для меня это пока темный лес, вот к вам и обращаюсь))))), просто хотел узнать можно ли использовать данный брелок с этой библиотекой 

leshak
Offline
Зарегистрирован: 29.09.2011

satai пишет:

да и я не  из категории быдла,если я иду на преступление,то только от голода

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

А "прочухают/не прочухают" - оставте эти самооправдания для себя. Задумали вы гадость и хотите что-бы вам кто-то помогал. 

Просветить вас? Да запросто: http://www.youtube.com/watch?v=3qaDlS-EC2w

satai
satai аватар
Offline
Зарегистрирован: 22.04.2014

да 12,6 отсидел и не жалуюсь !вы эту хрень учите учите а я взял и сделал !и мало того завёл свой блог по данной теме 

rsataev2014.wordpress.com

satai
satai аватар
Offline
Зарегистрирован: 22.04.2014

здесь инфу черпать бесполезно !эти очкарики научились пользоваться программатором и думают что судьбу за яйца поймали !)))

satai
satai аватар
Offline
Зарегистрирован: 22.04.2014

удачи вам лошары со своими ардуинами !

std
Offline
Зарегистрирован: 05.01.2012

satai пишет:
Вопрос :достаточно ли в брелках замены кварца чтобы из него вышел кодграббер ?

Нет, недостаточно. Граб это отдельное устройство, которое из общего с брелком имеет только трансивер. НО: трансивер занимается передачами полезной нагрузки, т. о. собственно приёмом/отправкой кода. Принцип граба заключается в приёме открывающего кода, с одновременным недопущением приёма машиной закрывающего кода. Поэтому кроме трансивера ещё нужна глушилка. Так что топаем на http://phreaker.us/ и вдумчиво читаем статьи о кодграбберах, ибо граб - это граб. А брелок - это брелок. И наивно полагать что из одного получится другое. Хотя есть оговорка - из граба, в принципе, возможно сделать брелок. Но процессоров там тогда, скорее всего, будет два.

leshak
Offline
Зарегистрирован: 29.09.2011

std пишет:

satai пишет:
Вопрос :достаточно ли в брелках замены кварца чтобы из него вышел кодграббер ?

Нет, недостаточно. Граб это отдельное устройство, которое из общего с брелком имеет только трансивер.

Вы еще не поняли что это просто малолетний троль который только учится "мурчать по понятиям" (или бездарно пытается изобразить подобную роль)? 

А ссылки, на сайты.... ну не нужно, а? Ведь действительно для подростков это "заманчиво и романтично", а способности предвидеть последствия - еще ослаблены. Понятно, что "кто хочет тот найдет", только зачем же "вводить во искушение?" :) Разве без этого нет интерестных применений контроллерым знаниям?

satai
satai аватар
Offline
Зарегистрирован: 22.04.2014

leshak пишет:

std пишет:

satai пишет:
Вопрос :достаточно ли в брелках замены кварца чтобы из него вышел кодграббер ?

Нет, недостаточно. Граб это отдельное устройство, которое из общего с брелком имеет только трансивер.

Вы еще не поняли что это просто малолетний троль который только учится "мурчать по понятиям" (или бездарно пытается изобразить подобную роль)? 

А ссылки, на сайты.... ну не нужно, а? Ведь действительно для подростков это "заманчиво и романтично", а способности предвидеть последствия - еще ослаблены. Понятно, что "кто хочет тот найдет", только зачем же "вводить во искушение?" :) Разве без этого нет интерестных применений контроллерым знаниям?

ну да можно гирлянду делать !!!