![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| Elfebet |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 545 Регистрация: 15.5.2006 Где: Украина. Запорожь е. Репутация: 2 Всего: 14 |
делаю програмку для работы с zip архивами, и вот мне нужно как-то узнать екзешник это Zip SFX или нет. как это можно узнать?
-------------------- Программист не должен всё знать... он должен знать где можно посмотреть |
|||
|
||||
| Sartorius |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1568 Регистрация: 18.7.2006 Где: Ivory tower Репутация: нет Всего: 37 |
Так посмотри че у него внутри. Не верю, что бы разработчики не оставляли после себя какую-нить строковую константу. Типа "Copyright Lempel et al." )))
|
|||
|
||||
| Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 26 Всего: 146 |
C адресса 0х7800 имхо нормальный заголовок зипа , хотя могу и ошибатся, по крайней мере PK есть 100%
-------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. |
|||
|
||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 192 Всего: 484 |
SFX модули могут быть от разных производителей.
Определяется очень просто. В конце ZIP файла (любого и sfx и неsfx хоть мегаfx) есть ссылка на таблицу файлов. Таблица файлов находится в конце зипа и также имеет ZIP хедер. После хедера идет ссылка на его начало, и завершается зип двумя нулями. Просто читаем DWORD, начиная с 6-го байта с конца файла. Если значение корректное (т.е. меньше длины файла), читаем 4 байта оттуда. Если в этик 4-х байтах 'PK'#01#02 - это ZIP. |
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 109 Всего: 459 |
Да вопрос сложный! Я тут пытался удалять ресурсы из SFX, оказывается, что удаление любого из них, даже значка! просводит к тому, что WinRar перестает опозновать свой SFX. Так что тут не все так просто, наверное зашифрована некоторая специальная контрольная сумма - опознователь.
-------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| Snowy |
|
||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 192 Всего: 484 |
И даже ещё проще. Есть третий хедер - закрывающий.
Читаем его с 22-го байта с конца. Если по этому адресу лежит 'PK'#05#06 - это ZIP Добавлено @ 10:21
Если изменить его длину, а темболее выкинуть ресурс, то происходит смещение и данные уже лежат по другим адресам и не находятся. Добавлено @ 10:23 Вот. Беру первый попавшийся ZIP. В конце прописан адрес на таблицу файлов $00060C0C Если я захочу вставить в него значёк, то все данные сдвинутся и по адресу $00060C0C будет уже не PK хедер. Соответственно я не найду таблицу файлов -> архив повреждён Добавлено @ 10:28 Поправочка к предыдущему посту - закрывающий хедер не имеет фиксированной длины. Так что просто читаем в стринг 32 последних байта и ищем в них pos('PK'#5#6, s) Если нашли - это ZIP
Добавлено @ 10:33 Ээээ... Сорри. Код писал в браузере - не работает. Вот отладил, проверил:
|
||||||
|
|||||||
| Elfebet |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 545 Регистрация: 15.5.2006 Где: Украина. Запорожь е. Репутация: 2 Всего: 14 |
Snowy, большое тебе человеческое спасибо! Поднял бы тебе репутацию, но пока мой статус этого не позволяет.
-------------------- Программист не должен всё знать... он должен знать где можно посмотреть |
|||
|
||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |