Полный мануал по созданию компактного кода

Xakep, номер #037, стр. 037-073-4


Сжатый файл сразу перезаписывает существующий, а старая несжатая версия сохраняется на всякий случай под тем же именем, только с расширением bak.

Настроек у проги не так уж много, и с ними ты сможешь разобраться без меня. Уж лучше я расскажу тебе, как все работает.

Aspack под ножом патологоанатома

Давай разберемся, как работает сжатие. Сначала весь код программы сжимается архиватором. Если ты думаешь, что он какой-то навороченный, то сильно ошибаешься. Для сжатия используется простой архиватор типа WinZIP, только оптимизированный для сжатия байт-кода.

После этого в конец сжатого кода добавляется код разархиватора, который будет все это дело разжимать обратно. И в самом конце ASPack изменяет заголовок запускного файла так, чтобы при старте сначала запускался разархиватор.

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

Некоторые умники сейчас ляпнут, что из-за расходов на распаковку программа будет работать медленней!!! Я бы не сказал, что ты это заметишь. Даже если и возникнут какие-то потери, то они будут неощутимы. Это потому, что архивация хорошо оптимизирована под байт-код. К тому же, размер проги уменьшится, а значит она загрузится в память намного быстрее. В результате потери на скорости неощутимы даже с секундомером.

Archiving complete

Конечно же, кодинг на WinAPI слишком сложный, но программы получаются очень маленького размера, и никакой архиватор не сможет сжать байт-код до такой степени. А если еще и сжать прогу, написанную на WinAPI, то ее размеры будут меньше некуда.

При нормальном кодинге с использованием всех навороченных фишек типа визуальности и объектности код получается большим, но его можно сжать на 60-70% спецархиватором. К тому же такой код писать намного легче и быстрее.

В любом случае архивирование - необходимая любому хакеру фишка. Сжатый код труднее взломать, потому что не каждый disassembler сможет прочитать упакованные команды. Так что, помимо уменьшения размера, ты получаешь защиту, способную отпугнуть большинство крякеров. Конечно же, профи не отпугнешь даже большим Билом :), но крякер средней паршивости не будет мучиться со сжатым байт-кодом.

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

Назад на стр. 037-073-3  Содержание