Le strutture
La struttura di un file .com
I files .com erano uno dei primi eseguibili, quindi sono anche quelli più semplici.Un programma con la struttura di un com file può essere caricato direttamente in memoria.Per questo i tempi di caricamento per files .com sono molto più brevi di quelli di un files .exe.La cosa importante da capire è che la grandezza di un com file non deve mai superare la grandezza di un "segment", cioè 64KB, altrimenti l'intero file non funzionerà.Di solito troverete che i com files partono all'offset 100h, ma potete usare tranquillamente anche ogni multiplo di 010h.Dopodichè un com file sarà eseguito, verrà creato sempre un PSP, il Program Segment Prefix, grande 256 bytes.Negli ultimi 128 bytes verrano salvati i parametri, precisamente all'offset 080h potete trovare il numero di caratteri usati per il "command line".Visto che programmare un virus per com files è più semplice, ovviamente ci sono un sacco di loro in giro.Anche se programmare un file .exe forse è un pochino più difficile, ritengo che sia molto importante che imparerete anche quello.E poi ovviamente potete combinare anche tutti e due metodi di infezione, cioè virus che infettino sia files .com, sia i files.exe
La struttura di un file .exe
Com files, come ora sapete, sono piùttosto piccoli e specialmente per programmi più grandi oggi viene usato il formato .exe.La cosa forse più importante è che i files .exe non vengono caricati subito in memoria come i com files.Ogni exe file possiede all'inizio del file un cosiddetto EXE Header, nel quale sono contenuti informazioni tipo da dove far partire il file, dove si trova lo stack ecc...Dopodichè troviamo la relocation table, con la quale il DOS modifica i segment pointers.Ogni relocation ha una grandezza di 4 bytes.Quando il DOS carica un exe, prima cercherà il primo segment libero e poi caricherà il PSP nello stesso segment.
Ora diamo uno sguardo all'EXE Header:
OFFSET FUNZIONE
00
.............................................................al 00h troviamo il byte d'identificazione, cioè "MZ"02
..............................................qui troviamo la grandezza del resto del Header04
..............................................04 invece indica la grandezza del file06
..............................................Il numero dei registrazioni nella relocation table08
............................................. grandezza dell'EXE Header in unità di 16 bytes0A
.............................................La memoria minima assegnata al file0C
.............................................La memoria massima assegnata al file0E
.............................................Qua troviamo l'inizio del stack segment10
..............................................L'inizio dello stack pointer12
............................................Qui troviamo il checksum, normalmente non usato14
.............................................Qua si trova l'IP (Instruction Pointer)16
.............................................L'inizio del code segment18
.............................................Offset che indica la relocation table1A
............................................ l'1Ah indica informazioni riguardanti l'overlay1C
............................................Riservato24
.............................................Identificazione OEM26
.............................................Informazioni riguardanti l'OEM28
.............................................Riservato3C
.............................................Indica il nuovo EXE Header