Нестандартная задачка - достать картинки из файла

nik93

Есть программа по живописи. Все файлы с картинами записаны в одном файле images.lib. В каталоге с этим файлом лежит еще тхт'шник примерно следующего содержания
 24;20.02.04 10:44:18;200;0;0;3;2;0;0;0;0;787;1190;0;0;0
drg00296;15.10.02 11:34:42;200;0;0;3;2;0;0;0;0;2024;1486;0;0;0
drg00297;15.10.02 11:34:42;200;0;0;3;2;0;0;0;0;1576;1182;0;0;0
drg00818;15.10.02 11:36:48;200;0;0;3;2;0;0;0;0;1256;2064;0;0;0
drg00819;15.10.02 11:36:48;200;0;0;3;2;0;0;0;0;1256;2038;0;0;0
drg00820;15.10.02 11:36:48;200;0;0;3;2;0;0;0;0;1576;1692;0;0;0
drg00822;15.10.02 11:36:48;200;0;0;3;2;0;0;0;0;1576;2239;0;0;0
drg00823;15.10.02 11:36:50;200;0;0;3;2;0;0;0;0;1576;2174;0;0;0
drg00824;15.10.02 11:36:50;200;0;0;3;2;0;0;0;0;1576;2150;0;0;0
drg00825;15.10.02 11:36:50;200;0;0;3;2;0;0;0;0;1576;1877;0;0;0
drg00826;15.10.02 11:36:50;200;0;0;3;2;0;0;0;0;1576;2228;0;0;0
drg00839;15.10.02 11:36:52;200;0;0;3;2;0;0;0;0;2024;1614;0;0;0
drg00840;15.10.02 11:36:52;200;0;0;3;2;0;0;0;0;2024;1638;0;0;0
drg00841;15.10.02 11:36:52;200;0;0;3;2;0;0;0;0;1256;1498;0;0;0
drg00842;15.10.02 11:36:52;200;0;0;3;2;0;0;0;0;1256;1505;0;0;0
drg00843;15.10.02 11:36:54;200;0;0;3;2;0;0;0;0;1576;2207;0;0;0
drg01149;15.10.02 11:38:20;200;0;0;3;2;0;0;0;0;2048;1407;0;0;0
drg01150;15.10.02 11:38:20;200;0;0;3;2;0;0;0;0;2048;1298;0;0;0
drg01151;15.10.02 11:38:20;200;0;0;3;2;0;0;0;0;2048;1366;0;0;0
...

все картины в формате bmp. Может у кого есть идеи как сопоставить эти 2 файла, чтобы достать все картины? Я что-то пока не могу придумать алгоритм

maggi14

а ты их по-очереди вытаскивать пробовал? просто в виде подряд идущих бмп?

nik93

Я не знаком с форматом bmp, можешь посоветовать как это примерно организовать?

nik93

спасибо, буду пробовать

erotic

Что-то мне кажется, там записаны даты и время создания файлов
Ближе к концу большие числа - возможно разрешение картинок.

maggi14

логично а делать-то что?

erotic

ну я бы действительно попробовал сделать что-то вроде
for (i=0;i<dostatochno_bol'shoe_chislo;i++)
{
ret = read_bmp(file_begin+i; &bitmap);
if (ret==VALUE_OK)
echo "Вполне возможно, что все заебись. Давайте посмотрим на картинку и в этом убедимся";
}
Но это в том случае, если картинки лежат в либе без какого-либо сжатия и всяких изъебств.
Еще наверное учел бы, что все файлы .bmp начинаются с аббреиватуры BM. При этом может быть, что в либу сначала пихаются хедеры всех файлов, а потом уже где-то дальше идут тела. Вариантов много)

erotic

В принципе, можно images.lib в студию
Если кому скучно, пусть попробуют решить задачку.

margadon

помнится, я так wav-ы тырил из ресурсов Tomb Raider 3
бежал по ресурсу и выкидывал в отдельный файл всё от "RIFF" до следующего "RIFF"
тупо, но сработало

nik93

А можно как-то легко определить что кончился один BMP и начался другой? или надо из заголовка брать размер и потом отщиплять кусок этого размера?

maggi14

Type 2 0 Сигнатура "BM"
Size 4 2 Размер файла

voronetskaya

задачка абсолютно стандартная для рипперов =)

nik93

margadon

я говорю - попробуй отщипывать ровно от BM до BM... =)
Если в файл влезет больше чем надо не беда, всё равно откроется Если в теле такого бмп-шника встретилась такая последовательность букв, будет плохо, но всё равно - попытка не пытка

nik93

я короче попробовал считывать 4 байта после каждого вхождения BM, получается лажа какаято, очень огромные размеры BMPшек, видимо все не так просто.

margadon

учти главное правильно считать размер ПЕРВОГО бмп-шника, а то в больших картинках внутри вполне может встретиться буквосочетание ВМ и тогда тааакое начнётся!

nik93

да я пол файла считал (а он 500 метров как никак) и ни за одним вхождением ВМ не последовало нормального значения размера файла.

a10063

а откуда вообще известно, что там бмп подряд лежат?

nik93

видимо там нефига не BMP =(
а что мы знаем про JPG? =)

a10063

причем тут jpg?
поставь файловый монитор и посмотри как программа этот файл читает, может, что и поймешь...

nik93

а как этот файловый монитор называется?

zzzzzzzzzzz

Шарь давай.

nik93

из инета 600 метров скачаешь? в общаге завтра буду

maggi14

API Spy, FileMon

a10063

а ось какая?
если вынь, то, например, поиск по sysinternals, filemon, diskmon

nik93

С помощью этих уттилит стало ясно что в txtшник она не лазит, а лазит в какойто 5 метровый файлик с расширением dki а только потом в Images.lib

maggi14

а ты еще попробуй узнать, по какому смещению она лазит туда и туда, и попытайся найти связь

nik93

в прогах смещение не указывается...

maggi14

в тех, что я тебе посоветовал, указывается. Не DiskMon и FileMon, а API Monitor и API Spy

erotic

Можно еще дизассемблить прогу, которая все это создала.

maggi14

но это сложно, а результат будет тот же
Оставить комментарий
Имя или ник:
Комментарий: