Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Форматы файлов и данных > Помогите разархивировать dat файл программы


Автор: taz3 15.8.2006, 02:00
Здорово всем. Помогите пожалуйста мне, у меня есть программа справочник 
радио любителя, программа называется INQUIRY.exe весит 0,99 МБ 
и к нему есть data.dat весит 61 Мб я не могу разобраться как из 
dat файла можно вытащить фотки. 
Пробывал проктически всеми программи, и ничего не получается.

Вот только что я смог узнать про этот файл 
Header, Section Header, DATA 
Address Value Meaning 
00000220 DATA Section Name 
00000228 00000974 Virtual Size 
0000022C 0005B000 RVA/Offset 
00000230 00000A00 Size of Raw Data 
00000234 00059A00 Pointer to Raw Data 
00000238 00000000 Pointer to Relocs 
0000023C 00000000 Pointer to Line Numbers 
00000240 0000 Number of Relocs 
00000242 0000 Number of Line Numbers 
00000244 C0000040 Section Flags (Writeable, Readable, Initialized data)

Автор: Alexeis 15.8.2006, 02:33
taz3, этот файл является стандартным архивом или специальным, придуманным автором программы?

Автор: taz3 16.8.2006, 00:27
Здорово alexeis1  Я не знаю вроде специальный.

Автор: taz3 16.8.2006, 02:14
ссылка http://web6.storeandserve.com/download/352141/V2.7z.html
нажми на Download This File Now:
[Add to My Favorite Downloads] 
сниз будет V2.7z нажи на него

Автор: dumb 16.8.2006, 08:57
taz3, держи "препроцессор": user posted image
Код

  char buf[32];
  char key[] = "\x31\x2E\x32\x29\x29\x33\x74\xFB\xF0\x71\x37\x3C\x66\x39\x77\x77\x72\x79\xE4\x79\x7E\x3D\x3B\x75\x68\x6C\xE3\xE7\x3F\x2A";
  FILE *f = fopen("data.dat", "rb"), *w = fopen("fstream.dat", "wb");
  int pos = 0;
  while (!feof(f))
  {
    int rl = fread(buf,1,30,f);
    for (int i = 0; i < rl; i++, pos++) buf[i]^=key[i]^(pos&0xFF);
    fwrite(buf,1,rl,w);
  }
  fclose(f), fclose(w);

Автор: Alexeis 16.8.2006, 11:04
[offtop]
Цитата(taz3 @  16.8.2006,  00:27 Найти цитируемый пост)
Здорово alexeis1

ну мы все таки не одни на форуме, здороватся так уж со всеми smile 
[/offtop]

Автор: taz3 16.8.2006, 19:12
Цитата(dumb @ 16.8.2006,  08:57)
taz3, держи "препроцессор": user posted image
Код

  char buf[32];
  char key[] = "\x31\x2E\x32\x29\x29\x33\x74\xFB\xF0\x71\x37\x3C\x66\x39\x77\x77\x72\x79\xE4\x79\x7E\x3D\x3B\x75\x68\x6C\xE3\xE7\x3F\x2A";
  FILE *f = fopen("data.dat", "rb"), *w = fopen("fstream.dat", "wb");
  int pos = 0;
  while (!feof(f))
  {
    int rl = fread(buf,1,30,f);
    for (int i = 0; i < rl; i++, pos++) buf[i]^=key[i]^(pos&0xFF);
    fwrite(buf,1,rl,w);
  }
  fclose(f), fclose(w);

Здорово ВСЕМ кто мне помогает.
Пожалуйста объясните, а что это такое.

Автор: Alexeis 16.8.2006, 19:47
Судя по высокой сжимаемости архива мы имеет дело с не со стандартным форматом DAT, а изображения хранятся в формате BMP, поиск внутри архива поназал совпадение комбинации 'BM' (битмап), 315 раз, поэтоу вероятно всетаки архив представляет собой набор файлов с некоторой разметкой, стоит попытатся извлечь их всех и проверить не является ли это совпадением (файл всетаки 25мБ), возможно там присутствует графика других форматов, но это точно не JPEG его сигнатура не встревилась ни разу (разве что зашифровали но это маловероятно т.к. информация не является конфиденциальной). 

Автор: Alexeis 16.8.2006, 23:48
Проверка показала, что все совпадения оказались случайными, ни одна из позиций "BM", не указывает на реальную картинку. Ситуация парадоксальная. Если бы архив был зашифрован, то он бы не жался по определению. Если бы он был запакован то его нельзя было бы сжать. Попробуйте файлик запаковать зипом, а потом архив зип запаковать раром с самым сильным сжатием, результат по рару будет 100% практически при любой степени сжатия зипом. Т.е. Архивы уже не жмутся, а этот жмется, да еще в 3 раза, что весьма похоже на обычную степень сжатия изображений в формате BMP. У меня идеи кончились smile  

Автор: dumb 17.8.2006, 00:06
намеки, как я понял, не принимаются к рассмотрению... user posted image

тогда прямым текстом: "препроцессор" - расшифровщик файла. две строчки кода прочитать влом? user posted image

короче, прикладываю готовый .exe, который открывает файл data.dat в текущей директории, расшифровывает, записывает в fstream.dat и потом(до кучи) вытаскивает все ресурсы из него в директорию resources.

edit: не приаттачилось почему-то...

Автор: Alexeis 17.8.2006, 01:01
dumb, поведал бы что это хоть за метод шифрования, на эти файлы что стандарт есть какой?
Где можно об этом почитать?

Откуда известно значение ключа?
Цитата(dumb @  16.8.2006,  08:57 Найти цитируемый пост)
char key[] = "\x31\x2E\x32\x29\x29\x33\x74\xFB\xF0\x71\x37\x3C\x66\x39\x77\x77\x72\x79\xE4\x79\x7E\x3D\x3B\x75\x68\x6C\xE3\xE7\x3F\x2A";


Это что выходит что зашифровано обычным XOR?

dumb, коментируй свой код ведь не ясно, что откуда и как работает!

Скажем в чем смысл (pos&0xFF); это что сброс счетчика?

Автор: taz3 17.8.2006, 01:21
Объявляю большую благодарность за помощь
dumb и alexeis1 
Большое спасиб.

Автор: dumb 17.8.2006, 01:35
alexeis1, метод "шифрования", как ты правильно догадался - XOR, но маленько "усложненный": перед xor'ом данных байт ключа xor'ится с байтом текущей позиции в файле(pos&0xFF - обнуление старших разрядов). стандарта никакого - такие "алгоритмы" на коленке пишутся и предназначены в основном "от прямого просмотра".
извиняюсь за отсутствие подробных комментариев... user posted image
Цитата(alexeis1 @  17.8.2006,  01:01 Найти цитируемый пост)
Откуда известно значение ключа?

угадал! user posted image

Автор: Alexeis 17.8.2006, 11:31
Цитата(dumb @  17.8.2006,  01:35 Найти цитируемый пост)
угадал!

Значит воспользовался тем, что много последовательностей повторяются, определил период повторения, т.о. можно было узнать длинну ключа. Но для полученя самого ключа нужно было наверное найти одинаковые фрагменты имеющие разное смещение по ключу?
Или просто иксорил весь текст с каким-то заранее известным фрагментом текста? Это вообще не дллка была переименованая?

Автор: dumb 17.8.2006, 11:37
alexeis1в архиве лежит программа. а у меня есть дизассемблер... user posted image

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)