Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2006.11.05;
Скачать: [xml.tar.bz2];

Вниз

Немогу разобраться в алгоритме подсчета чексуммы   Найти похожие ветки 

 
SPACE!!   (2006-09-20 16:24) [0]

Ситуация такая есть приложение которое для хранения данных коннекта (Имя IP) использует некий фаил, но все

нетак просто, программа по какому-то алгоритму делает что-то вроде чексуммы и распологает ее в первых 4 байтах

в следущих 4 байтах идет что-то вроде вспомогательной информации а именно указывается размер

данных в байтах. Данные идут после первых 8 байтов ..

Вот несколько примеров :



  ==============Пример_1==============

Записи отсутствуют..

Hex :

14 EE 00 00 01 00 00 00 2C

Прошу заметить что изначально файла не существует он
появляется только после внесения хоть одной записи.
 
 ==============Пример_2==============

имя ff ip 127.0.0.1

hex :

D6 BB 00 00 0C 00 00 00 66 66 2C 31 32 37 2E 30
2E 30 2E 30 2E 31

 ==============Пример_3==============

имя fff ip 127.0.0.1

hex :

D7 00 00 00 0D 00 00 00 66 66 66 2C 31 32 37 2E
30 2E 30 2E 30 2E 31

 ==============Пример_4==============

  имя   ip

1. ff   127.0.0.1
2. fff  127.0.0.1

hex :
6A 4B 00 00 1A 00 00 00 66 66 2C 66 66 66 2C 31
32 37 2E 30 2E 30 2E 31 2C 31 32 37 2E 30 2E 30
2E 31

 ==============Пример_5==============
  ИМЯ    IP

1. пусто  127.0.0.1

hex :

74 89 00 00 0A 00 00 00 2C 31 32 37 2E 30 2E 30 2E 31

 ==============Пример_6==============

  ИМЯ     IP

1. пусто  127.0.0.1
2. пусто  127.0.0.1

hex :

9C 72 00 00 15 00 00 00 2C 2C 31 32 37 2E 30 2E 30 2E
31 2C 31 32 37 2E 30 2E 31

==============Пример_7==============

  ИМЯ     IP

1. ff    пусто

hex :
A7 27 00 00 03 00 00 00 66 66 2C

==============Пример_8==============
  ИМЯ     IP

1. fff    пусто

hex :
11 E1 00 00 04 00 00 00 66 66 66 2C

==============Пример_9==============
  ИМЯ     IP

1. пусто   127 (Так тоже можно)

hex :
C8 E2 00 00 04 00 00 00 2C 31 32 37

==============Пример_10==============
  ИМЯ     IP

1. пусто   128

hex :
88 E6 00 00 04 00 00 00 2C 31 32 38

======================================



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


 
Jeer ©   (2006-09-20 16:29) [1]

"Читал, как Шерлока Холмса перед Ватсоном" (С)


 
Сергей М. ©   (2006-09-20 16:32) [2]


> SPACE!!   (20.09.06 16:24)


Вопрос-то твой в чем ?


> Записи отсутствуют..
>
> Hex :
>
> 14 EE 00 00 01 00 00 00 2C
>
> Прошу заметить что изначально файла не существует он
> появляется только после внесения хоть одной записи.
>  


Ну ведь врешь !)

01 00 00 00 = одна запись

2C = собственно значение записи

И как это сопрягается с утверждением "Записи отсутствуют" ?


 
SPACE!!   (2006-09-20 17:18) [3]


> И как это сопрягается с утверждением "Записи отсутствуют"
> ?


Ну зато очень хорошо сопрягается с утверждением что все записи из
приложения удалены... :))

> 2C = собственно значение записи


Ивиняюсь торопился..

Скорей всего запятая (2С) ставится для отмены нештатных ситуаций тоесть
видимо при чтении из файла данные обязательно проходят через алгоритм.


>Вопрос-то твой в чем ?


Вы меня иногда удивляете млин :

Я делаю скажем так утилиту для работы с этим файлом , в функции которой
входит чтения и удаления записей .


 
Jeer ©   (2006-09-20 18:08) [4]


> Вы меня иногда удивляете млин :


Вы нас - тоже.
Даже не поверите, насколько чаще:))


 
SPACE!!   (2006-09-20 18:34) [5]


> Вы нас - тоже.
> Даже не поверите, насколько чаще:))

Ну все закономерно :)

А вот есть пример еще проще есть еще один файл который хранит имя компьютера, только ни системноеа локальное которое задается в приложении, здесь применяется тот же алгоритм  :


==============Пример_11==============
Имя : 4
hex :
14 E4 00 00 01 00 00 00 34

==============Пример_12==============
Имя : 5
hex :
D5 24 00 00 01 00 00 00 35

==============Пример_13==============
Имя : 6

hex :
95 25 00 00 01 00 00 00 36

==============Пример_14==============
Имя : 7
hex :
54 E5 00 00 01 00 00 00 37

==============Пример_15==============
Имя : 8
hex :
14 E1 00 00 01 00 00 00 38

==============Пример_16==============
Имя : 9
hex :
D5 21 00 00 01 00 00 00 39

==============Пример_17==============
Имя : @
hex :
14 C3 00 00 01 00 00 00 40

==============Пример_18==============
Имя : F

hex :
94 C1 00 00 01 00 00 00 46

==============Пример_19==============
Имя : 2

hex :
94 E6 00 00 01 00 00 00 32

==============Пример_20==============
Имя : H

hex :
15 05 00 00 01 00 00 00 48

==============Пример_21==============
Имя : I

hex :
D4 C5 00 00 01 00 00 00 49

==============Пример_22==============
Имя : P

hex :
15 0F 00 00 01 00 00 00 50

=====================================


 
Jeer ©   (2006-09-20 18:40) [6]

Хорошо излагаешь - продолжай.
Возможно, даже роман получится.


 
Сергей М. ©   (2006-09-21 08:38) [7]


> Я делаю скажем так утилиту для работы с этим файлом , в
> функции которой
> входит чтения и удаления записей


Ну и делай себе на здоровье )
В чем собственно вопрос-то ? В конкретно примененном для данного формата файла алгоритме расчета контр.суммы ? Или что ?


 
ЮЮ ©   (2006-09-21 10:18) [8]

В чем собственно вопрос-то ?

Вопрос у человека как собственно сгенерировать первые 4 байта. Ибо если поставить отсебятину, то программа, работающая с этим файлом, воспринимать его не хочет.

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

Автору:
Да там что угодно может быть, хоть сумма синусов каждого символа строки. Изучай ассемблерный код иой программы, кулцхакер :)

14 E4 00 00 01 00 00 00 34
14 E1 00 00 01 00 00 00 38

Данные и результат отлицаются двумя битами. Чего нибуть XOR-ят, наверное


 
Сергей М. ©   (2006-09-21 10:22) [9]


> ЮЮ ©   (21.09.06 10:18) [8]


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


 
SPACE!!   (2006-09-21 19:11) [10]

>ЮЮ ©   (21.09.06 10:18) [8]  
 Спасибо за поддержку.

> Автору:
> Да там что угодно может быть, хоть сумма синусов каждого
> символа строки. Изучай ассемблерный код иой программы, кулцхакер
> :)
>
> 14 E4 00 00 01 00 00 00 34
> 14 E1 00 00 01 00 00 00 38
>
> Данные и результат отлицаются двумя битами. Чего нибуть
> XOR-ят, наверное


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


> Сергей М. ©   (21.09.06 10:22) [9]



> Ну может там обычный CRC32 применяется

Это я тоже вчера пытался как мог проверить если верить этому

http://forum.cn.ua/inb/index.php?act=ST&f=6&t=311&s=8bdefd19a1128a52ebd0ce62bbbd6454

то abrakadabrc - CA0BD6FC.  К сожалению это нетак .

Если вы хорошо разбираетесь в CRC32 и вас есть время и возможности
прошу проверить ...


> Пробовать же надо, а не хныкать, мол, не могу разобраться)


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

________________________________________

========Пример23=========
чек.c    имя

C141      F,   [46 2C]
6FCE      ,F   [2c 46]

D041      z,   [7A 2c]
6FDF      ,z   [2C 7a]


Обратите внимания на закономерности в контрольных суммах.


 
Virgo_Style ©   (2006-09-21 19:30) [11]

SPACE!!   (21.09.06 19:11) [10]
да не в обиду будет сказано , проблема твоя в том

Это не его проблема ;-)


 
SPACE!!   (2006-09-21 21:14) [12]


>Это не его проблема ;-)


Тоже верно .

Для полноты картины по предыдущему примеру :

434F Az  [41 7A]
11AC zA [7A 41]


 
Сергей М. ©   (2006-09-22 10:06) [13]


> в следущих 4 байтах идет что-то вроде вспомогательной информации
> а именно указывается размер
>
> данных в байтах. Данные идут после первых 8 байтов


имя ff ip 127.0.0.1

hex :

D6 BB 00 00 0C 00 00 00 66 66 2C 31 32 37 2E 30
2E 30 2E 30 2E 31

Здесь 14 байт данных, но поле размера данных почему-то говорит, что их 12.

==============Пример_3==============

имя fff ip 127.0.0.1

hex :

D7 00 00 00 0D 00 00 00 66 66 66 2C 31 32 37 2E
30 2E 30 2E 30 2E 31

