Писане на kriptor Делфи (източник kriptora)

В тази статия ще даде пример за един прост изпълнител на протектора
файлове. По време на задействане на изходния код ще произведе
необходимите обяснения.

Така че, теорията и необходимите условия

Нека започнем с разбор формат изпълними файлове PortableExecutable (PE). Какво този формат е всичко.

файловата структура е както следва:

Той съдържа стар DOS-глава + DOS-програма

Той съдържа необходимата информация за PE-файл

Съдържа необходимата информация за секциите във файла

Той съдържа само себе си, кода на информация, ресурси и други.

Всички данни, възложени на края на PE-файл (не могат да присъстват)

Няма нищо сложно тук. DOS-шапка - това е само DOS
програма, която обикновено се показва съобщение, като например: «Тази програма трябва да бъде
работи под Win32 »или нещо подобно и се затваря.

PE-заглавна съдържа лична информация в процеса на писане на много пъти ние ще го използвате.

Заглавията на разделите в програмния файл съдържа информация за това къде съответно съответстващо секция.

раздел Сами е части от код, данни, ресурси, информационно обслужване,
като: маса внос / износ, премествания, информация за отстраняване на грешки и
и др.

Overlay всичко това е, че след края на PE-файла. Подложките често
няма редовни файлове, но почти винаги в SFX архиви и
дистрибуции.

Мисля, че всичко е ясно, следователно, се пристъпва към по-подробен
Изследване на PE-заглавна формат и секции. В PE-заглавката ще обясни само
тези полета, които се нуждаем.

За да намерите в началото на файла, PE-заглавна трябва да се чете от файл
DWORD стойност при офсетов $ 3C. Там се съхранява компенсира от началото
подава пред PE-заглавната си част.

Задължителните полета PE-колекторни:

раздел битови флагове

Налице е също така не е голяма работа. След като всички заглавията, подравняване
сгънете File приведе себе си отиват директно в съответния раздел от изпълнимия файл.
Ако не се разбере какво е написано по-горе, или искате повече информация
разгледа формата на PE, аз препоръчвам да прочетете документацията, например,
"PortableExecutables изпълним файл с формат» от Hard мъдрост.

Е, сега ние започнете да пишете директно на нашия протектора.

За да започнете да входния файл, трябва да се провери дали е изпълним,
а дори и във формата, PE. Тези, които са чели внимателно вече е написано по-горе
може да се досетите, че трябва да се вземат.

Първо проверете дали първата дума (дума), файлови = 'ZM "($ 5A4D), ако не е, това не е на всяка програма.

На второ място, думата от смяна на $ 18 трябва да бъде> = 40 $, ако и само ако DWORD поле при офсетов $ 3C има смисъл.

След това проверете подписа в PE-заглавката, която трябва да бъде равна на $ 00004550.

Ако са изпълнени всички тези условия след това по принцип можем да се опитаме да се справят с файла.

За удобство, ние ще създадем прототип на функцията, която ще се занимава с файла.

szFileName - път до файла, dwFlags - допълнителни параметри. След това, само за да се провери валидността на файла

Така че, ние сме в състояние да провери файла за валидност. Сега можете да започнете
директно написването на протектора код. Но първо, малко отново
теория.

Protector - е програма, която означава, че тя трябва да съдържа изпълним код.
Ето защо ние трябва да добавите този код към предварително компилиран файл.
Както е добре известно в кода на PE-файл се съхранява в раздела (въпреки че не е
задължително код, например, може да се съхранява в заглавието). За това ние
просто трябва едно от следните неща: да добавите код за последната част
файл или създаване на нов раздел. Първият вариант е по-лесно, а ние сме най-лесния начин
не гледам, така че ние да избере второто.

За да добавите точка към следните стъпки, за да се изпълни файла:

1) увеличаване на стойността на полето глава NumOfObjects PE-1.

2) е прикрепена към края на последния заглавната секция е друг заглавието на този раздел

3)
Задайте атрибутите на нашата секция така: VirtualSize = PhysicalSize =
4096 (тази стойност, тъй като ние нямаме нищо
приведе в съответствие, като Това поле е изравняване кратна стойност и 4 килобайта
нашият код ще бъде достатъчно). PhysicalOffset = PhysicalOffset последно
раздел + PhysicalSize последния раздел. VirtualAddress = VirtualAddress
последната част + VirtualSize последния раздел, а след това тази стойност
трябва да инсталирате множество SectionAlignment към по-голяма стойност.
Атрибути раздел е най-добре да се създаде чете и пише, например, са -
$ E0000040. Други области чукане нули. Името на секция да зададете
всеки.

4) Добавяне на самия край на частта до файла. Размерът му вече предварително определен и е PhysicalSize

5)
Необходимо е да се коригира стойността на поле PE-заглавна SizeOfImage и увеличението на
размера си до размера на виртуалното подравнен нашия нов раздел.

След всичко това, нов раздел ще се появи във файла на програмата, в нашата
случай, равна на размера на една страница в паметта. Остава последният
въпрос как ни код, за да поеме контрол. за да направите това,
Зададохме на стойността на поле PE-заглавна равен EntryPoint
VirtualAddress нашата секция. Това е всичко. Сега, когато програмата започва
Управление ще получите код.

Сега, ние добавихме техния код във файл, ние се нуждаем от него да нещо
извършва. В най-простия случай, ние просто трябва да незабавно да прехвърли
програмата домакин. Това се осъществява чрез двойка
инструкции процесор.