Статья: Процесс урезания EXE файлов, написанных на VB, для чайников.
Начну с вступления. Зачем вообще сжимать exe-шники? Причин несколько. Для некоторых пользователей просто привлекательней маленький размер программы, другим выгодней качать с Интернета, особенно тем кто через GPRS (как раз я токовым и являюсь). Для вирусмейкеров, это вообще камень преткновения, также как и для демомейкеров (в соответствующей категории, 4к,64к,512в и тому подобных). Но упаковка исполняемых файлов не как не связана с экономиям дискового пространства, потому что это бред. Как приводился, на одном форуме, пример: если HDD на 160Gb то ужав файл на 160b, можно сэкономить 0,00….01% места на винте..
Варианты упаковки.
1. Скачать программу сжатия PE файлов, и воспользоваться ей.
Если Вы, ни разу не пользовались такими программами, то скорей всего зададите вопрос: А какую выбрать? И на этот вопрос ни кто Вам однозначно не ответит. Так что я отвечу многозначно. Во-первых, определитесь для чего вы хотите сжать файл.
-Если Вы хотите защитить программу от взлома, то либо найдите пакер к которому нет распаковщика (этот подход защитит, разве что от любопытных пользователей, которые любят в ресурсах копаться), на сколько я знаю к MEW вроде нет, либо воспользуйтесь протектором, это проги специально заточенные под это.
-Если просто сжать (не максимально), так просто, чтоб красиво выглядела, то воспользуйтесь UPX последней версией (бесплатная, удобная софтинка).
-Если сжать максимально (в EXE формат), то я посоветую либо MEW, либо WinUpack, у обоих есть графические оболочки, что в свою очередь очень упрощает работу с ними. Также есть Upack Optimizer (UPO), это оптимизатор для WinUpack, он перебирает настройки пакера, и выдаёт, при каких настройках он сжимает максимально (для каждого файла эти настройки разные). Так что я посоветую такой алгоритм действий: Пихаем нужный exe-шник в UPO, смотрим какой размер минимальный (запоминаем
, затем сжимаем утилитой MEW, сравниваем, и пакуем тем, что лучше. (Примечание: если в MEW убрать галочку с чека “Win9x combatibility”, можно сэкономить пару байт)
-Если Вы хотите минимизировать ваш EXE максимально-максимально, и вы боритесь за каждый байт, и вам всё ровно в каком он формате, ли ж бы запускался двойным щелчком, и когда кажется что вы уже сжали его как только можно, Вы скидываете ещё один байт, и рады... То идущий ниже текст для вас.
2. Здесь пойдет речь о минимизации программы, написанной на VB.
Как все знают, в Basic-е не обязательно объявлять переменные, при компиляции они автоматически назначаются Variant, и занимают 8 байт (если не ошибаюсь), чтобы сделать объявление переменных обязательным напишите в верху кода “ Option Explicit ”.
Объявляйте переменные такими типами которые нужны. Например, если i в ходе программы меняется от 13 до 666 (целочисленно) то не стоит обзывать его Long-ом.
Дробные константы следует писать со знаком «!» в конце. x * 0.5 -> x * 0.5!
Это фундаментальные методы уменьшения программного кода. Так же оптимизируйте алгоритмы используемые Вами.
Компилируйте в P-Code.
Теперь когда готов exe-шник, пихаем его в Resource Hacker (или любую подобную программу), удаляем все ресурсы, и сохраняем. Затем обрабатываем его утилитой PE Optimizer (либо другой утилитой, которая вырезает релоки).
А теперь начинается самое интересное, работа топором
. Открываем WinHEX (в общем шеснадцетиричный редактор) Кидаем туда наш файлик, и поехали…
Если длинна DOS заголовок (это то что находиться между началом файла и символами “PE”) больше 59 байт то, начатая с 3 байта и до “PE”, исключая 59 байт, забиваем нулями (не символами «0», а нулевыми байтами), не трогаем “MZ”, 59 байт и “PE” (отсчёт байтов начинается с одного)
“.text”, ”.data”, “.rsrc” – тоже затираем нулями. Ищем строку где будет указан путь к папки с VB, тоже нулями. Находим имена: форм, проекта, модулей, всё в нули.
А теперь если вам дорог каждый байт, то наступает творческая работа… Забиваем какой ни, будь участок нулями, сохраняем, запускаем, закрываем – нет ошибок? – продолжаем. Есть ошибка – отменяем. И так долго и упорно, а главное долго… Вот чего стоит борьба за каждый байт…
Теперь когда Вы, либо мягко говоря устали, либо удалили всё что можно, качаем прогу Dropper v 2.0. Открываем cmd, переходим в папку с dropper-ом , и пишем “dropper /b2 имя exe-шника.exe”. В папки с dropper-ом появиться файл out.bat, запускаем.. работает? Радуемся. Если не работает или не появился вовсе, то идём более сложным путём. Переименовываем наш exe просто в ‘x’. В cmd пишем “makecab x”, (makecab, слово то такое, на слуху:) .В папке появиться новый файлик, меняем его имя на бла-бла.bat, кидаем в WinHEX, дописываем в конце такие hex значения: “0D 0A 0A 65 78 70 61 6E 64 20 25 30 20 2E 78 0A 2E 78 0A 64 65 6C 2E 78”. Сохраняем,… радуемся
P.S. Я не утверждаю что приведенный мною способ является лучшем, или вообще целесообразным, но как пишут во многих бесплатных программах: “Не нравиться, не пользуйтесь.” Так же я не утверждаю что приведенные мною программы, являются лучшими.
P.P.S. Это моя первая статья, так что было бы интересно услышать ваше мнение о ней.
|( () ( T |/| |( 2007.