Перейти к содержимому


Внимание!

Это форум по извлечению ресурсов из игр: музыки, звуков, текстур, 3D-моделей...
Перед поиском ответов на форуме, рекомендуется ознакомиться с основным сайтом EXTRACTOR.ru!
[ Прочтите внимательно - правила создания тем и ответа в них ]
Все вопросы по запуску игр задавайте в другом месте: Установка и запуск игр.


Фотография

Сумма технологий


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 21

#1 -=CHE@TER=-

-=CHE@TER=-

    Полковник

  • Администраторы
  • 971 сообщений
  • Пол:Мужчина

Отправлено 14 February 2006 - 18:30

Перенесу сюда продолжение темы с 3DMark2006, чтобы там не лез большой оффтоп.

CrOm!
Цитата
1) да переделать мне не проблема. мне бы сам 3дмарк...
2) пишу я на с++

Я могу без проблем переписать любую программу с исходными кодами у себя на сайте на "ANSI C", если тебе нужно.

Цитата
была в свое время идея сделать движок выдирательный. для чего переделать мр. риппер. потом на основе этого движка делать софт. тут тебе и плагины к менеджерам, и ГУЙня, и консольный изврат, и т.п.

А что с этой идеей теперь?..

Цитата
кстати, насчет усовершенствования мр. риппера... для этого многого не надо: просто писать к нему плагины и все.

Ой, мне лень в формате разбираться, так что только могу предложить переписанние на Си программ.

Siberian_GRemlin!
Цитата
Зачем опять всё начинать сначала?! По-моему, самый лучшиый вариант - развивать GAUP, я автору всячески помогаю чем могу... В вашем же случае можно и соавторами стать, я думаю.

Это, как я понял из дальнейшего разговора, задрючка к Total Commander?.. Не, я всё-таки тогда уж за FAR - тот хоть цивилизованней выглядит. ИМХО.

В общем это да - так и будет борьба - одни за FAR, другие за Total Commander.
Возможно реально стоит заняться переделкой Mr.Ripper'а или замутить новый под GUI?.. Тоже с открытыми исходниками и все дела.

Далее возник второй вопрос - сумма уже существующих технологий.
Как тут народ относится к тому, что их программы (особенно с закрытыми исходниками) будут использовать (ссылка на автора + его сайт будет) для создания одного нормального конвертера/экстрактора вместо кучи мелких, которые нужно в строго определённом порядке применять? Просто я смотрю как сейчас народ в Интернете с нашими распаковщиками парится - аж смешно. (*улыбается*) Так как их юзают в основном очень непродвинутые пользователи (каковые составляют большую часть всех пользователей). Хотелось бы точно услышать по этому поводу мнения JTommy и VAG'а (хотя последний, скорее всего, опять на всё забьёт).

Народ! Прошу всех подключиться к этому вопросу, да и вообще к теме.

P.S. CrOm! Я не знал, что твой Mr.Ripper умеет Bink Video и Smacker Video вытаскивать (это я к теме из музыки от Total Overdouse)... Буду знать. (*улыбается*)
P.P.S. JTommy! А зачем у тебя на сайте в таблице к программам графа "исходники", если их ни для одной программы нет? (*улыбается*)

#2 CrOm

CrOm

    Старший сержант

  • Пользователи
  • 76 сообщений
  • Город:Omsk

Отправлено 15 February 2006 - 04:29

на разработку рип-движка я забил из-за нехватки времени и лени.

насчет технологий: тут главное хорошо оптимизированый поисковый движок и всякие фенечки, типа сплитера, поиска по сигнатурам, выделений участков, поддержка различных методов упаковки

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

далее: поддержка форматов - самая гибкая функциональность у плагинов. интерфейс плагинов мр. риппера меня не очень радует, но переделывать я его не стал из-за соображений совместимости. в новом распаковщике надо обдумать этот вариант досконально, чтобы потом не мучаться
риппер поддерживает довольно таки много игр и просто форматов. более 60% это мои собственные раскопки, остальное собиралось по просторам инета. честно сказать, информации про современные форматы очень мало в инете, поэтому необходим человек, а лучше группа людей, которые бы неплохо специализировались на определенных типах ресурсов. например, как Guru или VAG на музыкальных, а Terminius на графических.


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

форматы сжатия: мр. риппер умеет работать с форматами ZLib, deflate, LZSS, PKWare (некоторое было взято из Stuns)

методы шифрации: ну в основном это xor. и вот еще в C&C - Blowfish. вообще я не хакер, поэтому методами реверсивной инженерии не могу выяснить используемый метод шифрации. да и если и знать этот метод, то необходимо к томуже знать где лежат ключи и т.п. вообщем для меня это темный лес

вобщем вот: широкое поле для деятельности. кто этим и, главное, как и когда будет заниматься? сложно сказать. у меня сейчас очень мало времени я могу только понемногу помогать там, да сям... Terminius тоже погрузился в дела семейные, да в в разработку игры. Guru и VAG забили давно на все и, скорее всего, не буду учавствовать. максимум, что у них можно попросить - исходники их программ, что тоже маловероятно. остаетесь вы: -=CHE@TER=- и jTommy.

да, еще. я против разработки монолитного GUI-софта. нужен именно рип-движок, чтобы на его основе делать софт. мне на много удобнее ковырять файлы из FAR. у меня там под ругой весь инструментарий: сам мистер риппер, hex-viewer/editor, калькулятор с автоматическим пересчетом в hex и др... ну, я думаю, меня поняли.

тыркать мышью это настолько неудобно, что сложно описать. софт такого типа только для начинающих. а рип-движок будет подразумевать, что независимо от оболочки результат будет один и тотже.
как пример: архиватор 7zip. у него есть движок, и на его основе и гуйня и консольная версия и плагин к фару. очень удобно для всех


#3 Terminus

Terminus

    Генерал-майор

  • Администраторы
  • 1969 сообщений
  • Пол:Мужчина
  • Город:Санкт-Петербург

Отправлено 15 February 2006 - 12:10

Напомню десятку лидеров по скачиваниям на примере января wink.gif

1. Mr.Ripper (446)
2. LithUnwrap v1.3 (435)
3. MultiEx Commander (373)
4. Dragon Unpacker (370)
5. Game File Explorer v1.32 (351)
6. FMV-Extractor v1.3 beta 1 (317)
7. Need For Speed : Undeground music extractor v1.0.0 (290)
8. Magic Extractor (261)
9. Resource Game Viewer v1.0 (252)
10. eXe Scope v6.30 (216)

#4 jTommy

jTommy

    Старший прапорщик

  • Пользователи
  • 195 сообщений
  • Город:Moscow

Отправлено 15 February 2006 - 16:20

-=CHE@TER=-:
Цитата
Как тут народ относится к тому, что их программы (особенно с закрытыми исходниками) будут использовать (ссылка на автора + его сайт будет)

Я, естественно, не против. Предоставлю всю интересующую инфу.

Цитата
JTommy! А зачем у тебя на сайте в таблице к программам графа "исходники", если их ни для одной программы нет? (*улыбается*)

Сначала я планировал выложить исходники для большинства своих программ. Но потом решил, что лучше буду публиковать спецификации форматов. Те, кому надо, по спецификации напишут все, что им нужно. И плагиатчиков не будет smile.gif. А графу пока оставил.

All:
Писать плагины к Mr.Ripper'у или GAUP конечно удобно и легко. Но, к сожалению, аудитория у Far и TC сильно ограничена. Большинство пользователей пользуют "проводник" и не знают (и не хотят знать) ничего про нормальные файловые менеджеры (например, из всех моих друзей и знакомых только двое постоянно пользуются TC и Far). При знакомстве с Far у "проводниковых" случается шок: "Оно же текстовое! Как ты этим пользуешься???! Ужас!". И, как следствие, полное неприятие Far'а (наблюдал неоднократно). Так что, это не самый оптимальный вариант.

Остается три варианта:
1. каждый выбирает понравившийся универсальный распаковщик и пишет к нему плагины. Мне пока ни один не понравился. Может, я слишком придираюсь?
2. объединяемся и пишем что-нибудь очень универсальное и очень удобное.
3. оставляем все, как есть или вообще забиваем на все это.

Как я раньше писал, я за универсальный распаковщик. Вот некоторые основные мысли:
GUI оболочка отдельно, плагины отдельно.
За основу взять интерфейсы WinRAR и немного TC(панель дисков). В оболочке обработка действий пользователя и интерфейс для плагинов. Больше ничего. Самое сложное, как и сказал CrOm - разработать правильный интерфейс для плагинов, чтобы потом его не менять.
Плагины трех видов: распаковщики/упаковщики, конвертеры, рипперы. Причем один плагин может поддерживать несколько форматов.

Все остальное это технические подробности.

CrOm:
Цитата
нужен именно рип-движок, чтобы на его основе делать софт

Мысль твою понял, но пока не представляю, как это реализовать. К тому же, надо поразмыслить о соотношении целесообразность/трудоемкость_реализации.

P.S.: времени у меня тоже немного, даже мало. Но от идеи не отказываюсь, время найдется.

#5 Sash

Sash

    Старшина

  • Пользователи
  • 91 сообщений

Отправлено 15 February 2006 - 16:25

У меня вопрос (со вступлением): в своей программе я не смог обойти "самоузнаваемость" формата для программы-риппера (по сигнатуре, расширению и др.), т.к. некоторые форматы не имеют ярко выраженных признаков "узнаваемости", хотя имеют структуру размещения файлов, с таблицей и пр. Т.е. по примеру же своей проги я банально предлагаю выбрать формат/игру для распаковки ресурсов.
Я конечно понимаю, что Ваша программа ближе к рипанию (извлеку что найду) с поддержкой форматов, но всё же, как вы предполагаете обходить подобные описанному подводные камни? Отдавать на рипание, игнорируя имеющуюся таблицу или всё же как-то её использовать?

#6 -=CHE@TER=-

-=CHE@TER=-

    Полковник

  • Администраторы
  • 971 сообщений
  • Пол:Мужчина

Отправлено 16 February 2006 - 19:11

CrOm!
Цитата
на разработку рип-движка я забил из-за нехватки времени и лени.

Приехали. А что - тут сейчас у кого-то много времени? Просто как бы учти, что если будешь потом всё переделывать, то ещё больше времени понадобится - так как форматы новые добавляются.

Цитата
интерфейс плагинов мр. риппера меня не очень радует, но переделывать я его не стал из-за соображений совместимости. в новом распаковщике надо обдумать этот вариант досконально, чтобы потом не мучаться

Что-то я не понял - ты собираешься заниматься распаковщиком или нет?..

Цитата
общем вот: широкое поле для деятельности. кто этим и, главное, как и когда будет заниматься? сложно сказать. у меня сейчас очень мало времени я могу только понемногу помогать там, да сям... Terminius тоже погрузился в дела семейные, да в в разработку игры. Guru и VAG забили давно на все и, скорее всего, не буду учавствовать. максимум, что у них можно попросить - исходники их программ, что тоже маловероятно. остаетесь вы: -=CHE@TER=- и jTommy.

Короче, я понял - подключаться к твоему проекту бесполезно. Нужно делать новый.
Ну вот, хоть один вопрос прояснился...

jTommy!
Цитата
Сначала я планировал выложить исходники для большинства своих программ. Но потом решил, что лучше буду публиковать спецификации форматов. Те, кому надо, по спецификации напишут все, что им нужно. И плагиатчиков не будет . А графу пока оставил.

А после написания программы распаковщика, тебя не ломает ещё и писать документацию по формату?.. Тем более, что если ты всё на пальцах не объяснишь, то 100% тебе на почту повалятся письма содержания "а я вот тут не понял..."

Цитата
Остается три варианта:
1. каждый выбирает понравившийся универсальный распаковщик и пишет к нему плагины. Мне пока ни один не понравился. Может, я слишком придираюсь?
2. объединяемся и пишем что-нибудь очень универсальное и очень удобное.
3. оставляем все, как есть или вообще забиваем на все это.

Я за второй вариант, если кто-нибудь ещё подключится. Вдоём, мы каши не сварим. Попробовать можно - мне не жалко... Но это всё будет зело долго тащиться...

Цитата
P.S.: времени у меня тоже немного, даже мало. Но от идеи не отказываюсь, время найдется.

Я тоже. Лучше одна программа с плагинами, чем куча мелких программ.


Sash!
Цитата
Я конечно понимаю, что Ваша программа ближе к рипанию (извлеку что найду) с поддержкой форматов, но всё же, как вы предполагаете обходить подобные описанному подводные камни? Отдавать на рипание, игнорируя имеющуюся таблицу или всё же как-то её использовать?

Здесь вообще-то идёт речь сейчас не только об рипере как таковом, но и об универсальном распаковщике.
Насчёт твоего вопроса - единственный способ это проверить - полностью пропарсить файл. Как? Ну например - в игре HAVOC есть файлы-псевдоархивы - .FF. Так вот - у них первые четыре байта - количество файлов в этом архиве, а затем идёт описание каждого файла - смещение (4 байта) и имя (13 байт, ASCIIZ строка). Таким образов что нужно - посчитать разницу, между смещениями - получим размеры файлов - складываем их и прибавляем к размеру этой самой таблицы - если получаем размер этого самого .FF файла - значит это валидный архив .FF, т.е. мы верно определили формат. Если же размеры не совпадаются - значит нужно другой формат пробовать.


В общем так - начинается набор всех желающих в команду для создания универсального распаковщика / конвертера / рипера.

P.S. CrOm помоги пожалуйста там человеку в Total Overdouse - он с Mr.Ripper справиться не может. (*улыбается*)

#7 jTommy

jTommy

    Старший прапорщик

  • Пользователи
  • 195 сообщений
  • Город:Moscow

Отправлено 16 February 2006 - 22:18

-=CHE@TER=-:
Цитата
А после написания программы распаковщика, тебя не ломает ещё и писать документацию по формату?.. Тем более, что если ты всё на пальцах не объяснишь, то 100% тебе на почту повалятся письма содержания "а я вот тут не понял..."

А я совсем коротко буду писать, примерно как здесь: http://wiki.xentax.com/index.php/GRAFs. Те, кто знакОм с распаковкой - поймут, а остальные пущай учатся.

Sash:
добавлю, что можно просто проверить смещения файлов в архиве: если хотя бы одно смещение больше размера архива - это неправильные данные.

#8 CrOm

CrOm

    Старший сержант

  • Пользователи
  • 76 сообщений
  • Город:Omsk

Отправлено 16 February 2006 - 23:39

-=CHE@TER=-

хорошо. я попробую сделать рип-движок, но без посторонней помощи мне будет сложно его продвигать...

для старта необходимо обсудить API, ибо это то, что будет монументально

#9 -=CHE@TER=-

-=CHE@TER=-

    Полковник

  • Администраторы
  • 971 сообщений
  • Пол:Мужчина

Отправлено 17 February 2006 - 20:18

CrOm!
JTommy!
Ну тогда, как там Гагарин... "поехали!" (*улыбается*)

Я в стороне стоять не буду - точно.

Цитата
для старта необходимо обсудить API, ибо это то, что будет монументально

Так, что ты вкладываешь в понятие "API"? Взаимодействие .DLL плугинов с ядром (движком)?
Я себе это представляю так (я бы так сделал - если где не прав - по голове не бить (*улыбается*)):
у каждого плагина (как для распаковщика, так и для риппера) должно быть 3 функуции:
- для проверки архива на валидность (у риппера - сканит архив и ищет хотя бы 1 файл, для которого он предназначен)
- для получаения списка файлов (риппер даёт имена сам - типа "000.ogg", "002.ogg" и т.д.)
- функция для распаковки файла (здесь указывается его порядковый номер в списке, который возвращает предыдущая функция) - зачем всё так сложно? потому что файл в архиве может быть зашифрован (вспомните байду с Resident Evil 3) и по стандартным данным, а-ля имя+смещение+размер - его не вытащить
Т.е. человек открывает файл - сначала тот проверяется на валидность, затем получает список всех файлов и выбирает, что хочет распаковать.

Ещё такой вопрос - .DLL'ки могут хранить где-то свои какие-то переменные и данные?.. Если нет, то дамп с именами, размерами и смещениями придётся возвращать из модуля и хранить в главной программе, а затем подавать вместе с параметрами указатель на эту часть памяти в функцию распаковки файла.

Тогда ядро будет простое как репа.

Выши мысли?..

