Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 25.09.2011, 12:48
Аватар для Oleg
Oleg Oleg вне форума
Активный
 
Регистрация: 29.11.2007
Адрес: Оренбургская обл., Россия
Сообщения: 261
Репутация: 15
Восклицание Расшифровать текст записи

Здравствуйте, уважаемые форумчане.
У меня вопрос в следующем: есть бинарный файл, я разобрался в его структуре, есть программа, которая создает эти файлы и может читать(исходника, соответственно, нету, структура не описана).
Вот например наименьший кусочек файла: (в Hex виде)
Код:
66 A5 67 A3 70 9A 76 AA 67 A5 67 A3 70 9A
В данном кусочке хранится такая инф-ия:
Структура одной записи:
(без дополнительного одного байта, указывающего на длину либо конец строки). Кстати, так и не понял до сих пор тоже, как понять, что строка определенной длины..что здесь используется символ типа #0 или вначале например число, указывающее на длину.
Код:
Singature:Byte; // $66
Rating:String; // В данном случае длина = 1, значение = "1"
Question:String; // В данном случае длина = 1, значение = "1"
Answer:String; // также 1, значение = "1"
Value1:String; // 1, значение = "1"
Value2:String; // 1, значение = "1"
Value3:String; // 1, значение = "1"
Value4:String; // 1, значение = "1"
Т.е. там имеются такие символы: "1111111", т.е. 7 символов.(+байт сигнатуры+ 7-1 байт для указания длины или символа конца, т.к. здесь для последнего значения4(value4) не указана длина или символ конца строки).
т.е. если изобразить правильнее, то для данного кусочка структура такая:
Код:
Singature :Byte; 
Rating    :String[2]; 
Question  :String[2];
Answer    :String[2];
Value1    :String[2];
Value2    :String[2]; 
Value3    :String[2]; 
Value4    :String[1]; // не стоит символ конца!
Если вы заметили, то непонятно также, а почему же здесь для последней строки не указана длина или символ конца ?!. Вроде бы заметил, что если добавить следующую запись, то в принципе программа вставляет ещё символ $75(в данном случае, т.е. если предудущая запись, описанная выше, имеет такую длину, а не измененную, т.к., думаю что при изменении длины будет символ уже другой). Если в hex редакторе вставить этот символ $75 для текущей записи, то всё верно работает, т.е. тут не особо важный вопрос, наверное просто забывают вставлять его для последней записи).
Вот примерно можно увидеть наглядно эту запись немного "приятнее" для глаз:
Код:
Исходная:
66 A5 67 A3 70 9A 76 AA 67 A5 67 A3 70 9A
а теперь немного структурированнее, смотрим сверху вниз первый столбик, затем на второй столбик, видим что закономерно начинается повторение.
66 
A5 
67      67     
A3      A3
70      70
9A      9A
76
AA
67
A5
Т.к. длина строки может быть разная, и при изменении длины любой строки, всё следующее за этой строкой начинает полностью меняться,
т.е. например сделаем, чтобы вопрос(question) был из двух символов "1", тогда имеем уже:
Код:
66 A5 67 A3 9F 6B A5 7B 96 76 96 74 9F 6B A5
а исходная(с вопросом, где символ "1" один):
66 A5 67 A3 70 9A 76 AA 67 A5 67 A3 70 9A
Никак не могу понять как же здесь хранятся строки, какой алгоритм используется. Думаю, что здесьxor, только вот до сих пор не удалось найти закономерность изменения.
Очень надеюсь на вашу помощь, т.к. сам пока не могу понять.
Если нужны записи другой длины, с другим содержанием или ещё что-то, то скажите.
Помогите, пожалуйста разобраться.
__________________
Если Вы находите ошибки, исправить которые дело долгое и нудное, ничего не делайте - просто внесите их в список особенностей
Ответить с цитированием
  #2  
Старый 25.09.2011, 14:12
Pyro Pyro вне форума
Так проходящий
 
Регистрация: 18.07.2011
Сообщения: 805
Версия Delphi: 7Lite
Репутация: 6063
По умолчанию

хотелось бы увидеть что выдаст при Rating='2' и '3'
или длинную строку из одного итого же символа
я так понял, сейчас оно вот-так: http://imglink.ru/show-image.php?id=...0b785dacf97ea9

Последний раз редактировалось Pyro, 25.09.2011 в 14:27.
Ответить с цитированием
  #3  
Старый 25.09.2011, 14:27
Аватар для Oleg
Oleg Oleg вне форума
Активный
 
Регистрация: 29.11.2007
Адрес: Оренбургская обл., Россия
Сообщения: 261
Репутация: 15
Сообщение Вот

При Rating = '2'
Код:
66 A6 67 A3 70 9A 76 AA 67 A5 67 A3 70 9A
Теперь Rating = '1', и Questions = '11111'
Код:
66 A5 67 A3 9F 9A A5 AA 67 A5 67 A3 70 9A 76 AA 67 A5
__________________
Если Вы находите ошибки, исправить которые дело долгое и нудное, ничего не делайте - просто внесите их в список особенностей
Ответить с цитированием
  #4  
Старый 25.09.2011, 14:34
Pyro Pyro вне форума
Так проходящий
 
Регистрация: 18.07.2011
Сообщения: 805
Версия Delphi: 7Lite
Репутация: 6063
По умолчанию

Цитата:
Questions = '11111'
я так понял, надо загнать туда строку такой длинны, чтобы в полученном результате найти периодичность - это и будет длинна того xor ключа
в xor не шарю, но думается, потом взять из результата посимвольно вычесть '1' и это будет ключ

Последний раз редактировалось Pyro, 25.09.2011 в 14:36.
Ответить с цитированием
  #5  
Старый 25.09.2011, 14:54
Аватар для Oleg
Oleg Oleg вне форума
Активный
 
Регистрация: 29.11.2007
Адрес: Оренбургская обл., Россия
Сообщения: 261
Репутация: 15
Сообщение

Создал файл, где questions ='11111111111111111111' // т.е. 20 единиц.
Код:
66      // signature

A5 67 //  ratink

{questions}
A3 9F 9A A5 AA 96 A5 96 
A3 9F 9A A5 AA 96 A5 96 
A3 9F 9A A5 7B 

96 76 // answer

96 74 // val1
9F 6B // val2
A5 7B // val3
96     // val4

Получается хor ключ 8 значный ?!
Этот ?
Код:
$92 $AE $AB  $94 $9B $A7 $94 $A7
146 174 171 148 155 167 148 167
Или всё же я неверно нашел ключ..что-то не получается..
Как тогда правильно восстановить по этому коду исходный ?
__________________
Если Вы находите ошибки, исправить которые дело долгое и нудное, ничего не делайте - просто внесите их в список особенностей

Последний раз редактировалось Oleg, 25.09.2011 в 15:02.
Ответить с цитированием
  #6  
Старый 25.09.2011, 15:08
Pyro Pyro вне форума
Так проходящий
 
Регистрация: 18.07.2011
Сообщения: 805
Версия Delphi: 7Lite
Репутация: 6063
По умолчанию

похоже что 8-значный, а xor или что-то ещё чтобы узнать, надо не 111111... а что-то другое подставлять и смотреть как меняется, например интересно глянуть что даст 11111111222222221111111122222222... по 8 тех и этих
Ответить с цитированием
  #7  
Старый 25.09.2011, 15:10
Pyro Pyro вне форума
Так проходящий
 
Регистрация: 18.07.2011
Сообщения: 805
Версия Delphi: 7Lite
Репутация: 6063
По умолчанию

или сразу строку 1111112222233333.... итд по 8
Ответить с цитированием
  #8  
Старый 25.09.2011, 15:23
Аватар для Oleg
Oleg Oleg вне форума
Активный
 
Регистрация: 29.11.2007
Адрес: Оренбургская обл., Россия
Сообщения: 261
Репутация: 15
Сообщение

вот questions = '11111111222222221111111122222222'
Код:
66 
A5 67 
A3 9F 9A A5 AA 96 A5 96 // 8 единиц
A4 A0 9B A6 AB 97 A6 97 // 8 двоек
A3 9F 9A A5 AA 96 A5 96 // 8 единиц
A4 A0 9B A6 AB 97 A6 97 // 8 двоек
74 // конец строки
9F 6B 
A5 7B 
96 76 
96 74 
9F

А вот questions = '111111112222222233333333'
Код:
66      // sign
A5 67  // rat
{questions}
A3 9F 9A A5 AA 96 A5 96  // 8 единиц
A4 A0 9B A6 AB 97 A6 97  // 8 двоек
A5 A1 9C A7 AC 98 A7 98 // 8 троек
74 // конец строки
9F 6B 
A5 7B 
96 76 
96 74
9F
__________________
Если Вы находите ошибки, исправить которые дело долгое и нудное, ничего не делайте - просто внесите их в список особенностей
Ответить с цитированием
  #9  
Старый 25.09.2011, 15:31
Pyro Pyro вне форума
Так проходящий
 
Регистрация: 18.07.2011
Сообщения: 805
Версия Delphi: 7Lite
Репутация: 6063
По умолчанию

похоже на сложение но может быть и чё другое
что будет, если послать яяяяяяяя? (ord('я') = 255)
Ответить с цитированием
  #10  
Старый 25.09.2011, 15:33
Аватар для Konrad
Konrad Konrad вне форума
Эксперт
 
Регистрация: 19.03.2009
Сообщения: 1,261
Репутация: 45834
По умолчанию

Наконец-то интересная тема.
Олег, сейчас у меня времени нету ответить, отвечу вечером.

Но по том что я, пока что, вижу - это похоже на Ci=(Pi+Kj) mod 256;
Ответить с цитированием
  #11  
Старый 25.09.2011, 15:39
Аватар для Oleg
Oleg Oleg вне форума
Активный
 
Регистрация: 29.11.2007
Адрес: Оренбургская обл., Россия
Сообщения: 261
Репутация: 15
Радость

Цитата:
Сообщение от Konrad
Наконец-то интересная тема.
Олег, сейчас у меня времени нету ответить, отвечу вечером.
Но по том что я, пока что, вижу - это похоже на Ci=(Pi+Kj) mod 256;
Очень надеюсь на вашу помощь тоже . потому глупых вопросов пытаюсь не задавать, а только те, что не могу разобрать сам.

Цитата:
Сообщение от Pyro
похоже на сложение но может быть и чё другое
что будет, если послать яяяяяяяя? (ord('я') = 255)
Вот что получается:
Код:
66      // sign
A5 67 // rat
71 6D 68 73 78 64 73 64 // 8 раз "я"
74           // конец строки
9F 6B 
A5 7B 
96 76 
96 74 
9F
Вовсе получается, что по xor ключу этому не расшифровать .
Код:
71 6D 68 73 78 64 73 64
Xor Key:
92 AE AB  94 9B A7 94 A7
В ответе не получается "я".
__________________
Если Вы находите ошибки, исправить которые дело долгое и нудное, ничего не делайте - просто внесите их в список особенностей

Последний раз редактировалось Oleg, 25.09.2011 в 15:42.
Ответить с цитированием
  #12  
Старый 25.09.2011, 15:49
Pyro Pyro вне форума
Так проходящий
 
Регистрация: 18.07.2011
Сообщения: 805
Версия Delphi: 7Lite
Репутация: 6063
По умолчанию

походу так оно и есть: rnityete
Хорошо бы ещё кусок реальных данных в тему для уверенности
Вложения
Тип файла: 7z reverse.7z (1.4 Кбайт, 4 просмотров)

Последний раз редактировалось Pyro, 25.09.2011 в 15:52.
Ответить с цитированием
  #13  
Старый 25.09.2011, 16:09
Аватар для Oleg
Oleg Oleg вне форума
Активный
 
Регистрация: 29.11.2007
Адрес: Оренбургская обл., Россия
Сообщения: 261
Репутация: 15
Печаль

Цитата:
Сообщение от Pyro
походу так оно и есть: rnityete
Хорошо бы ещё кусок реальных данных в тему для уверенности
Вот к примеру сообщение:
Код:
66       //sing
A5 67  // rat
E6 D3 DC E8 99 36 62 53 53 67 4E 61 61 4A 94 5A 57 59 58 // quest
76 // конец
AA 67 // answ
A5 67  // v1
A3 70  // v2
9A 76  // v3
AA      // v4
Ой, кажется получается..попробую дальше..просто упустил момент один.
Спасибо большое, буду пробовать ещё.
__________________
Если Вы находите ошибки, исправить которые дело долгое и нудное, ничего не делайте - просто внесите их в список особенностей

Последний раз редактировалось Oleg, 25.09.2011 в 16:14.
Ответить с цитированием
  #14  
Старый 25.09.2011, 16:19
Pyro Pyro вне форума
Так проходящий
 
Регистрация: 18.07.2011
Сообщения: 805
Версия Delphi: 7Lite
Репутация: 6063
Радость

test Сообщение хелп
Ответить с цитированием
  #15  
Старый 25.09.2011, 16:29
Аватар для Oleg
Oleg Oleg вне форума
Активный
 
Регистрация: 29.11.2007
Адрес: Оренбургская обл., Россия
Сообщения: 261
Репутация: 15
Хорошо Спасибо!

Цитата:
Сообщение от Pyro
test Сообщение хелп
Да, я потом понял ошибку, попробую дальше копать, если вдруг встретится что-то, что не подходит под это, то обязательно напишу.
Огромнейшее спасибо за помощь.
меня немного правда вот эта строка смутила:
Код:
char(byte(a[i]) - byte(b[i]))
Просто если байт(b[i]) будет больше чем байт(a[i]), то получается что тут будет знак отрицательный, а значит выйдет за диапазон и он возьмет уже
256-delta эта. Но вроде пока получается, не возникает исключительных ситуаций никаких даже если так.
__________________
Если Вы находите ошибки, исправить которые дело долгое и нудное, ничего не делайте - просто внесите их в список особенностей
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 02:48.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter