Писане на 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 нашата секция. Това е всичко. Сега, когато програмата започва
Управление ще получите код.
Сега, ние добавихме техния код във файл, ние се нуждаем от него да нещо
извършва. В най-простия случай, ние просто трябва да незабавно да прехвърли
програмата домакин. Това се осъществява чрез двойка
инструкции процесор.