#10 jTommy

jTommy

    Старший прапорщик

  • Пользователи
  • 195 сообщений
  • Город:Moscow

Отправлено 18 February 2006 - 11:11

Для начала предлагаю обсудить структуру проекта. Получилось довольно объемно, поэтому читайте здесь.
Ближе к вечеру выложу первый набросок API плагинов.

#11 Siberian_GRemlin

Siberian_GRemlin

    Старший прапорщик

  • Пользователи
  • 166 сообщений
  • Город:Красноярск

Отправлено 18 February 2006 - 16:16

Предлагаю:
1. Плагин к TC, который подключает ядро
2. Плагин к FAR, который подключает ядро
3. GUI, который подключает ядро

Плагины к манагерам компилятся один раз и необновляются за редким исключением. Т.е. разрабатывается только ядро и плагины к ядру...

#12 -=CHE@TER=-

-=CHE@TER=-

    Полковник

  • Администраторы
  • 971 сообщений
  • Пол:Мужчина

Отправлено 18 February 2006 - 20:22

jTommy!
Цитата
Из опыта могу сказать, что файловые операции с RAW данными однообразны: прочитал в буфер, распаковал/расшифровал(упаковал/зашифровал), записал в файл. Поэтому предлагаю эти операции реализовать в движке. А плагины пускай обрабатывают только служебные данные.

Ты читал мой предыдущий пост? В теме про Resident Evil 3 можно узнать, что у этой игры очень невесёлый формат. При такой организации как ты предложил его будет невозможно распаковать (там всё на полином шифруется, который как-то хитро считается). Нужно спроектировать систему так, чтобы при появлении одной игры, с новым форматом, не пришлось заново все переделывать...

P.S. Кстати, обещанная сумма технологий:
http://www.extractor...st=90#entry8754

#13 jTommy

jTommy

    Старший прапорщик

  • Пользователи
  • 195 сообщений
  • Город:Moscow

Отправлено 19 February 2006 - 11:10

-=CHE@TER=-, действительно, я даже забыл про такие простые случаи, когда данные файлов разделены на части и сжаты отдельно. Значит надо предусмотреть варианты: в простых случаях движок сам распаковывает, в более сложных - плагин.

Siberian_GRemlin, у тебя есть мысли, как организовать "общение" между этими плагинами и ядром? может быть с помощью COM технологии?


#14 CrOm

CrOm

    Старший сержант

  • Пользователи
  • 76 сообщений
  • Город:Omsk

Отправлено 19 February 2006 - 18:57

Цитата (jTommy @ 19.02.2006 - 15:10)
-=CHE@TER=-, действительно, я даже забыл про такие простые случаи, когда данные файлов разделены на части и сжаты отдельно. Значит надо предусмотреть варианты: в простых случаях движок сам распаковывает, в более сложных - плагин.

Siberian_GRemlin, у тебя есть мысли, как организовать "общение" между этими плагинами и ядром? может быть с помощью COM технологии?

по первому: у меня так и происходит. если формат сложный, то он извлекается плагином, если простой, то это делает сам риппер.

по второму: COM-несколько геморойная технология.
проще взять либо подход FAR, либо Winamp. В GAP используется работа в стиле винампа. в принципе удобно, я использовал в Mr.Ripper более фаровский подход. нескольно топорно получилось.

#15 jTommy

jTommy

    Старший прапорщик

  • Пользователи
  • 195 сообщений
  • Город:Moscow

Отправлено 19 February 2006 - 20:54

Полистал книгу Пачеко и Тейксейры - COM технология нам совсем не подходит. Я думал, что движок может быть внешним COM сервером... оказывается что этот внешний сервер можно организовать только в приложении.

#16 jTommy

jTommy

    Старший прапорщик

  • Пользователи
  • 195 сообщений
  • Город:Moscow

Отправлено 20 February 2006 - 17:16

начал писать API для плагинов, читайте здесь. жду критику и предложения.


#17 -=CHE@TER=-

-=CHE@TER=-

    Полковник

  • Администраторы
  • 971 сообщений
  • Пол:Мужчина

Отправлено 24 February 2006 - 09:26

jTommy!
Что-то твой сайт перестал открываться...

Насчёт взаимодействия, я перефразирую немного свой пост чуть выше. Моё видение его выглядит примерно так:
У каждого плагина (как для распаковщика, конвертера, так и для риппера) должно быть три таких вот функуции:
- для проверки архива на валидность
а) риппера - сканит архив и ищет хотя бы 1 файл, для которого он предназначен
б) экстрактор - просто проверяет нужного ли архив формата
в) конвертер - делает примерно тоже, что и экстрактор (иначе как конвертировать?)
- для получаения списка файлов (риппер даёт имена сам - типа "000.ogg", "002.ogg" и т.д.), конвертеру это не нужно - так как ему подаются данные, а он их конвертирует

*замечание: при получении списка файлов, наверх (т.е. вызвавшей модуль программе), подаются ТОЛЬКО имена файлов. Вся структура должна храниться внутри временных переменных плагина. Он сам уже, в зависимости от них, решает как распаковывается или расшифровывается файл.

- функция для распаковки файла (здесь указывается его порядковый номер в списке, который возвращает предыдущая функция). Конвертеру в этом случае просто суётся под нос уже готовые данные, прочитанные в память, а он возвращяет указатель на уже сконвертированные данные

Примерно так...

#18 CrOm

CrOm

    Старший сержант

  • Пользователи
  • 76 сообщений
  • Город:Omsk

Отправлено 24 February 2006 - 19:02

апи от крома:

должна экспортироваться всего 1 функция, которая вернет структуру, поля которой указатели на функи плагина.

функи плагина:

анализ буфера на наличие знакомый сигнатур.
если сигнатура опознана, то в ответ возвращается расширение. движок уже сам приколбазит имя наподобие 00001.ххх
если файл - архив, то возвращается список содержимого этого архива
если ниче не найдено, то ниче не возвращаем

еще нужны функи для конвертирования и распаковки
ну и пара сервисных - вирнуть абаут, почистить память и т.п.


#19 CrOm

CrOm

    Старший сержант

  • Пользователи
  • 76 сообщений
  • Город:Omsk

Отправлено 24 February 2006 - 19:03

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

#20 jTommy

jTommy

    Старший прапорщик

  • Пользователи
  • 195 сообщений
  • Город:Moscow

Отправлено 25 February 2006 - 12:17

-=CHE@TER=-:
Цитата
Что-то твой сайт перестал открываться...

Это by.ru падает. Надо на нормальный хостинг переходить.

Цитата
а) риппера - сканит архив и ищет хотя бы 1 файл, для которого он предназначен

это может занять очень много времени. я считаю - у риппера вообще не должно быть такой функции. представляешь, что будет, если рипперу попадутся архивы Fahrenheit'а, например? к тому же в gui оболочке скорее всего будет функция автосканирования, как в графических вьюверах.

Цитата
*замечание: при получении списка файлов, наверх (т.е. вызвавшей модуль программе), подаются ТОЛЬКО имена файлов.

ну, не только имена. нужно передавать еще размеры, смещение, алгоритм сжатия. а то gui получится совсем не информативный.

Цитата
Вся структура должна храниться внутри временных переменных плагина

С тем, что движок ничего не должен знать про формат архива или ресурса я согласен.

Вот две основные мысли, которыми я руководствуюсь:
1. gui оболочка (а также Far и TC) должна предоставлять не только список имен, но и другую полезную (и не очень) информацию. Не надо ограничивать любопытство пользователя. А то у нас получится проект только для юзеров.

2. Движок должен предоставлять плагинам некоторые сервисы и освобождать авторов плагинов от рутины. Иначе это будет не движок и просто точка обмена данными между UI и плагинами.
А там уже пускай плагинописатели решают, пользовать эти сервисы или писать свой код.
Приведу простой пример, алгоритм поиска сигнатур в файлах: их можно искать так: if (buf[i]='R') and (buf[i+1]='I') and (buf[i+2]='F') and (buf[i+3]='F') then... а можно посмотреть теорию и узнать, что есть, к примеру, алгоритм Бойлера-Мура(если неправильно написал, поправьте) который намного быстрее, но и сложнее. И чтобы авторы рипперов не писали один и тотже рутинный код, в движке должен быть этот или другой, более продвинутый, алгоритм.