Здесь 15 байт данных, но поле размера данных почему-то говорит, что их 13.

И как это понимать ?


> abrakadabrc - CA0BD6FC.  К сожалению это нетак


Эта КС соответствует именно строчке "abrakadabrc", так что все правильно.

Проверяй:

type
 TCRC32 = Longword;
 PCRC32 = ^TCRC32;

 TCRC32Table = array[0..255] of TCRC32;
 PCRC32Table = ^TCRC32Table;

const
 CRC32Poly = $EDB88320;
 CRC32InitMask   = $FFFFFFFF;

var
 CRC32Table: TCRC32Table;
 s: String;

procedure MakeCRC32Table(CRC32Table: PCRC32Table; const InitCRC: TCRC32);
var
 i,j: Integer;
 r: TCRC32;
begin
 for i:= Low(TCRC32Table) to High(TCRC32Table) do begin
   r:= i;
   for j:= 8 downto 1 do
     if (r and 1) = 1 then
       r:= (r shr 1) xor InitCRC
     else
       r:= r shr 1;
   CRC32Table[i]:= r;
 end;
end;

function GetCRC32(const Buffer; BufSize: DWord; InitCRC: TCRC32; const Inv: Boolean): TCRC32;
var
 BufPtr: PByte;
begin
 BufPtr:= PByte(@Buffer);
 while BufSize > 0 do begin
   InitCRC:= CRC32Table[LoByte(InitCRC) xor BufPtr^] xor (InitCRC shr 8);
   Inc(BufPtr);
   Dec(BufSize);
 end;
 Result:= InitCRC;
 if Inv then
   Result:= not Result;
end;

procedure TForm2.Button1Click(Sender: TObject);
var
 crc32: TCRC32;
begin
 s := "abrakadabrc";
 MakeCRC32Table(@CRC32Table, CRC32Poly);
 crc32 := GetCRC32(s[1], Length(s), CRC32InitMask, True);
 Showmessage(IntToHex(Integer(crc32), 8));
end;


Но у тебя в первом дв.слове действительно не CRC32, а что-то иное.
Так что дизассемблер+дебагер в руки - и вперед с песней)


 
Ketmar ©   (2006-09-22 10:17) [14]

>[13] Сергей М.(c) 22-Sep-XLI A.S., 10:06
>Так что дизассемблер+дебагер в руки - и вперед с
>песней)
я всё ждал, кто же предложит сей очевидный вариант. %-)


 
SPACE!!   (2006-09-22 18:41) [15]

>[13] Сергей М.(c) 22-Sep-XLI A.S., 10:06


> Здесь 15 байт данных, но поле размера данных почему-то говорит,
>  что их 13.
>
> И как это понимать ?

В первом и во втором  случаи байты 2E 30 повторяются 3 раза должны 2 сори
это все TCP/IP :))


> Эта КС соответствует именно строчке "abrakadabrc", так что
> все правильно

Да согласен..

Скачал хороший компонент проверил  CRC16-CCITT,  CRC16-STANDART, CRC32, XOR16 , XOR32 . Результатов нет . Что еще из стандартного у нас есть ?

Спасибо кстате за алгоритм - пригодится .


> Ketmar ©   (22.09.06 10:17) [14]
> >[13] Сергей М.(c) 22-Sep-XLI A.S., 10:06
> >Так что дизассемблер+дебагер в руки - и вперед с
> >песней)
> я всё ждал, кто же предложит сей очевидный вариант. %-)


Дык  ЮЮ ©   (21.09.06 10:18) [8]    

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

Eсли вдруг алгоритм будет разобран я подыму эту тему, если это конешно будет вам интересно, но боюсь что это будет нескоро так-как пока нет даже возможности скачать тот-же SOFTICE . Да и думаю альфа версия моей программы будет урезана в возможностях . Жаль конешно, но что поделать.


 
Ketmar ©   (2006-09-22 19:06) [16]

>[15] SPACE!! 22-Sep-2006, 18:41
>возможности скачать тот-же SOFTICE
OllyDbg очень хорош.



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2006.11.05;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.51 MB
Время: 0.043 c
2-1161340156
Gloomer
2006-10-20 14:29
2006.11.05
Как узнать текущий часовой пояс, установленный на компьютере


15-1161074442
ZeroDivide
2006-10-17 12:40
2006.11.05
Мне стыдно за мой универ :(


2-1161622479
markers
2006-10-23 20:54
2006.11.05
Естьли numeric_format в Delphi?


1-1158916637
MixAnOL
2006-09-22 13:17
2006.11.05
Печать на термопринтере через RS232


2-1161345479
Alex_C
2006-10-20 15:57
2006.11.05
EMcaretPos в RichEdit





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский