Дворник для PE-файлов
АрхивДостиженияПрограмма PE Corrector поможет вам не только избавиться от ошибок, но и произвести еще некоторые полезные изменения внутри вашего PE файла
Большинство разработчиков никогда не обращают внимание на внутреннее устройство своих свежеоткомпилированных проектов. Я знаю. Я сам раньше не обращал на них внимания. Но однажды я заглянул внутрь EXE файла одной из моих программ и, честно говоря, ужаснулся. Сразу же после всем известной фразы <This program must be run under Win32> и названий секций находился кусок исходного кода на Паскале одного из модулей моей программы. Это было примерно около 30 строк текста с объявлением переменных, используемых в этом модуле. Конечно, мне, как разработчику, было не приятно, что часть моих исходных текстов каким-то образом оказалась вставлена в EXE файл. Ведь туда может оказаться внедренным кусок кода алгоритмов защиты, например! Хороший подарок для крекера! Сама же программа при этом превосходно работала.
Я решил провести дальнейшие исследования этой программы. И вот что обнаружилось. Первым делом я наткнулся на то, что программа почему-то перестает работать после обработки упаковщиком исполняемых файлов (UPX). Это явно указывало на то, что с моей программой что-то не в порядке на внутреннем уровне.
Я произвел поиск в интернете и нашел несколько упоминаний об аналогичных проблемах у других разработчиков. В некоторых конференциях и ньюс-группах обсуждалось появление странного мусора внутри заголовков откомпилированных файлов. Там же я нашел упоминания о лишних экспортируемых функциях, которые можно обнаружить внутри некоторых EXE-файлов. Я решил проверить свою программу на наличие экспортируемых функций. И я ужаснулся второй раз! Моя программа содержала около 200 экспортируемых функций, хотя не должна была содержать ни одной. Более того, среди этих функций находились функции проверки регистрационного кода к программе! Великолепная возможность для крекеров!
После этого я понял, что надо провести комплексное исследование нескольких программ. Это могло бы помочь в определении закономерностей появления таких ошибок и указать путь борьбы с ними. В итоге я выяснил несколько достаточно интересных вещей. Оказалось, что мусор в заголовках PE файлов появляется тогда, когда компилятор не очищает память перед компиляцией. Мусор может содержать как просто случайный набор байт, так и осмысленные куски файлов с диска. Мусор появляется в основном при компиляции проектов на C++ Builder.
Некоторые компиляторы при компиляции вставляют в файл ненужные экспортируемые функции. Часть таких функций требуется при отладке, но совершенно не нужна при работе программы. Типичным примером такой функции является __CPPDebugHook, которая вставляется компиляторами C++ Builder в любой проект. Если же в программе используются компоненты VCL сторонних разработчиков, или просто модули, написанные на Паскале, то количество экспортируемых функций в программе возрастает очень быстро. Я встречал программы достаточно известных разработчиков, которые содержали более 6000 экспортируемых функций.
Почему это плохо? Список экспортируемых функций может содержать функции, которые предназначаются только для внутреннего использования (например, функции шифрования и проверок паролей). Большое количество экспортируемых функций плохо обрабатывается многими упаковщиками исполняемых файлов. Именно поэтому переставала работать моя программа после упаковки с помощью UPX. Список экспортируемых занимает достаточно большое место внутри вашего EXE-файла. Например, около 6000 функций занимают примерно 600 КБ.
В числе прочих, я проводил такой опыт. Взял программу, в которой было около 6500 экспортируемых функций. Ее объем составлял 4,3 МБ. После удаления всех экспортируемых функций размер файла сразу уменьшился до 3,7 МБ. Затем я использовал UPX. В итоге удалось уменьшить размер программы до 900 КБ. Это почти в 5 раз меньше, чем было изначально! А ведь это влечет за собой уменьшение инсталляционного пакета и дает возможность поместить в него, например, больше документации и обучающих демо-роликов.
Думаю, что теперь стала ясна целесообразность изучения своих собственных программ после компиляции. Конечно, вручную все выше указанные ошибки поправить достаточно сложно. Поэтому нами был разработан специальный продукт, который поможет вам не только избавиться от ошибок, но и произвести еще некоторые полезные изменения внутри вашего PE файла.
Эта программа называется PE Corrector. Она позволяет:
1) Просто и удобно корректировать PE файлы (exe, dll, drv, sys, bpl, dpl, cpl, ocx, acm, ax, scr)
2) Очищать от бинарного мусора заголовки PE файлов
3) Вставлять в заголовок файла информацию об авторских правах
4) Предоставляет возможность стирания имён секций (.rsrc, .reloc, .pdata...)
5) Удалять таблицы настройки адресов (relocations table), которая была зарезервирована Microsоft, но не используется в exe-файлах
6) Дает возможность просматривать список экспортируемых функций
7) Удалять объявления функций из секции экспорта
8) Обрабатывать PE файлы в полуавтоматическом режиме с помощью параметров командной строки
9) Также программа имеет развернутый файл помощи, который позволит легко и быстро освоить возможности программы
Более подробную информацию вы можете получить на сайте разработчика. Помните: возможно, именно ваш продукт нуждается в коррекции.