Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как узнать exe - это Zip SFX или нет? 
V
    Опции темы
Elfebet
Дата 25.7.2006, 09:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 545
Регистрация: 15.5.2006
Где: Украина. Запорожь е.

Репутация: 2
Всего: 14



делаю програмку для работы с zip архивами, и вот мне нужно как-то узнать екзешник это Zip SFX или нет. как это можно узнать? 


--------------------
Программист не должен всё знать... он должен знать где можно посмотреть
PM MAIL ICQ GTalk   Вверх
Sartorius
Дата 25.7.2006, 09:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1568
Регистрация: 18.7.2006
Где: Ivory tower

Репутация: нет
Всего: 37



 Так посмотри че у него внутри. Не верю, что бы разработчики не оставляли после себя какую-нить строковую константу. Типа "Copyright Lempel et al." ))) 
PM MAIL ICQ   Вверх
Romikgy
Дата 25.7.2006, 10:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 26
Всего: 146



C адресса 0х7800 имхо нормальный заголовок зипа , хотя могу и ошибатся, по крайней мере PK есть 100% smile 


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Snowy
Дата 25.7.2006, 10:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



SFX модули могут быть от разных производителей.
Определяется очень просто. В конце ZIP файла (любого и sfx и неsfx хоть мегаfx) есть ссылка на таблицу файлов.
Таблица файлов находится в конце зипа и также имеет ZIP хедер.
После хедера идет ссылка на его начало, и завершается зип двумя нулями.
Просто читаем DWORD, начиная с 6-го байта с конца файла.
Если значение корректное (т.е. меньше длины файла), читаем 4 байта оттуда.
Если в этик 4-х байтах 'PK'#01#02 - это ZIP. 
PM MAIL   Вверх
Alexeis
Дата 25.7.2006, 10:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



Да вопрос сложный! Я тут пытался удалять ресурсы из SFX, оказывается, что удаление любого из них, даже значка! просводит к тому, что WinRar перестает опозновать свой SFX. Так  что тут не все так просто, наверное зашифрована некоторая специальная контрольная сумма - опознователь. 


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Snowy
Дата 25.7.2006, 10:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



И даже ещё проще. Есть третий хедер - закрывающий.
Читаем его с 22-го байта с конца. Если по этому адресу лежит 'PK'#05#06 - это ZIP

Добавлено @ 10:21 
Цитата(alexeis1 @  25.7.2006,  10:17 Найти цитируемый пост)
Так  что тут не все так просто, наверное зашифрована некоторая специальная контрольная сумма - опознователь.
Нет, просто даны полные адреса внутри файла.
Если изменить его длину, а темболее выкинуть ресурс, то происходит смещение и данные уже лежат по другим адресам и не находятся.

Добавлено @ 10:23 
Вот. Беру первый попавшийся ZIP.
В конце прописан адрес на таблицу файлов $00060C0C
Если я захочу вставить в него значёк, то все данные сдвинутся и по адресу $00060C0C будет уже не PK хедер. Соответственно я не найду таблицу файлов -> архив повреждён

Добавлено @ 10:28 
Поправочка к предыдущему посту - закрывающий хедер не имеет фиксированной длины.
Так что просто читаем в стринг 32 последних байта и ищем в них pos('PK'#5#6, s)
Если нашли - это ZIP
Код

function IsZipFile(FileName: string): boolean;
var
  fs: TFileStream;
  s:   string[32];
begin
  try
    fs := TFileStream.Create(FileName, fmOperRead and fmShareDenyNone);
    fs.Read(s[1], 32);
    fs.Free;
  except end;
  result := pos('PK'#5#6, s) > 0;
end;


Добавлено @ 10:33 
Ээээ... Сорри.
Код писал в браузере - не работает.
Вот отладил, проверил:
Код
function IsZipFile(FileName: string): boolean;
var
  fs: TFileStream;
  s:   string;
begin
  try
    fs := TFileStream.Create(FileName, fmOpenRead and fmShareDenyNone);
    fs.Position := fs.Size - 32;
    SetLength(s, 32); fs.Read(s[1], 32);
    fs.Free;
  except end;
  result := pos('PK'#5#6, s) > 0;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  if IsZipFile('C:\111.exe') then ShowMessage('Это Zip')
  else ShowMessage('Нифига не ZIP');
end;
 
PM MAIL   Вверх
Elfebet
Дата 25.7.2006, 10:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 545
Регистрация: 15.5.2006
Где: Украина. Запорожь е.

Репутация: 2
Всего: 14



Snowy, большое тебе человеческое спасибо! Поднял бы тебе репутацию, но пока мой статус этого не позволяет. smile  


--------------------
Программист не должен всё знать... он должен знать где можно посмотреть
PM MAIL ICQ GTalk   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0541 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.