Universal Steam Extractor

Для тех, кто хочет сделать мир лучше.
Сообщение
Автор
GSen
Сержант
Сержант
Сообщения: 78
Зарегистрирован: 10.01.2010

#181 Сообщение 17.04.2010, 04:53

Баннер трудно не заметить... Но ещё нужно понять, что он кликабелен :D

Аватара пользователя
andreil
Разработчик
Разработчик
Сообщения: 781
Зарегистрирован: 14.08.2006
Откуда: Светлогорск, Беларусь
Поблагодарили: 2 раза
Контактная информация:

#182 Сообщение 09.06.2010, 22:18

Итак, работа пошла колесом ;)
На данный момент готово:
  1. Извлечение файла;
  2. Извлечение элемента (файла/каталога; пофиксил пару багов);
  3. Извлечение файлов для игр;
  4. Получение инфы о файле;
  5. Проверка элемента;
  6. Получение списка файлов в элементе;
  7. Открытие файла в кэше;
  8. Функция чтения открытого файла;
  9. Закрытие открытого ранее файла;
  10. Поиск файлов/папок;
  11. Создание ARCHIVE-файлов (100% как и у CFToolBox'а);
  12. Создание патчей (100% как и у CFToolBox'а).
Осталось доделать:
  1. Функция записи открытого файла;
  2. Дописать фугкцию закрытия файла (будет необходимо пересчитывать КС для измененных областей);
  3. Создание патчей (пока немного косячит);
  4. Функция применения обновления.
Сегодня думаю доделатьпервые три пункта, а потом буду все это тестить и исправлять баги до выходных.

PS: После полного переписывания всех алгоритмов чтения/записи/обхода значительно возросло быстродействие (снял много - около 30-40% - нагрузки с процессора за счет оптимизации кода).

Добавлено спустя 4 часа 15 минут 10 секунд:
Добавил оригинальный поиск элементов в кэше - по их хэш сумам. Поиск стал еще быстрее :)
[url=svn://forum.csmania.ru/andreil]Репозиторий с моими проектами[/url]
Занимаюсь переносом всех своих библиотек на С++, а так же созданием их кроссплатформенных версий.
В команду переводчиков манги "Ah! My Goddess!" требуются переводчики с английского и тайперы (последних можем обучить, главное - желание).

Аватара пользователя
andreil
Разработчик
Разработчик
Сообщения: 781
Зарегистрирован: 14.08.2006
Откуда: Светлогорск, Беларусь
Поблагодарили: 2 раза
Контактная информация:

#183 Сообщение 20.06.2010, 17:51

Урааа! На прошлой неделе доделал-таки функции для работы с файлами в кэше! Правда есть одно но: контрольные суммы пока не пересчитываются в связи с большой сложностью реализации подсчета сигнатуры всех таблиц с контрольными суммами.
В дополнение к этому наткнулся большой подводный камень - сложность реализации процесса обновления файла - за четыре дня не придумал даже как заголовки правильно перебивать :(

PS: Думаю, дальше дело пойдет веселее - сессия фактически уже закончилась :)
[url=svn://forum.csmania.ru/andreil]Репозиторий с моими проектами[/url]
Занимаюсь переносом всех своих библиотек на С++, а так же созданием их кроссплатформенных версий.
В команду переводчиков манги "Ah! My Goddess!" требуются переводчики с английского и тайперы (последних можем обучить, главное - желание).

Аватара пользователя
andreil
Разработчик
Разработчик
Сообщения: 781
Зарегистрирован: 14.08.2006
Откуда: Светлогорск, Беларусь
Поблагодарили: 2 раза
Контактная информация:

#184 Сообщение 28.06.2010, 09:05

Отпишусь о прогрессе работ.

На данный момент уже наполовину готова функция, создающая GCF-кэш с 0, осталось только правильно составить хэш-таблицу и контрольные суммы. Однако, будет одна сложность - сигнатуру пока составить без питоновского (или Сишного) костыля не получится - так и не нашел верной реализации алгоритма RSA на Delphi :(
[url=svn://forum.csmania.ru/andreil]Репозиторий с моими проектами[/url]
Занимаюсь переносом всех своих библиотек на С++, а так же созданием их кроссплатформенных версий.
В команду переводчиков манги "Ah! My Goddess!" требуются переводчики с английского и тайперы (последних можем обучить, главное - желание).

MOZGIII
Разработчик
Разработчик
Сообщения: 910
Зарегистрирован: 09.01.2009
Откуда: Переезжаю в /dev/null
Благодарил (а): 7 раз
Поблагодарили: 65 раз
Контактная информация:

#185 Сообщение 28.06.2010, 10:08

andreil
http://yandex.ru/yandsearch?text=RSA+delphi&lr=213 первые 3 ссылки

Добавлено спустя 5 минут 43 секунды:
Я слежу за развитием use)

Аватара пользователя
andreil
Разработчик
Разработчик
Сообщения: 781
Зарегистрирован: 14.08.2006
Откуда: Светлогорск, Беларусь
Поблагодарили: 2 раза
Контактная информация:

#186 Сообщение 28.06.2010, 11:53

Я вообще-то таже находил несколько реализаций, но все они были "левыми" - результаты были у каждого свои и отличались от стандарта. Вывод - неверный/нестандартный алгоритм, хотя он всего один:

Код: Выделить всё

encr=data^e mod n
data=encr^d mod n
Главное здесь - реализовать сам алгоритм данного возведения в степень, чего я пока (для Delphi) не нашел :(
[url=svn://forum.csmania.ru/andreil]Репозиторий с моими проектами[/url]
Занимаюсь переносом всех своих библиотек на С++, а так же созданием их кроссплатформенных версий.
В команду переводчиков манги "Ah! My Goddess!" требуются переводчики с английского и тайперы (последних можем обучить, главное - желание).

Аватара пользователя
andreil
Разработчик
Разработчик
Сообщения: 781
Зарегистрирован: 14.08.2006
Откуда: Светлогорск, Беларусь
Поблагодарили: 2 раза
Контактная информация:

#187 Сообщение 01.07.2010, 17:15

Наконец свершилось маленькое, но чудо! Я смог перевести алгоритм RSA на Delphi, за что спасибо товарищу MOZGIII - натолкнул на повтор поисков, кои оказались плодотворнами - уже вчера я дописывал класс для работы с данным алгоритмом.

PS: До сих пор мучаюсь с правильным созданием файлов кэша с 0 - осталось только проверить правильность создаваемого дерева и заполнить блок контрольных сумм. Затем - добавить функции для добавления файлов к существующему файлу (пока кэш создается только с 0 путем рекурсивного обхода каталогов с файлами).
[url=svn://forum.csmania.ru/andreil]Репозиторий с моими проектами[/url]
Занимаюсь переносом всех своих библиотек на С++, а так же созданием их кроссплатформенных версий.
В команду переводчиков манги "Ah! My Goddess!" требуются переводчики с английского и тайперы (последних можем обучить, главное - желание).

Аватара пользователя
andreil
Разработчик
Разработчик
Сообщения: 781
Зарегистрирован: 14.08.2006
Откуда: Светлогорск, Беларусь
Поблагодарили: 2 раза
Контактная информация:

#188 Сообщение 04.07.2010, 00:23

Есть большие сподвижки - почти полностью готов код, отвечающий за создание кэша с 0, а так же перерасчет контролных сумм файлов при их изменении (пока реализованно неоптимально, буду дорабатывать). Недостатком существующего на данный момент пересчета я вляется то, что при закрытии файла программа считывает его измененные части и считает КС для них, что значительно понижает быстродействие (получается, что каждй файл должен быть прочитан/записан три раза при создании кэша - считывается сам файл с диск, затем он пишется в кэш и, наконец, считывается для расчета контрольных сумм). Так что есть куда оптимизировать алгоритм ;)

PS: Кто хочет потестировать создание GCF, милости прошу отписаться в АСЮ - она будет включена максимально долго, всем отписавшимся вышлю версию программы для тестирования.
[url=svn://forum.csmania.ru/andreil]Репозиторий с моими проектами[/url]
Занимаюсь переносом всех своих библиотек на С++, а так же созданием их кроссплатформенных версий.
В команду переводчиков манги "Ah! My Goddess!" требуются переводчики с английского и тайперы (последних можем обучить, главное - желание).

eldest
Разработчик
Разработчик
Сообщения: 302
Зарегистрирован: 17.03.2008
Откуда: такие как я?
Поблагодарили: 2 раза
Контактная информация:

#189 Сообщение 04.07.2010, 09:36

andreil
Естли не жалко дай исходники классов, перепишу на си

Аватара пользователя
andreil
Разработчик
Разработчик
Сообщения: 781
Зарегистрирован: 14.08.2006
Откуда: Светлогорск, Беларусь
Поблагодарили: 2 раза
Контактная информация:

#190 Сообщение 05.07.2010, 01:21

Пока не могу - из всех исходников пока готов только гласс для работы с GCF-кэшем (да и он еще постоянно меняется). Когда сделаю более законченную версию либы, так и выложу (с заголовками для работы с С++ ;) ).
[url=svn://forum.csmania.ru/andreil]Репозиторий с моими проектами[/url]
Занимаюсь переносом всех своих библиотек на С++, а так же созданием их кроссплатформенных версий.
В команду переводчиков манги "Ah! My Goddess!" требуются переводчики с английского и тайперы (последних можем обучить, главное - желание).

Аватара пользователя
andreil
Разработчик
Разработчик
Сообщения: 781
Зарегистрирован: 14.08.2006
Откуда: Светлогорск, Беларусь
Поблагодарили: 2 раза
Контактная информация:

#191 Сообщение 10.09.2010, 13:52

Итак, начата работа над версией 4.0. Изменения:
  1. максимальная оптимизация кода;
  2. 100% поддержка функции "поток в потоке";
  3. в перспективе - полная кроссплатформенность (уже работаю над этим);
  4. добавлена функция обновления файлов кэша (отрабатывает намного быстрее, чем CFToolBox).
[url=svn://forum.csmania.ru/andreil]Репозиторий с моими проектами[/url]
Занимаюсь переносом всех своих библиотек на С++, а так же созданием их кроссплатформенных версий.
В команду переводчиков манги "Ah! My Goddess!" требуются переводчики с английского и тайперы (последних можем обучить, главное - желание).

MOZGIII
Разработчик
Разработчик
Сообщения: 910
Зарегистрирован: 09.01.2009
Откуда: Переезжаю в /dev/null
Благодарил (а): 7 раз
Поблагодарили: 65 раз
Контактная информация:

#192 Сообщение 11.09.2010, 00:44

andreil
По поводу 2-го пункта можно поподробнее?

Аватара пользователя
andreil
Разработчик
Разработчик
Сообщения: 781
Зарегистрирован: 14.08.2006
Откуда: Светлогорск, Беларусь
Поблагодарили: 2 раза
Контактная информация:

#193 Сообщение 13.09.2010, 00:06

MOZGIII
Можно будет читать файлы с путем наподобие "cache1.gcf/pak1.pak/file.ext" и т.п., т.е. все файлы рассматриваются как файловые потоки, метода чтения/записи/др. которых описанны в классе каждого формата.

PS: Немного напортачил с процедурой чтения - иногда читает 100% левак (опять напутал где-то со смещениями).

PSS: На данный момент кроме модуля Windows.pas не задействованно ничего (класс файлового потока писался с упором на KOL.pas, где он реализован максимально гибко, хотя я сделал его еще более гибким - методы для работы с потоком можно задавть при его создании). И еще - данная библиотека на 100% поддерживает Юникод (реализованно на основе встроенного типа string, что может создать бооольшие проблемы при юзании с С++).
[url=svn://forum.csmania.ru/andreil]Репозиторий с моими проектами[/url]
Занимаюсь переносом всех своих библиотек на С++, а так же созданием их кроссплатформенных версий.
В команду переводчиков манги "Ah! My Goddess!" требуются переводчики с английского и тайперы (последних можем обучить, главное - желание).

MOZGIII
Разработчик
Разработчик
Сообщения: 910
Зарегистрирован: 09.01.2009
Откуда: Переезжаю в /dev/null
Благодарил (а): 7 раз
Поблагодарили: 65 раз
Контактная информация:

#194 Сообщение 13.09.2010, 00:13

andreil
Когда всё будет готово - напишеш ещё биндинги в виде класса для Delphi? Будет очень удобно! И ещё - будет ли там возможность получить хеш файла, не считая его вручную - из хедеров (любой, но лучше бы md5 или sha1 или стимовый adler32)? И вообще - получение инфы о gcf из его заголовков?

Аватара пользователя
andreil
Разработчик
Разработчик
Сообщения: 781
Зарегистрирован: 14.08.2006
Откуда: Светлогорск, Беларусь
Поблагодарили: 2 раза
Контактная информация:

#195 Сообщение 13.09.2010, 09:36

Тебе хватит этого?:

Код: Выделить всё

      // информация о файле кэша
      property IsNCF: boolean read fIsNCF;
      property GetCacheID: ulong read fFileHeader.ApplicationID;
      property GetCacheVersion: ulong read fFileHeader.ApplicationVersion;

      // свойства получения информации о элементах
      property ItemsCount: ulong read fManifestHeader.NodeCount;
      property ItemSize[Item: integer]: TItemSize read GetItemSize;

      // свойства для работы с именами элементов
      property ItemByPath[Item: string]: integer read GetItemByPath;
      property ItemName[Item: integer]: string read GetItemName;
      property ItemPath[Item: integer]: string read GetItemPath;
Насчет хэша - можно, но есть одно но - он считается для кусочков файлов по 32768 байт (и менее, если кусок меньше - конец файла) + хэш там не просто adler32, а следующий код:

Код: Выделить всё

function Checksum(lpBuffer: pByte; uiBufferSize: uint): ulong;
begin
  result:=Adler32(0, lpBuffer, uiBufferSize) xor CRC32(lpBuffer, uiBufferSize);
end;
А насчет классов - все и так будет реальзованно в простейшем классе ("TGCFFile = class (TObject).....").
[url=svn://forum.csmania.ru/andreil]Репозиторий с моими проектами[/url]
Занимаюсь переносом всех своих библиотек на С++, а так же созданием их кроссплатформенных версий.
В команду переводчиков манги "Ah! My Goddess!" требуются переводчики с английского и тайперы (последних можем обучить, главное - желание).

Ответить Вложения 3