Írás kriptor delphi (forrás kriptora)

Ebben a cikkben fogok példát ad egy egyszerű futtatható futófelület
fájlokat. Működése során forráskód fog termelni
szükséges magyarázatokkal.

Tehát, az elmélet és a szükséges feltételek

Kezdjük elemzési méret futtatható fájlokat PortableExecutable (PE). Mi ez a formátum az egész.

A fájl szerkezete a következő:

Ez egy régi DOS-header + DOS programot

Ez tartalmazza a szükséges információkat a PE-fájl

Tartalmazza a szükséges információkat a szakaszok a fájl

Ez tartalmazza csak maga a kód, információk, erőforrások, és mások.

Bármilyen rendelt adatok a végén a PE-fájl (nem lehet jelen)

Nincs semmi bonyolult itt. DOS-cap - ez csak a DOS
program, amely általában egy üzenetet jelenít meg, mint például: «Ez a program kell
fut Win32 alatt »vagy valami ilyesmi, és kilép.

PE-header tulajdonosi információt tartalmaz az írás folyamata sokszor fogjuk használni.

Fejezetei szakaszok a program tartalmaz információt, ahol rendre a megfelelő részben.

Sami szakasz darab kód, az adatok erőforrások, a szolgáltatási információt,
mint például: táblázat import / export, áthelyezések, hibakeresési információkat és
et al.

Overlay mindez, hogy vége után a PE-fájlt. átfedések gyakran
nem szabályos fájlokat, de szinte mindig az SFX-archívumokat és
eloszlás.

Azt hiszem, minden világos tehát, megyünk tovább, részletesebb
Tanulmány a PE-élőfejformátumot és szakaszok. A PE-header fogom elmagyarázni csak
Azokon a területeken, hogy szükségünk van.

Ahhoz, hogy megtalálja az elején a PE-header fájlt kell olvasni egy fájlt
DWORD érték offset $ 3C. Van tárolva ellensúlyozza az elejétől
fájlt, mielőtt a PE-fejlécet.

Kötelező mezők PE-fejléc:

bit zászlók rész

Van is nem nagy ügy. Miután minden fejlécet, igazítás
szeres Fájl igazodnak közvetlenül a részben a futtatható fájlt.
Ha nem érti, mi van írva a fenti, vagy szeretne további részletek
megvizsgálja a formátum PE, azt ajánlom, hogy olvassa el a dokumentációt, például
„Végrehajtható fájl formátum PortableExecutables» Hard Bölcsesség.

Nos, most már kezdjük el írni a közvetlenül a futófelület.

Ahhoz, hogy indítsa el a bemeneti fájl, azt kell ellenőrizni, hogy ez végrehajtható,
és még a PE formátumban. Azok, akik olvassák el már meg van írva a fenti
lehet kitalálni, hogy mi kell.

Először ellenőrizze, hogy az első szó (WORD), file = 'ZM' ($ 5A4D), ha nem, ez nem minden programot.

Másodszor, a szó a műszak 18 $ legyen> = 40 $, akkor és csak akkor, ha a mező DWORD eltolással $ 3C értelme.

Ezután ellenőrizze az aláírást a PE-fejléc, mely egyenlő a $ 00.004.550.

Ha mindezek a feltételek teljesülnek, akkor elvileg meg lehet próbálni kezelni a fájlt.

A kényelem, akkor hozzon létre egy prototípus a funkció, amely kezeli a fájlt.

szFileName - a fájl elérési útját, dwFlags - további paramétereket. Akkor, csak hogy ellenőrizze az érvényességét a fájl

Így képesek vagyunk, hogy ellenőrizze a fájl valódiságát. Most már elkezdhetjük
közvetlenül írásban futófelület kódot. De először egy kicsit újra
elmélet.

Protector - olyan program, amely azt jelenti, hogy tartalmaznia kell végrehajtható kódot.
Ezért kell hozzá ezt a kódot az előre lefordított fájlt.
Mint az közismert, a PE-fájl kódját tárolja a szakasz (bár ez nem
kötelező kód, például, tárolható a fejlécben). Ehhez
Csak azt kell az alábbi: kódot megadni az utolsó szakasz
fájlba, vagy hozzon létre egy új rész. Az első lehetőség könnyebb, és mi vagyunk a könnyű út
nem keres, ezért úgy döntünk, a második.

Ahhoz, hogy hozzá egy szakaszt az alábbi lépéseket végrehajtja a fájlt:

1) Az érték növelésével a mező fejléc NumOfObjects PE-1.

2) van csatolva, a végén az utolsó szekció fejléc egy másik szakasz címe

3)
Állítsa be az attribútumokat a mi oldalunkon, így: VirtualSize = PhysicalSize =
4096 (ez az érték, mert nem kell semmit
összehangolása, a Ez a mező egy több érték kiegyenlítés, és 4 kilobájt
kódunk elég lenne). PhysicalOffset = PhysicalOffset utolsó
rész + PhysicalSize utolsó rész. VirtualAddress = VirtualAddress
Az utolsó rész + VirtualSize utolsó rész, akkor ez az érték
telepítenie kell a többszörös SectionAlignment nagyobb értékre.
Tulajdonságok részen a legjobb, ha írni és olvasni, például olyan -
$ E0000040. Más területeken kalapálni nullák. A név rész lehet rendelni
minden.

4) hozzáfűzése a legvégén a szakasz a fájlt. Mérete már előre, és ez PhysicalSize

5)
Meg kell kijavítani a mező értéke PE-header SizeOfImage és növekedés
a méretét, hogy a méret a virtuális rendezi az új részt.

Mindezek után, egy új szakasz jelenik meg a program fájl, a mi
esetben megegyezik a mérete az egyik oldalt a memóriába. Továbbra is az utolsó
kérdés, hogyan kódunk hogy átvegye az irányítást. Ehhez
Mi az értéket a PE fejlécmezőjének egyenlő BelépésiPont
VirtualAddress mi oldalunkon. Ez minden. Most, amikor a program elindul
Management megkapja a kódot.

Most, hogy van hozzá a kódot egy fájlba, szükségünk van rá, hogy valami
végezni. A legegyszerűbb esetben, kéne azonnal át
host program. Ezt úgy valósítjuk meg egy pár
processzor utasításokat.