![]() |
eXeL@B —› Основной форум —› Алгоритм CRC в CDMA телефонах |
Посл.ответ | Сообщение |
|
Создано: 05 ноября 2006 11:08 · Личное сообщение · #1 Кто-нибудь занимается/занимался сабжем? Не могу расколупать алгоритм формирования CRC для ESN , вот что говорит один человек: ---- алгоритм контрольной суммы придуман и реализован qualcomm inc на основе класической схемы CRC30. c начальным заполнением 3FFFFFFF и полиномом 6030B9C7 (в принципе это все что надо знать чтоб ее считать). ---- В качестве эталона выступает программа UniCDMA которая показывает этот CRC для введенного ESN, UniCDMA написана на Delphi, поэтому все функции где что считается разбираются через Dede, но вот в сам алгоритм я не врубаюсь. Выходная CRC это 4 байта (две пары), все это свободно лежит в памяти телефона. Есть еще CRC для внутренних команд телефона, она 2 байта и считается отлично, а вот для ESN у меня затруднения. Может кто помочь? ![]() |
|
Создано: 06 ноября 2006 04:39 · Личное сообщение · #2 Pluton пишет: c начальным заполнением 3FFFFFFF и полиномом 6030B9C7 Интернет завален текстами стандартного алгоритма CRC32. Только в них начальное заполнение FFFFFFFF и полином EDB88320. Правда в некоторых таблица, но легко найти именно c заполнением по слову InitCRC32. Транслировать примитивную программу мне не хочется, тем более сравнивать результаты мне не с чем. ![]() |
|
Создано: 06 ноября 2006 05:46 · Личное сообщение · #3 tundra37tundra37 пишет: Интернет завален текстами стандартного алгоритма CRC32. Только в них начальное заполнение FFFFFFFF и полином EDB88320. Правда в некоторых таблица, но легко найти именно c заполнением по слову InitCRC32. Транслировать примитивную программу мне не хочется, тем более сравнивать результаты мне не с чем. Об этом я знаю, но ведь я то говорю о CRC30, а не 32 ![]() |
|
Создано: 06 ноября 2006 15:42 · Личное сообщение · #4 |
|
Создано: 07 ноября 2006 19:48 · Личное сообщение · #5 А ты 3FFFFFFF переведи в двоичку и поимешь. Как раз недавно подстраивал алгоритм CRC32 под свои нужды, разобрался как работает. Для CRC30 таблицу построит не проблема, а вот с расчетом интересней Тело цикла mov bl,al;<- в eax заполнение xor bl,byte [edx];<- буфер shr eax,8;<-А как это сдвигать для CRC30 фик его знает ( на 7.5 наверное :s14 ![]() xor eax,cardinal [CRCtable+ebx*4]; ![]() |
|
Создано: 07 ноября 2006 21:53 · Личное сообщение · #6 Shooshpanchik А как ты табличку заполняешь? Мне тут сказали что дескать полином $6030B9C7, 31 бит, а не 30, и что дескать где-то тут ошибка. я заполняю так: ---- for i := 0 to 255 do // Table initialization. begin c := i; for j := 1 to 8 do if odd(c) then c := (c shr 1) xor $6030B9C7 else c := (c shr 1); CRC32Table[i] := c; end; ------------- ![]() |
|
Создано: 08 ноября 2006 01:14 · Личное сообщение · #7 |
|
Создано: 08 ноября 2006 01:20 · Личное сообщение · #8 |
|
Создано: 08 ноября 2006 01:40 · Личное сообщение · #9 |
|
Создано: 08 ноября 2006 04:59 · Личное сообщение · #10 Я стал юзать самый простой метод CRC32, не табличный, тк для посдчета crc 4 байта скорость и сложность не нужна: ----- crc:= $3fffffff; j:= 1; while j<= CountS do begin d:= CRCArray1[j]; for i:= 0 to 7 do begin if ( ((crc xor d) and $1) <> 0 ) then begin crc:= crc shr 1; crc:= crc xor $6030B9C7; end else crc:= crc shr 1; d:= d shr 1; end; j:= j + 1; end; crc:= crc xor $FFFFFFFF; crc:= crc and $3FFFFFFF; Result:= crc; ------- Если подставить стандарное начальное заполнение и полином все считается как надо для CRC32, но для моих значенией не считает правильно. Правильно считает UniCDMA в аттаче, вводишь ESN 8 цифр и тут же отображается CRC, при помощи DeDe обработчик который считает легко найти. Называется он edESNChange шестой call с верху в этом обработчике и считает CRC, только вот я в асме мало что понимаю, может кто помочь разобрать что он там считает? Я пробовал в своей процедуре полином $6030B9C7 который советуют, а также его зеркальное отражение $E39D0C06 один хрен. 8 цифр ESN храняться в памяти как 4 байта, пробовал считать как этих 4 байт так и для 8 байт напрямую, тоже не сходиться результат с UniCDMA. ![]() ![]() |
|
Создано: 08 ноября 2006 09:24 · Личное сообщение · #11 ну во первых там две таблички _table_1 dd 2C201919h,0C10A0DEh,0C71D350h,2C416A97h,0CB3344Ch,2C838D8Bh
по мне это на CRC32 даже близко не похоже вот чуть подредактин на асме: some_crc proc _input_dword:DWORD
![]() |
|
Создано: 08 ноября 2006 21:05 · Личное сообщение · #12 |
|
Создано: 08 ноября 2006 22:42 · Личное сообщение · #13 |
|
Создано: 09 ноября 2006 03:37 · Личное сообщение · #14 |
|
Создано: 09 ноября 2006 03:43 · Личное сообщение · #15 |
|
Создано: 09 ноября 2006 05:41 · Поправил: tundra37 · Личное сообщение · #16 По длинам напоминает blowfish P-box 18 двойных слов и S-box 256. Правда в blowfish S-box в 4 раза больше. Судя по Интернету для ESN считают хеш или что-то криптуют, т.ч. это не CRC. Скорее всего сигнатура/сертификат подлинности. ============================ А вот какой-то A-key и там таблица похожая. kgb.scriptmania.com/ ![]() |
|
Создано: 09 ноября 2006 07:12 · Личное сообщение · #17 Nitrogen пишет: вот именно не понятно одно, не понятно другое и с чего вообще ты взял что ее можно создать с помощью crc32 с измененными константами Потому что все CRC алгоритмы основаны на одном алгоритме, но с разными начальными значениями и полиномом, а уж как он реализован, таблицой или нет, дело десятое, вот я и рыл в этом направлении, тем более знающий человек прям так и сказал. ![]() |
|
Создано: 12 ноября 2006 09:07 · Личное сообщение · #18 |
![]() |
eXeL@B —› Основной форум —› Алгоритм CRC в CDMA телефонах |