Опять за помощью. Помогите понять, где считается СRC

Тема в разделе "WASM.ELECTRONICS", создана пользователем Stenton, 21 янв 2005.

  1. Stenton

    Stenton New Member

    Публикаций:
    0
    Регистрация:
    23 мар 2004
    Сообщения:
    28
    Вот тут считается?

    []



    Спасибо всем "зрителям" и "участникам"!!!
     
  2. SteelRat

    SteelRat New Member

    Публикаций:
    0
    Регистрация:
    26 авг 2004
    Сообщения:
    409
    Эта процедура передает 3 входных аргумента и константу 4 дальше в ф-цию sub_1009868C, может там и считается... Практически "бестолковая" :)
     
  3. Stenton

    Stenton New Member

    Публикаций:
    0
    Регистрация:
    23 мар 2004
    Сообщения:
    28
    SteelRat

    Спасибо, что откликнулись...

    А как может выглядеть примерно хоть процедура подсчета крк, не подскажете?
     
  4. Stenton

    Stenton New Member

    Публикаций:
    0
    Регистрация:
    23 мар 2004
    Сообщения:
    28
    А вот если тут глянуть, то просто сверяются две строки и все?



    []
     
  5. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    Stenton



    Она должна побайтно, пословно читать

    массив и что-то с ним делать. Поэтому

    следи за указателем на массив, а еще

    лучше отладчик используй.
     
  6. Stenton

    Stenton New Member

    Публикаций:
    0
    Регистрация:
    23 мар 2004
    Сообщения:
    28
    valterg

    Спасибо, попробую!
     
  7. SteelRat

    SteelRat New Member

    Публикаций:
    0
    Регистрация:
    26 авг 2004
    Сообщения:
    409
    Возьми на WASM описание CRC32/16, программеры народ практичный на тему ускорения, поэтому составляется таблица (в доке увидишь какая) и поищи эту таблицу в программе, затем ставь бряк на чтение из этой таблицы и вывалишся в самое "сердце" алгоритма :)))
     
  8. Stenton

    Stenton New Member

    Публикаций:
    0
    Регистрация:
    23 мар 2004
    Сообщения:
    28
    А я вот до куда добрался... :о))



    []



    Правильно иду? :о))
     
  9. Stenton

    Stenton New Member

    Публикаций:
    0
    Регистрация:
    23 мар 2004
    Сообщения:
    28
    Не, вот, кажется нашел...

    (правильно, нет???)



    []
     
  10. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
    Скачай с этого сайта PEiD и посмотри KANAL'ом - он покажет адреса CRC.

    иначе буш долго постить сюда бесполезный код.
     
  11. masquer

    masquer wasm.ru

    Публикаций:
    0
    Регистрация:
    13 сен 2002
    Сообщения:
    890
    Адрес:
    Николаев
    Stenton

    Ты начни с каталога windows\system32 обрабатывать все dll/exe/ocx и по кусочкам (кил по 5 кода) сюда постить и спрашивать - "оно, нет?" Так гораздо быстрее будет, чем почитать хоть что-то про crc...
     
  12. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    Stenton



    Дизассемблером с твоим знанием ассемблера

    ты никуда не доберешься. Команды push,

    pop call и несколько команд около и между

    них не могут считать CRC. Должен быть

    ЦИКЛ вычислений : либо логические команды,

    либо арифметические и команда чтения

    из МАССИВА ( увы они могут быть разные).

    Не трать свое и чужое время : либо переформулируй

    вопрос, либо займись еще чем-нибудь.
     
  13. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    Стандартные CRC осуществляют деление двоичных полиномов, поэтому должен быть цикл чтения данных с операциями SHR и XOR. Один из популярных алгоритмов табличного вычисления выглядит примерно так:
    Код (Text):
    1. ;EAX - CRC, EDI - данные, ECX - счетчик байтов, CrcTab - адрес таблицы
    2. @@loop:
    3.     XOR AL, byte ptr [EDI]
    4.     MOVZX EDX,AL ;или MOV DL,AL с предварительным XOR EDX,EDX
    5.     SHR EAX,8
    6.     XOR EAX, dword [CrcTab+4*EDX]
    7.     INC EDI
    8.     DEC ECX  ;счетчик байтов данных
    9.     JNZ @@loop
     
  14. Stenton

    Stenton New Member

    Публикаций:
    0
    Регистрация:
    23 мар 2004
    Сообщения:
    28
    leo

    Cпасибо большое! (а то потопать ногами все успели, а почеловечески подсказать только Вы.



    Таблица имелась ввиду видимо эта (аналогичная)


    Код (Text):
    1. /*
    2.  * This mysterious table is just the CRC of each possible byte.  It can be
    3.  * computed using the standard bit-at-a-time methods.  The polynomial can
    4.  * be seen in entry 128, 0x8408.  This corresponds to x^0 + x^5 + x^12.
    5.  * Add the implicit x^16, and you have the standard CRC-CCITT.
    6.  */
    7. static unsigned short const crc16_table[256] =
    8. {
    9.     0x0000, 0x1189, 0x2312, 0x329b, 0x4624, 0x57ad, 0x6536, 0x74bf,
    10.     0x8c48, 0x9dc1, 0xaf5a, 0xbed3, 0xca6c, 0xdbe5, 0xe97e, 0xf8f7,
    11.     0x1081, 0x0108, 0x3393, 0x221a, 0x56a5, 0x472c, 0x75b7, 0x643e,
    12.     0x9cc9, 0x8d40, 0xbfdb, 0xae52, 0xdaed, 0xcb64, 0xf9ff, 0xe876,
    13.     0x2102, 0x308b, 0x0210, 0x1399, 0x6726, 0x76af, 0x4434, 0x55bd,
    14.     0xad4a, 0xbcc3, 0x8e58, 0x9fd1, 0xeb6e, 0xfae7, 0xc87c, 0xd9f5,
    15.     0x3183, 0x200a, 0x1291, 0x0318, 0x77a7, 0x662e, 0x54b5, 0x453c,
    16.     0xbdcb, 0xac42, 0x9ed9, 0x8f50, 0xfbef, 0xea66, 0xd8fd, 0xc974,
    17.     0x4204, 0x538d, 0x6116, 0x709f, 0x0420, 0x15a9, 0x2732, 0x36bb,
    18.     0xce4c, 0xdfc5, 0xed5e, 0xfcd7, 0x8868, 0x99e1, 0xab7a, 0xbaf3,
    19.     0x5285, 0x430c, 0x7197, 0x601e, 0x14a1, 0x0528, 0x37b3, 0x263a,
    20.     0xdecd, 0xcf44, 0xfddf, 0xec56, 0x98e9, 0x8960, 0xbbfb, 0xaa72,
    21.     0x6306, 0x728f, 0x4014, 0x519d, 0x2522, 0x34ab, 0x0630, 0x17b9,
    22.     0xef4e, 0xfec7, 0xcc5c, 0xddd5, 0xa96a, 0xb8e3, 0x8a78, 0x9bf1,
    23.     0x7387, 0x620e, 0x5095, 0x411c, 0x35a3, 0x242a, 0x16b1, 0x0738,
    24.     0xffcf, 0xee46, 0xdcdd, 0xcd54, 0xb9eb, 0xa862, 0x9af9, 0x8b70,
    25.     0x8408, 0x9581, 0xa71a, 0xb693, 0xc22c, 0xd3a5, 0xe13e, 0xf0b7,
    26.     0x0840, 0x19c9, 0x2b52, 0x3adb, 0x4e64, 0x5fed, 0x6d76, 0x7cff,
    27.     0x9489, 0x8500, 0xb79b, 0xa612, 0xd2ad, 0xc324, 0xf1bf, 0xe036,
    28.     0x18c1, 0x0948, 0x3bd3, 0x2a5a, 0x5ee5, 0x4f6c, 0x7df7, 0x6c7e,
    29.     0xa50a, 0xb483, 0x8618, 0x9791, 0xe32e, 0xf2a7, 0xc03c, 0xd1b5,
    30.     0x2942, 0x38cb, 0x0a50, 0x1bd9, 0x6f66, 0x7eef, 0x4c74, 0x5dfd,
    31.     0xb58b, 0xa402, 0x9699, 0x8710, 0xf3af, 0xe226, 0xd0bd, 0xc134,
    32.     0x39c3, 0x284a, 0x1ad1, 0x0b58, 0x7fe7, 0x6e6e, 0x5cf5, 0x4d7c,
    33.     0xc60c, 0xd785, 0xe51e, 0xf497, 0x8028, 0x91a1, 0xa33a, 0xb2b3,
    34.     0x4a44, 0x5bcd, 0x6956, 0x78df, 0x0c60, 0x1de9, 0x2f72, 0x3efb,
    35.     0xd68d, 0xc704, 0xf59f, 0xe416, 0x90a9, 0x8120, 0xb3bb, 0xa232,
    36.     0x5ac5, 0x4b4c, 0x79d7, 0x685e, 0x1ce1, 0x0d68, 0x3ff3, 0x2e7a,
    37.     0xe70e, 0xf687, 0xc41c, 0xd595, 0xa12a, 0xb0a3, 0x8238, 0x93b1,
    38.     0x6b46, 0x7acf, 0x4854, 0x59dd, 0x2d62, 0x3ceb, 0x0e70, 0x1ff9,
    39.     0xf78f, 0xe606, 0xd49d, 0xc514, 0xb1ab, 0xa022, 0x92b9, 0x8330,
    40.     0x7bc7, 0x6a4e, 0x58d5, 0x495c, 0x3de3, 0x2c6a, 0x1ef1, 0x0f78
    41. };
     
  15. masquer

    masquer wasm.ru

    Публикаций:
    0
    Регистрация:
    13 сен 2002
    Сообщения:
    890
    Адрес:
    Николаев


    ну, каков вопрос, таков и ответ, видимо...





    Да, только это для црц16 (одного из), плюс эта табличка может и на лету генерироваться.
     
  16. Stenton

    Stenton New Member

    Публикаций:
    0
    Регистрация:
    23 мар 2004
    Сообщения:
    28
    Ребят, только не надо матом...

    Вот я тут постарался малость, но видно не очень постарался, потомучто CRC не правильное получается.

    Вот как я делал:


    Код (Text):
    1. CRC16Proc proc msg:DWORD,len:DWORD
    2. ; ---- в .data
    3. ; crc_poly - 1021h
    4. ; crc   dw 256 dup (?)
    5. ; CrcBytes dw ?
    6.  
    7.     mov   esi,[msg]
    8. l_char:
    9.     lodsb
    10.     mov   dl,al
    11.     mov   ax,[crc]
    12.     mov   ecx,8
    13. l_crc:
    14.     rcl   dl,1
    15.     rcl   ax,1
    16.     jnc   no_xor
    17.     xor   ax,[crc_poly];[poly]
    18. no_xor:
    19.     loop  l_crc
    20.     mov   [crc],ax
    21.     mov   eax,[len]
    22.     dec   eax
    23.     mov   [len],eax
    24.     jnz   l_char
    25.     mov   ecx,16
    26.     mov   ax,[crc]
    27. l_argument:
    28.     shl   ax,1
    29.     jnc   no_xor1
    30.     xor   ax,[crc_poly];[poly]
    31. no_xor1:
    32.     loop  l_argument
    33.     mov   [crc],ax
    34.  
    35.     ret
    36. CRC16Proc endp




    Вызывал так:


    Код (Text):
    1. invoke CRC16Proc,offset DmModeText,sizeof DmModeText
    2. invoke WriteFile,hcomm,offset crc,sizeof CrcBytes,addr CrcBytes,NULL




    Строка для отправки: "123456789" - crc = DD 01

    и еще "AT$QCDMG" - crc = 25 02



    а у меня получается: crc = 72 E5 и 87 7A cоответственно.



    Помогите пожалста! трудно блин...
     
  17. SteelRat

    SteelRat New Member

    Публикаций:
    0
    Регистрация:
    26 авг 2004
    Сообщения:
    409
    Вот, полностью из доки...
    Код (Text):
    1.  
    2. ;
    3. ; Реализация алгоритма CRC-32
    4. ;
    5.         .const
    6.         ;
    7. Poly16                  equ 0A001h; Отраженный полином 8005h
    8.         ;
    9.         .data?
    10.         ;
    11. CrcTable16              db      256*sizeof(WORD) dup(?)
    12.     ;
    13.     .code
    14.     ;
    15. ;
    16. ; Построение расширенной таблицы
    17. ;
    18. GenTable16 proc uses ebx ecx edx edi
    19.     ;
    20.     xor ebx, ebx    ;ebx=0, будет использоваться как указатель
    21.     ;
    22. InitTableLoop:
    23.     ;
    24.     xor eax, eax    ;eax=0 для получения новой позиции
    25.     mov al, bl      ;младшие 8 бит ebx копируются в младшие 8 бит eax
    26.                     ;генерируется номер позиции
    27.     xor cx, cx
    28.     ;
    29. entryLoop:
    30.     ;
    31.     test ax, 1
    32.     jz no_topbit
    33.     shr ax, 1
    34.     xor ax, Poly16
    35.     jmp entrygoon
    36.     ;
    37. no_topbit:
    38.     ;
    39.     shr ax, 1
    40.     ;
    41. entrygoon:
    42.     ;
    43.     inc cx
    44.     test cx, 8
    45.     jz entryLoop
    46.     mov word ptr[ebx*2 + CrcTable16], ax
    47.     inc bx
    48.     test bx, 256
    49.     jz InitTableLoop
    50.     ;
    51.     ret
    52.     ;
    53. GenTable16 endp
    54.     ;
    55. CRC16 proc uses esi ebx Buffer:PVOID, Len:DWORD
    56.     ;
    57.     invoke GenTable16
    58.     ;
    59.     mov esi, Buffer
    60.     mov ecx, Len
    61.     xor eax, eax
    62. computeLoop:
    63.     xor ebx, ebx
    64.     xor al, [esi]
    65.     mov bl, al
    66.     shr ax, 8
    67.     xor ax, word ptr[2*ebx+CrcTable16]
    68.     inc esi
    69.     loop computeLoop
    70.     ;
    71.     ret
    72.     ;
    73. CRC16 endp
    74.  
     
  18. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
    Как я понял, есть прога, и необходимо в ней найти место где считается какой-то там CRC.

    Есть тулзы которые могут это сделать (а могут и не сделать) автоматически и лежат они на сайте...
     
  19. Stenton

    Stenton New Member

    Публикаций:
    0
    Регистрация:
    23 мар 2004
    Сообщения:
    28
    SteelRat

    попробую, о результатах отпишу! (интересно, из какого хелпа код взят? у меня такой доки нету :о( )

    S_T_A_S_

    если быть точнее, то есть прога, но в ней не место надо найти, а посчитать злосчастный crc и передать вместе с мессагой в порт. Тогда, если crc верный, девайс (зараза) вернет ответ - "ОК"(тоже с crc, как не странно). Ну а дальше крысы, Петросян и пошло, поехало... (с) КВН.





    п.с. И еще один момент. Извините, если опять туплю, но реализация crc8 это ли не сумма HEX значений всех символов в строке ????
     
  20. Stenton

    Stenton New Member

    Публикаций:
    0
    Регистрация:
    23 мар 2004
    Сообщения:
    28
    leo

    а в Вашем коде эта строка:
    Код (Text):
    1. xor eax,dword [Crc8Tab+4*edx]


    не вот так должна выглядеть???:
    Код (Text):
    1. xor eax,dword ptr[Crc8Tab+4*ebx]