Форум: "Основная";
Текущий архив: 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