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

Вернуться   Изучение уязвимостей электронных систем > Для начинающих > Новички

Новички Раздел для новичков. Что такое кодграббер, ретранслятор, подмена кода.

Ответ
 
Опции темы
Старый 21.08.2014, 04:54   #1
bastik
случайно влез
 
Регистрация: 19.12.2011
Сообщений: 3
Поблагодарил: 3
Поблагодарили 0 раз в 0 сообщениях
bastik стоит на развилке
По умолчанию Исходник для граба на Си

Друзья, какое то время назад интересовался грабом, собрал девайс от Олега, но поиграл и отбросил так как в ASM вникать не хотелось. Тогда же читал посты с исходниками на Си по моему от tahion, но не могу сейчас найти! Уже есть немного навыки в схемотехнике ( благодаря форуму ) и было бы неплохо ознакомится с программной частью на языке Си. Дайте пожалуйста наводки на темы где обсуждаются исходники на Си.
bastik вне форума   Ответить с цитированием
Старый 31.08.2014, 05:58   #2
sevasss
гость
 
Регистрация: 07.07.2014
Адрес: в клетке
Сообщений: 168
Поблагодарил: 6
Поблагодарили 16 раз в 14 сообщениях
sevasss стоит на развилке
По умолчанию

Цитата:
Сообщение от bastik Посмотреть сообщение
Друзья, какое то время назад интересовался грабом, собрал девайс от Олега, но поиграл и отбросил так как в ASM вникать не хотелось. Тогда же читал посты с исходниками на Си по моему от tahion, но не могу сейчас найти! Уже есть немного навыки в схемотехнике ( благодаря форуму ) и было бы неплохо ознакомится с программной частью на языке Си. Дайте пожалуйста наводки на темы где обсуждаются исходники на Си.

keeloq.h
Код:
#ifndef KEELOQ_H
#define KEELOQ_H

typedef struct
{
  unsigned long hop;
  unsigned long serial:28;
  unsigned char function:4;
  unsigned char flag_bat:1;
  unsigned char flag_rep:1;
} keeloq66_packet;

#endif
starline.h
Код:
#ifndef STARLINE_H
#define STARLINE_H

typedef struct
{
  unsigned long hop;
  unsigned long serial:24;
  unsigned char function:8;
} starline64_packet;

#endif
main.c
Код:
//#define F_CPU 8000000

#include <avr/io.h>
#include <avr/pgmspace.h>
#include <avr/interrupt.h>
#include <string.h>
#include <util/delay.h>
#include <stdlib.h>
#include <stdio.h>

#include "keeloq.h"
#include "starline.h"

#define TIMER_DIV 32 //us
#define RAW
#define DECODE

#define RX_PORT PORTD
#define RX_DDR DDRD
#define RX_PIN PIND
#define RX PD2
#define RX_STATE (RX_PIN&(1<<RX))

int uart_putchar(char c, FILE *stream);
FILE uart_str=FDEV_SETUP_STREAM(uart_putchar, NULL, _FDEV_SETUP_WRITE);

char s_hello[] PROGMEM = "\n### KeeLoq&StarLine Logger ###\n\n";
char s_keeloq[] PROGMEM = "KeeLoq";
char s_starline[] PROGMEM = "StarLine";

volatile struct
{
  unsigned char state;
  unsigned char TE, pre_count, data[9], dat_bit;
} keeloq;

volatile struct
{
  unsigned char state;
  unsigned char pre_count, data[8], dat_bit;
} starline;

int uart_putchar(char c, FILE *stream)
{
  if(c=='\n') uart_putchar('\r', stream);
  loop_until_bit_is_set(UCSR0A, UDRE0);
  UDR0=c;

  return 0;
}

#define KL_MIN_PRE_COUNT 4
#define KL_MAX_TE (800/TIMER_DIV)
#define KL_MIN_TE (200/TIMER_DIV)
#define KL_MAX_BITS 66

void process_keeloq(unsigned char p_len)
{
  unsigned char a;

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

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

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

      if(RX_STATE && p_len>KL_MAX_TE)
      {
        if(keeloq.pre_count<KL_MIN_PRE_COUNT)
        {
          keeloq.state=0;
          break;
        }

        keeloq.TE=(p_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(p_len<keeloq.TE/2 || p_len>keeloq.TE*2+keeloq.TE/2)
      {
        keeloq.state=0;
        break;
      }

      if(RX_STATE) break;

      if(p_len<keeloq.TE+keeloq.TE/2) keeloq.data[keeloq.dat_bit/8]|=(1<<(keeloq.dat_bit%8));

      if(++keeloq.dat_bit==KL_MAX_BITS) keeloq.state=3;
      break;

    case 3:
      break;
  }
}

#define SL_MIN_PRE_COUNT 4
#define SL_MAX_PRE (1200/TIMER_DIV)
#define SL_MIN_PRE (850/TIMER_DIV)
#define SL_MAX_ONE (416/TIMER_DIV)
#define SL_MIN_ONE (150/TIMER_DIV)
#define SL_MAX_ZERO (650/TIMER_DIV)
#define SL_MIN_ZERO (416/TIMER_DIV)
#define SL_MIN_BITS 16
#define SL_MAX_BITS 64

void process_starline(unsigned char p_len)
{
  unsigned char a, b;

  _begin:

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

    case 1: //pre
      if(p_len>SL_MAX_PRE)
      {
        starline.state=0;
        break;
      }

      if(p_len<SL_MIN_PRE && starline.pre_count>=SL_MIN_PRE_COUNT)
      {
        starline.state=2;
        starline.dat_bit=0;
        for(a=0; a<sizeof(starline.data); a++) starline.data[a]=0;
        goto _begin;
      }

      starline.pre_count++;
      break;

    case 2: //dat
      if(p_len>=SL_MIN_ONE && p_len<=SL_MAX_ONE) b=1;
      else if(p_len>=SL_MIN_ZERO && p_len<=SL_MAX_ZERO) b=0;
      else if(starline.dat_bit>=SL_MIN_BITS)
      {
        starline.state=3;
        break;
      }
      else
      {
        starline.state=0;
        break;
      }

      if(!RX_STATE)
      {
        if(b) starline.data[starline.dat_bit/8]|=(1<<(starline.dat_bit%8));
        if(++starline.dat_bit==SL_MAX_BITS) starline.state=3;
      }
      break;

    case 3:
      break;
  }
}

#define FILTER 20
#define FILTER_STEP 5
#define MAX_PULSE (6000/TIMER_DIV) //6ms
#define MIN_PULSE (64/TIMER_DIV) //64us

ISR(INT0_vect)
{
  unsigned char len;

  len=TCNT0;
  if(len<MIN_PULSE) return;
  TCNT0=0;

  if(len>MAX_PULSE)
  {
    keeloq.state=0;
    starline.state=0;
  }

  process_keeloq(len);
  process_starline(len);
}

void dump_hex(volatile unsigned char *data, unsigned char bits)
{
  unsigned char a;

  for(a=bits/8+((bits%8)?1:0); a>0; a--) printf("%.2X ", data[a-1]);
}





int main(void)
{

// Input/Output Ports initialization
PORTB=0xFF;
DDRB=0x00;

// Port C initialization
PORTC=0x3F;
DDRC=0x00;

// Port D initialization
PORTD=0xFC;
DDRD=0x00;

// External Interrupt(s) initialization
// INT0: On
EICRA=0x01;
EIMSK=0x01;
EIFR=0x01;
PCICR=0x00;


// Clock value: 31.250 kHz
TCCR0A=0x00;
TCCR0B=0x04;
TCNT0=0x00;
OCR0A=0x00;
OCR0B=0x00;

// Timer/Counter 1 initialization
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;

// Timer/Counter 2 initialization
ASSR=0x00;
TCCR2A=0x00;
TCCR2B=0x04;
TCNT2=0x00;
OCR2A=0x00;
OCR2B=0x00;


 // Timer/Counter 0 Interrupt(s) initialization
TIMSK0=0x00;
// Timer/Counter 1 Interrupt(s) initialization
TIMSK1=0x00;
// Timer/Counter 2 Interrupt(s) initialization
TIMSK2=0x00;

// USART Baud Rate: 9600
UCSR0A=0x00;
UCSR0B=0x18;
UCSR0C=0x06;
UBRR0H=0x00;
UBRR0L=0x33;


// Analog Comparator: Off
ACSR=0x80;
ADCSRB=0x00;



  stdout=&uart_str;

  printf("%S", s_hello);

  sei();

  while(1)
  {
    if(keeloq.state==3)
    {
      printf("%S [TE=%.3d pre_cnt=%.2d] ", s_keeloq, keeloq.TE*TIMER_DIV, keeloq.pre_count);
#ifdef RAW
      dump_hex(keeloq.data, sizeof(keeloq.data)*8);
      printf("\n");
#endif
#ifdef DECODE
      printf("hop:%.8lX serial:%.7lX fun:%.1X bat:%d fix:%d\n\n",
             ((keeloq66_packet*)keeloq.data)->hop,
             ((keeloq66_packet*)keeloq.data)->serial,
             ((keeloq66_packet*)keeloq.data)->function,
             ((keeloq66_packet*)keeloq.data)->flag_bat,
             ((keeloq66_packet*)keeloq.data)->flag_rep);
#endif

      keeloq.state=0;
    }

    if(starline.state==3)
    {
      printf("%S [%.2d] ", s_starline, starline.dat_bit);
#ifdef RAW
      dump_hex(starline.data, starline.dat_bit);
      printf("\n");
#endif
#ifdef DECODE
      if(starline.dat_bit==64)
        printf("hop:%.8lX serial:%.6lX fun:%.2X\n\n",
               ((starline64_packet*)starline.data)->hop,
               ((starline64_packet*)starline.data)->serial,
               ((starline64_packet*)starline.data)->function);
#endif

      starline.state=0;
    }
  }

  return 0;
}
проц атмега168
изучайте на здоровье.
sevasss вне форума   Ответить с цитированием
Старый 06.09.2014, 01:55   #3
bastik
случайно влез
 
Регистрация: 19.12.2011
Сообщений: 3
Поблагодарил: 3
Поблагодарили 0 раз в 0 сообщениях
bastik стоит на развилке
По умолчанию

Не могу найти объяснения вот для этой функции

#define TIMER_DIV 32

Что она делает?
bastik вне форума   Ответить с цитированием
Старый 06.09.2014, 09:21   #4
Hunter.1121
гость
 
Аватар для Hunter.1121
 
Регистрация: 03.03.2007
Сообщений: 133
Поблагодарил: 16
Поблагодарили 13 раз в 12 сообщениях
Hunter.1121 стоит на развилке
По умолчанию

это не функция, по тексту TIMER_DIV заменяется на 32
[Ссылки могут видеть только зарегистрированные пользователи. ]
Hunter.1121 вне форума   Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[Проблема] исходник с рабочим pt 22** mesplan Программирование микроконтроллеров 0 08.04.2015 18:42
Алгоритмический кодграббер, раздупляем исходник. oleg Охранные системы 33 26.12.2010 12:02
Просто исходник. oleg Охранные системы 5 15.08.2010 16:44
Интересует исходник карты noizemc Пластиковые карты 1 11.08.2010 19:23
Исходник к Грабберу на ATMEGA8 и LCD HD44780 oscillator Охранные системы 2 11.04.2010 19:36


Текущее время: 13:38. Часовой пояс GMT +4.


Перевод: zCarot