Паканем и зашифруем

Дубовцев Алексей

Xakep, номер #061, стр. 061-064-1

(mrorbit@mail.ru)

Паковщики и протекторы исполняемых файлов

Свершилось! Ты написал свою первою программу и сделал это при помощи Delphi или какой-нибудь другой визуальной среды разработки. Все прекрасно! Прога работает! Но размер?! Одно окошко с кнопкой ОК занимает 300 килобайт. Что же будет, если добавить две кнопки? Это никуда не годится. На помощь к тебе придут самые лучшие паковщики в мире - они уменьшат твою прогу до невероятных размеров.

Как работают паковщики

О существовании архиваторов ты наверняка слышал не раз и, скорее всего, уже успел ими попользоваться. Ведь именно эти чудо-программы сохраняют место на твоем харде, берегут трафик и сокращают время скачивания файла в Сети. В общем, понятно, что архиваторы полезная в хозяйстве вещь. Но сегодня мы будем говорить не о классических реализациях, вроде WinRAR и WinZIP, а об уменьшении размера исполняемых файлов (exe’шников). Кстати, уменьшение размера подобных файлов - очень актуальная проблема для многих разработчиков, кроме, конечно, программистов из Microsoft :).

Мне в свое время, для того чтобы сделать свои программы маленькими и шустрыми, пришлось научиться программировать на Asm’е, C, разбираться в структуре исполняемых файлов и сделать много других занимательных вещей. Тебе же, в отличие от меня, придется только понять устройство волшебных паковщиков!

Итак, паковщики – это специальный класс архиваторов, предназначенный для сжатия исполняемых файлов. В основе их работы лежит следующая идея: создается новый exe’шник, в который помещается оригинальный файл, но уже сильно упакованный. Вместе с ним добавляется код, умеющий извлекать и запускать исходник из архива. В отличие от привычных архиваторов, программа будет распаковываться не на хард, а в память компа и сразу же запускаться. Таким образом, твоя прога будет выглядеть как обычный exe’шник, но по действию будет напоминать матрешку, только работающую в обратном направлении.

Что же выбрать?

Паковщиков существует множество, и надо найти лучший из них. Я проводил оценку по следующим двум параметрам: скорость запуска приложения (она же скорость распаковки) и степень сжатия файла. На мой взгляд, лучшим по этим позициям является UPX.

Для того чтобы проверить все его возможности, мне пришлось создать маленькое приложение на Delphi – всего-навсего одну форму с кнопкой. При компиляции этого нехитрого творения у меня материализовалось 373 килобайта исполняемого файла. Это меня, естественно, не порадовало. Надо заметить, что на любимом С++ мне бы удалось добиться результата в пару килобайт. Поэтому было решено бороться с результатом Delphi. Для этого я натравил UPX на только что созданный файл, задал ему максимальную степень компрессии и посмотрел, что получилось. А получилось относительно неплохо: размер файла уменьшился более чем в два раза, и он стал весить 153 Кб. При этом он сохранил способность нормально запускаться и функционировать :).

Такой компрессии мне показалось мало, поэтому я начал экспериментировать с другими упаковщиками. Вот что попало в мои руки: 32Lite, ASPack, NeoLite 2.0, PeComact, PeCompress, PeCrypt, PePack, PkLite, Shrinker, WinLite, Telock. Как оказалось, всем им далеко до UPX – в лучшем случае сжатие достигало 161 Кб, что было на целых 8 килобайт больше, чем у лидера. Но самое интересное, что тот же монстр RAR сумел ужать исходный файл все до тех же 161 Кб. Это заставило меня задуматься – а можно ли получить еще лучший результат? После ковыряния в архиваторах и пробы различных вариантов мне удалось ужать файл еще на три кило. Этот результат дал мне все тот же RAR, но натравленный на упакованный UPX’ом файл.

Содержание  Вперед на стр. 061-064-2
загрузка...
Журнал Хакер #151Журнал Хакер #150Журнал Хакер #149Журнал Хакер #148Журнал Хакер #147Журнал Хакер #146Журнал Хакер #145Журнал Хакер #144Журнал Хакер #143Журнал Хакер #142Журнал Хакер #141Журнал Хакер #140Журнал Хакер #139Журнал Хакер #138Журнал Хакер #137Журнал Хакер #136Журнал Хакер #135Журнал Хакер #134Журнал Хакер #133Журнал Хакер #132Журнал Хакер #131Журнал Хакер #130Журнал Хакер #129Журнал Хакер #128Журнал Хакер #127Журнал Хакер #126Журнал Хакер #125Журнал Хакер #124Журнал Хакер #123Журнал Хакер #122Журнал Хакер #121Журнал Хакер #120Журнал Хакер #119Журнал Хакер #118Журнал Хакер #117Журнал Хакер #116Журнал Хакер #115Журнал Хакер #114Журнал Хакер #113Журнал Хакер #112Журнал Хакер #111Журнал Хакер #110Журнал Хакер #109Журнал Хакер #108Журнал Хакер #107Журнал Хакер #106Журнал Хакер #105Журнал Хакер #104Журнал Хакер #103Журнал Хакер #102Журнал Хакер #101Журнал Хакер #100Журнал Хакер #099Журнал Хакер #098Журнал Хакер #097Журнал Хакер #096Журнал Хакер #095Журнал Хакер #094Журнал Хакер #093Журнал Хакер #092Журнал Хакер #091Журнал Хакер #090Журнал Хакер #089Журнал Хакер #088Журнал Хакер #087Журнал Хакер #086Журнал Хакер #085Журнал Хакер #084Журнал Хакер #083Журнал Хакер #082Журнал Хакер #081Журнал Хакер #080Журнал Хакер #079Журнал Хакер #078Журнал Хакер #077Журнал Хакер #076Журнал Хакер #075Журнал Хакер #074Журнал Хакер #073Журнал Хакер #072Журнал Хакер #071Журнал Хакер #070Журнал Хакер #069Журнал Хакер #068Журнал Хакер #067Журнал Хакер #066Журнал Хакер #065Журнал Хакер #064Журнал Хакер #063Журнал Хакер #062Журнал Хакер #061Журнал Хакер #060Журнал Хакер #059Журнал Хакер #058Журнал Хакер #057Журнал Хакер #056Журнал Хакер #055Журнал Хакер #054Журнал Хакер #053Журнал Хакер #052Журнал Хакер #051Журнал Хакер #050Журнал Хакер #049Журнал Хакер #048Журнал Хакер #047Журнал Хакер #046Журнал Хакер #045Журнал Хакер #044Журнал Хакер #043Журнал Хакер #042Журнал Хакер #041Журнал Хакер #040Журнал Хакер #039Журнал Хакер #038Журнал Хакер #037Журнал Хакер #036Журнал Хакер #035Журнал Хакер #034Журнал Хакер #033Журнал Хакер #032Журнал Хакер #031Журнал Хакер #030Журнал Хакер #029Журнал Хакер #028Журнал Хакер #027Журнал Хакер #026Журнал Хакер #025Журнал Хакер #024Журнал Хакер #023Журнал Хакер #022Журнал Хакер #021Журнал Хакер #020Журнал Хакер #019Журнал Хакер #018Журнал Хакер #017Журнал Хакер #016Журнал Хакер #015Журнал Хакер #014Журнал Хакер #013Журнал Хакер #012Журнал Хакер #011Журнал Хакер #010Журнал Хакер #009Журнал Хакер #008Журнал Хакер #007Журнал Хакер #006Журнал Хакер #005Журнал Хакер #004Журнал Хакер #003Журнал Хакер #002Журнал Хакер #001