IPB

Добро пожаловать, гость ( Вход | Регистрация )

История благодарностей участнику -=CHE@TER=- ::: Спасибо сказали: 311 раз(а)
Дата поста: В теме: За сообщение: Спасибо сказали:
Jun 27 2013, 14:59 STUNS - STupid UNcompreSsor
Опять, блин, вылез баг с puff (deflate/zlib) - обновил с 2.2 до 2.3 (последняя - за апрель 2013), теперь всё ок.
Архив обновлён (версию не менял), лежит там же.
Приношу всем извинения.
Axsis, Siberian GRemlin,
Jun 1 2013, 15:00 STUNS - STupid UNcompreSsor
Собрал новую версию.

[codebox]STUNS v1.2
© CTPAX-X Team 2013-2023, Andrew Frolov aka FAL 2004
http://www.CTPAX-X.org/

v1.2 [2023.07.29]
o major changes in commandline since:
- input file name must be first argument
- do not add '-' before options (-deflate => deflate)
- insert '=' between option name and value (-skip100 => skip=100)
- to disable compression format add '-' at start (-lzo- => -lzo)
o updated compression modules:
- blast (PKWare) new "blast.h" file (typos in comments)
- puff (Deflate) new "puff.c" file (typos in comments)
- minilzo (LZO) updated from v2.09 (2015) to v2.10 (2017)

v1.1 [2018.03.26]
o UCL/NRV compression (ucl2b and ucl2d) returned back
o single file name replaced from "UNPACKED.###" to one specified with the -out option
o fixed typo ("is specified" -> "if specified")
o change help text so it will fit into 80x25 screen

v1.0 [2017.11.30]
o completely dropped old STUNS v0.x codebase
o GCC 3.2 with hacks instead of MSVC 6.0 - smaller executable size
o updated puff and blast from latest zlib sources
o dropped UCL/NRV compression (ucl2b and ucl2d) as rarely used
o changed output text: offset (hex), size (dec), algo, info
o new option to merge all output to a single file
o new option to view matched compressions and don't save anything

v0.5 [2016.08.17]
o minilzo: updated from v1.08 (2002) to v2.09 (2015) (fixes rare crash)
o UCL: just in case updated too from v0.92 (2000) to v1.02 (2003)
(new variants of compression formats like NRV2E and NRV2E-99 not included)

v0.4 [2016.06.26]
o Allow to set the scanning start offset for the input file (in hex)
o Allow to stop after a certain number of unpacked files has been reached
o Now if one or more compression algorithms are specified without the "-"
at the end, they will be the only ones used for unpacking

v0.3 [2014.03.31]
o PKWare: fixed a crash in output buffer overrun
o Deflate and PKWare: flag exhausted output buffer as normally unpacked (see the next note),
other libraries already work this way
o Output buffer won't be saved to disk if it reaches the end of an output memory block,
because this usually indicates an invalid input stream, so now instead of saving data
you'll get a warning message like this one:
> PKWare: Failed! Output buffer 256 Mb exhausted at: 0 (0x0)
if you still want to save these files, try to increase the memory block size
or you can disable mentioned compression library (if you don't need it)
to speed up the unpacking process
o Fixed typo in the usage text ("addind" -> "adding")

v0.2 [2013.06.01]
o Updated zlib modules:
- puff (Deflate) updated to v2.3
- blast (PKWare) replace "blast.c" with original
o Temporary file "$$$tmp$$$.$$$" replaced with output memory block
o Allow to change output memory block size from command line
o Allow to skip creation for files less than specified size from command line
o Change output file names from "%04x" to "%08X"
o Some tweaks to reduce final executable size[/codebox]

>>> stuns.zip <<<

Старая версия, больше не поддерживается:
Old codebase version, not supported anymore:
stuns05.rar

Русским языком:
- больше не создаётся временный файл в 256 Мб (у меня из-за него иногда места на диске нехватало), а выделяется блок памяти
- размер этого блока памяти можно настроить через командную строку, например: -mem128 отведёт уже 128 Мб памяти
- наконец-то (!!!) добавлена возможность пропускать файлы меньше чем указанный размер, чтобы не рыться в том, что не нужно: -skip123 пропустит файлы размером <=123 байта
- пара косметических изменений
Axsis, Siberian GRemlin,
May 25 2013, 16:31 Strippers
Искал чем можно заоптимизить .OGG - нашёл аж целую кучу утилит (там и для .OGG была): FileOptimizer
Чтобы не искать на странице ссылку на закачку: /FileOptimizer/
Grom PE,
May 18 2013, 13:10 FireFox: addons, extensions, tweaks, etc.
Я не понял, т.е. ты просто хочешь перезапустить Firefox?
Кто тебе мешает его закрыть и снова открыть?
А! Ты про перезапуск изнутри самого Firefox?
Я для перезапуска (когда добавляю новые забаненные стили в userContent.css) использую дополнение Addon Developer Helper 0.05. Там все функции у меня глючат, кроме одной - Restart Firefox, но остальные мне и не нужны. Она работает как надо, даже вкладки сохраняет. Правда с новым Firefox это дополнение, вроде бы, не работает, так что поищи аналоги - я как минимум ещё 2-3 похожих расширения встречал пока это нашёл (уже не помню чем меня те не устроили).
Siberian GRemlin,
May 14 2013, 09:00 FireFox: addons, extensions, tweaks, etc.
Поглядел под Firefox 20.0.1, правда не на своём компьютере и создал новый профиль (т.е. расширений не было никаких). Windows 7 x64, куча ядер у процессора и столько же гигабайт оперативной памяти.
В запущенном виде Firefox 20.0.1 занимает в процессах около 150 Мб, при этом он пустой, т.е. ни одной вкладки не открыто. При открытии сайта kinopoisk.ru болтается в пределах 260-270 Мб. За отметку в 300 ни разу не переваливал.
После того как зашёл на сайт, я проблевался, поставил AdBlock Plus и добавил туда:
*st.kinopoisk.ru/images/bnnr/*
После чего по сайту уже можно было ходить.
Гулял по разным ссылкам там, но, повторюсь, за отметку в 300 Мб Firefox не вылезал.
Так что попробуй отключить все расширения, потом включай по одному и смотри что отжирает память.
Siberian GRemlin,
Mar 17 2013, 21:47 InstallShield CAB View
Ага, спасибо, исправил и пересобрал - лежит там же. Пробуй. Мне, увы, проверить не на чем.
Axsis,
Dec 31 2012, 11:38 С наступающим Новым годом!
Ну, вот и ещё один год подошёл к концу.

Как я и говорил год назад - всё обошлось. (*улыбается*)
Глобальные катаклизмы миновали нас в этом году.

Что же касается года наступающего, то хочется пожелать чтобы он прошёл спокойно, удачно и хорошо.
Пусть Новый Год изменит что-нибудь в нашей жизни в лучшую сторону, а если менять уже нечего - то пусть сделает жизнь ещё лучше, ярче и веселей - пределу нет совершенства. (*улыбается*)

С праздником!
Axsis,
Sep 19 2012, 14:38 No-CD for Disciples: Sacred Lands
Спасибо!
Добавил патч во второе сообщение - должен работать для всех версий.
Raf-9600,
Sep 6 2012, 20:32 Delphi, Asm, C, WinAPI, PHP, ...
Все, наверное, помнят, что в .BMP формате строки изображения записываются снизу вверх и от этого, если читать его по обычному, то оно вверх ногами?
Сегодня ковыряясь с .BMP и читая справку (Win32.hlp за 1996 год, которой я постоянно пользуюсь), натолкнулся на откровение (в описания структуры BITMAPINFOHEADER):
QUOTE
If biHeight is positive, the bitmap is a bottom-up DIB and its origin is the lower left corner. If biHeight is negative, the bitmap is a top-down DIB and its origin is the upper left corner.
Проверил - задал высоту отрицательной и... работает, зараза! Даже ACDSee 5.0 понимает.
Программы, которые вяло следуют (или вообще не следуют) стандартам, конечно, накроются тазом, если читают поля как беззнаковые, но в остальном даже обидно как-то - всю жизнь маялся и перевёрнутым записывал. Эх, где ж это всё раньше было?..
В msdn это тему расширили - см. описание biHeight.
jTommy, Siberian GRemlin,
Aug 26 2012, 23:01 Замена ACDSee
ACDSee 5.0 Pro - это, насколько я знаю, один из последних в линейке. Выглядит и работает он как не буду выражаться что.
Тот ACDSee 5.0 PowerPack для которого я делал патчи был за 2002 год. Он хорош всем, кроме того, что не умеет файлы с символами не в ANSI-кодировке открывать (но проблем с именами на русском не будет, если что). Например, когда я писал распаковщик для игры Fate/Stay Night - там большая часть файлов, в том числе и картинки, имели имена на японском. При помощи CreateFileW() я их без проблем извлекал и сохранял на диск. Но вот такие имена (с иероглифами) ACDSee 5.0 PowerPack (2002) открыть не мог.
ACDSee 5.0 PowerPack можно взять тут (нагуглил):
CODE
ftp://irc.nn.ru/soft/%E4%EB%FF%20%E8%E7%EE%E1%F0%E0%E6%E5%ED%E8%E9/ACDSee%205.0/
или (если будешь вручную туда добираться):
CODE
ftp://irc.nn.ru/soft/для изображений/ACDSee 5.0/

Тебе оттуда нужны только файлы:
QUOTE
ACDSee50PowerPack.exe - собственно, сама программа
instmsia.exe - понадобится, если будешь ставить на Windows 98
ror.nfo - там серийник
acdsee5pp_rus.rar - руссификатор
Остальное не нужно. Я специально проверил, чтобы эти файлы были точно такие же как у меня (чтобы вирусов не было и т.д.).

Ещё можешь XnView поглядеть - он вообще бесплатный для некоммерческого использования + там SDK есть, можно свои плагины писать (для каких-нибудь форматов).
jTommy,
Aug 6 2012, 15:33 Tape archive [.TAR]
QUOTE
The chksum field is the ASCII representation of the octal value of the simple sum of all bytes in the header block. Each 8-bit byte in the header is added to an unsigned integer, initialized to zero, the precision of which shall be no less than seventeen bits. When calculating the checksum, the chksum field is treated as if it were all blanks.

Отсюда и ниже - подробное изложение формата. Насчёт того что там с размером - не в курсе, а искать в тексте влом.
Думаю, что размер файла тоже в какой-нибудь восьмеричной системе счисления (octal value) хранится.
Siberian GRemlin,
Jun 2 2012, 22:53 Star Wars: Galactic Battlegrounds music fix
QUOTE(Raf-9600 @ Jun 2 2012, 20:16) [snapback]3339[/snapback]
upd
Даже на крякнутых exe-шниках работают! laugh.gif
Эти патчи изначально так и задумывались, чтобы работать на любой версии файла.

QUOTE(Raf-9600 @ Jun 2 2012, 20:16) [snapback]3339[/snapback]
upd2
Только есть один нюанс по поводу того что ты написал в текстовом файле. На самом деле exe-шник от Clone Campaign я тебе дал уже обновлённый до версии 1.1, так что в текстовике стоит указать что фикс именно для этой версии.
О таких вещах предупреждать надо. Архив обновил - лежит там же. Проверяй для CC 1.0. Кстати, все эти патчи только для английской версии. На немецкой (German) и для других языков (если такие версии есть), оно работать не будет, потому что там, скорее всего, будут другие смещения.
Raf-9600,
Jun 2 2012, 19:52 Star Wars: Galactic Battlegrounds music fix
Для всех версий: gbgfixes.zip
Подробности в .TXT файле.
Проверяй.
Raf-9600,
Jun 2 2012, 18:49 Star Wars: Galactic Battlegrounds music fix
Вот для 1.1 - если будет работать, то сделаю такой же и для Clone Campaign.
Распаковать в каталог с версией 1.1 и запустить. После этого файл-фикс можно удалить.

Файл для "Clone Campaign" называется "battlegrounds_x1.exe" или ты его специально переименовал?
Т.е. это его оригинальное имя или нет?
Raf-9600,
Apr 24 2012, 16:19 Delphi, Asm, C, WinAPI, PHP, ...
О, блин, 4-ый PHP это уже здорово, чем вообще ничего!
Я не знал об этом, поэтому и предложил вот это всё.
Думаю с PHP у тебя уже проблем не будет.
Предложить особо нечего - если MySQL или какой-либо БД нет, то тогда действительно только в .XML хранить БД и парсить её при генерации страниц сайта на PHP.
simplexml_load_file(), к сожалению, только в PHP 5 появилась, смотри в сторону xml_parser_create() и других функций - они, судя по руководству к PHP, есть и в 4-ой версии.
Вот годная статья: XML и PHP, парсинг для чайников.
Siberian GRemlin,
Apr 8 2012, 12:13 Полезные ссылки
Command-Line Pack by Neill Corlett
Мне оттуда нужен был только unecm.exe, но обнаружил ещё пару интересных утилит, например:
fakecrc - подделывает CRC32 сумму у файла, изменяя 4 байта по указанному смещению (если не указано - меняет последние 4 в файле).
pecompat - неплохая утилита для быстрого переколбашивания новых PE-файлов, чтобы они работали в старых версиях Windows - см. комментарии на странице с программой (например, OS version и SubSystem version устанавливает в 4.0).
subfile - извлекает кусочек от файла, с нужного смещения - думаю, для форума Extractor.ru пригодилась бы.
vb2rip - потрошитель vb2 формата - Xplorer что-то такое для Resident Evil 3 писал, не знаю, насколько эта штука удобнее или лучше.
Siberian GRemlin,
Mar 24 2012, 11:58 Delphi, Asm, C, WinAPI, PHP, ...
Вот тут (за номером 7 самый простой, и ниже - до конца, уже сложнее) натыкался когда-то на генератор на PHP, который добавляет текст на изображение. Посмотри что да как, лишнее выкини. Все эти функции описаны в справке по PHP. Если я не ошибаюсь это расширение GD2 Lib, которое на современных серверах должно быть.
Если же у тебя вообще голый PHP без расширений, то можно самому сгенерировать и выводить .BMP файл, правда занимать он будет больше (впрочем, можно немного поприседать и сделать ч/б, чтобы меньше весил).
Siberian GRemlin,
Mar 7 2012, 20:37 Delphi, Asm, C, WinAPI, PHP, ...
QUOTE(-=CHE@TER=- @ Aug 10 2010, 14:27) [snapback]2959[/snapback]
Вчерась ковырял одну игрушку, где данные были упакованы deflate. Как и всегда использовал puff.c + puff.h из zlib. Внезапно, при распаковке, получаю ошибку записи в память по адресу 0, программа падает. <...>
Наконец-то обновили - забираем.
Siberian GRemlin,
Mar 5 2012, 18:43 Soldier of Fortune
Расскажу я вам смешную историю.

Я выдернул когда-то давно код декодирования .ADP из SoF, однако, он так чудовищно криво был написан, что за ним тянулось ещё куча дерьма. В итоге так я его собрать в FASM и не смог.

И вот, неделю назад, я ломал Disney's Hercules. Там в архиве нет имён - только хеши от них (кстати, так и не смог около 15 файлам имена найти, если кто-то найдёт - скажите, я на сайте обновлю).

Так вот, после распаковки там были .ESF файлы, которые являлись звуками. В Геркулесе весьма сочная и прикольная озвучка - решил её сконвертировать (некоторая, кстати, была портирована с PS, типа фразы о том, что нужен 'Memory Card', но их так и не вычистили). Отлаживался-отлаживался, пока не нашёл нужную функцию и дёрнул её. Она была небольшая и аккуратная - там ничего левого не вызывалось. Но, для декодирования процедурке нужны были два DWORD-массива. Я посмотрел их в .EXE, начал заполнять и тут... да, точно, я понял, что уже где-то это видел. И точно - в сорцах декодеровщика IMA ADPCM, который использовал ранее были оба этих массива (step и index) - 1 в 1. Ну тут, как вы поняли, я не выдержал и натравил сей алгоритм декодирования на .ADP... и оно правильно декодировалось!

Формат .ADP, кстати, если кому понадобится:
dword - sound Hz
BYTE[x] - сжатый поток
BYTE[20] - 20 байт какой-то херни в хвосте, которую нельзя декодировать - будет треск

Размер распакованного потока = размер_упаковонного*4 (т.к. в полбайта кодируется один семпл (16Bit), то в байт их влазит 2 по 2 -> 4).

Не помню где, но мне похожие файлы ещё где-то встречались (по сжатию - характерные данные).

Что касается самого сжатия - я пытался как-то перегнать в IMA ADPCM сжатый .WAV, но чего-то нехватает - похоже здесь какая-то вариация используется.

Хотя, я попробовал сжать разжатый поток в Adobe Audition и он в начале был похож на то что было в игре, правда сдвинуто на полбайта и обменяно местами. Вот так:

0F F1 23 45 67... - оригинальный поток

// сдвигаем на полбайта
FF 12 34 56 7x... - промежуточное преобразование, чтобы показать как это

// меняем полубайты местами
FF 21 43 65 x7... - сжатый в Adobe Audition

Однако, там тоже есть щелчки при декодировании, где-то каждые 512 байт, после которых сия схема снова слетает. В общем, если кто-то сможет это нормально конвертнуть, то можно будет даже не разжимать в PCM, а просто lossless пересобрать в .WAV с соответствующим кодеком в заголовке.

В общем, смотрите исходные коды на сайте. Да, .ADP декодируется в стерео, если есть оба l*.adp и r*.adp файлы.
jTommy,
Jan 14 2012, 15:11 Software patches
QUOTE(-=CHE@TER=- @ Jan 11 2012, 21:52) [snapback]3205[/snapback]
На Windows 7 она работает, но почему-то заваливается при попытке выбрать Рабочий стол в дереве каталогов слева - надо будет как-нибудь в отладчике поглядеть чего там происходит.

Как оказалось, Windows 7 тут не причём.

Делаем следующее:
1) Создаём текстовый файл и пишем туда:
CODE
[InternetShortcut]
URL=http://длинная строка - в моём случае там было 830 символов

2) Сохраняем файл как "test.url"
3) Щёлкаем в ACDSee 5 слева, в дереве каталогов, на каталог с этим файлом.
4) Программа падает.

Долбанный стыд просто - ну кто так программы-то пишет? Такое ощущение, что программа просто не справляется с длинной строки.

Чтобы она не падала, в sub_461A90 надо отключить обработку .LNK/.URL файлов - я просто первый символ заменил на ноль (маска для сравнения в lstrcmpi). Первое сообщение обновил.
Siberian GRemlin,
Jan 14 2012, 13:26 Delphi, Asm, C, WinAPI, PHP, ...
Писал я недавно патч для включения крови в German версии Turok 2. Решил, чтобы не маяться с CreateWindow(), сделать диалог в ресурсах. Взял из FASM пример EXAMPLES\DIALOG\DIALOG.ASM и переколбасил его под свои нужды. Всё работает, но странности начались, когда я решил навести последний штрих - добавить manifest для XP/Vista/7.
Программа стала сразу выходить после запуска. Офигев от такого безобразия начал отлаживать - выяснилось, что DialogBoxParam() сразу выходит даже не отображая окно. Убираем манифест - всё снова работает. Пошёл гуглить и натолкнулся вот на такую статью:
Особенность InitCommonControlsEx в Windows XP
(кстати, там на сайте и другие статьи интересные есть - их немного, так что пробегитесь по ним, кому интересно)
В общем, суть такова: чтобы программы с манифестом и DialogBoxParam() работали как надо, нужно чтобы в импорте была библиотека COMCTL32.DLL. Это можно сделать, вызвав, к примеру, InitCommonControls(). Я решил её не вызывать (толку-то всё равно не будет), а просто перепрыгнуть:
CODE
jmp @ICC
invoke InitCommonControls
@ICC:

Мне главное, чтобы в импорте COMCTL32.DLL была, а если ни одна функция оттуда не вызывается, то компилятор удаляет её из импорта.
Вот такая фигня.
Siberian GRemlin,
Dec 31 2011, 15:14 С наступающим Новым годом!
Продолжим хорошую традицию? (*улыбается*)

Всех с наступающим Новым Годом!
И хотя нам обещают какие-то катаклизмы и вообще конец света, думаю что всё это обойдётся.
Всем - всего в грядущем году. Чтобы задуманные вещи получались, а неприятности не случались.
С праздником всех!
Axsis, Siberian GRemlin,
Dec 18 2011, 23:10 TMNT2
Это не CRC16 и не ID файла - т.к. есть повторяющиеся значения (2090, 2355, 1638, 2031, 2915).

Зато заметил интересное - все файлы в архиве выравнены на границу в 65536 байт.
Т.е. файл состоит из заголовка 2048 байт ($800) + данные ($10000*N, N>=1).
Это видно, если собрать статистику по выложенному файлу:

Размер в архиве | Как считается | -> неизвестное_поле_min..неизвестное_поле_max
67584 | 2048 + 65536 -> 1059..1444
133120 | 2048 + 65536*2 -> 1504..2954
198656 | 2048 + 65536*3 -> 3020..4326
264192 | 2048 + 65536*4 -> 4774..5675

Т.е. файлы в выложенном архиве встречаются только размеров: 67584, 133120, 198656 и 264192.
Второй столбец - это как считается их размер. Отсюда видно, что следующий размер-выравнивание, будет предыдущий + 65536. Т.е. если файл занимает, к примеру, 67585 байт, то под него будет выделен блок в 133120 байт, потому что в 67584 он не влезет.

Т.е. реально файл в архиве выглядит так:
2048 байт - заголовок
XXXX - тело файла
сколько-то байт-нулей до границы, делящейся на 65536.

Опытным путём удалось выяснить, что в заголовке коэффициент для размера - 44.
Т.е. размер файла считается как (например):
(1504*44)+$800 = 68224
68224 больше 67584 (2048+65536*1) следовательно надо брать блок 133120 (2048+65536*2).
При коэффициенте менее 44 - файл укладывается в блок 67584, что, по условию (см. первую строку таблицы), нам не подходит.

Т.к. 2048 - это размер заголовка, то подозреваю, что даже файл в 1 байт будет занимать 67584 (2048+65536*1) байт, ибо наращивается всё кусками по 65536 байт.

CODE
# QucikBMS script for unpacking TMNT2 "voice2.bin"
ImpType Standard

Get HdrSize Long
Get FileCount Long

For I = 1 To FileCount
  Get FileOffs Long
  Get FileSize Long

  Math FileSize * 44
  Math FileSize + 2048
  Math RealSize = 2048
  Do
    Math RealSize + 65536
  While FileSize > RealSize

  String FileName p= "%08d" I
  Log FileName FileOffs RealSize FOO FSO
Next I
Siberian GRemlin,
Nov 11 2011, 20:39 Delphi, Asm, C, WinAPI, PHP, ...
Похоже долго ты на Java писал. (*улыбается*)

Нет, насколько я помню, Delphi хранит указатели на сложные типы данных и количество переменных ссылающихся на них. Как только количество = 0, то переменная уничтожается. Если же ты делаешь T:=S;, то у тебя в T не хранится строка S, а только указатель на неё. Реально память выделяется, если я правильно помню, только когда ты начинаешь изменять T, например: T:=T + 's';
Уже не помню, где об этом читал, где-то статья была, может даже здесь (на форуме) ссылку давали.
О, нашёл - там нет якорей, так что крути вниз до главы "Как же это происходит?".
Так это происходит или нет, судить не берусь, но, вроде бы, в этой главе походит на правду.
Siberian GRemlin,
Nov 11 2011, 15:15 Delphi, Asm, C, WinAPI, PHP, ...
У Delphi такой смешной оптимизатор (компилирую программу через DCC32HACK - там глюки и косяки сразу хорошо видно, т.к. программа маленькая и без мусора):

CODE
Const Chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';

Делает копию этой строки в каждом (!) месте программы где она используется.

Если же написать так:
CODE
Const Chars: String = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';

То только в первом - все остальные на неё ссылаются.

А вот так:
CODE
Const Chars: String[36] = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';

Вообще загоняет строку отдельно в секцию DATA.
Siberian GRemlin,

7 Страниц V « < 2 3 4 5 6 > » 
Упрощённая версия Сейчас: 29th March 2024 - 13:51