Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.11.05;
Скачать: CL | DM;

Вниз

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

 
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;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.073 c
3-1157607756
вп
2006-09-07 09:42
2006.11.05
Использование ADODataSet, обновление данных


2-1161167932
Priest
2006-10-18 14:38
2006.11.05
Как удалить объект из дочернего потока


8-1143547847
kmi
2006-03-28 16:10
2006.11.05
Как изменить бинарный файл?


2-1161196336
Sco
2006-10-18 22:32
2006.11.05
Удаление панели из события одного из её дочерних компонентов


1-1158867543
Алексей А.
2006-09-21 23:39
2006.11.05
Как запихнуть форму в tPanel