Copy Link
Add to Bookmark
Report

Vana Imago 3 53

eZine's profile picture
Published in 
Vana Imago
 · 26 Apr 2019

  

Autore: cod
Origine: Sud Italia
Localit…: Prov. Vibo Valentia
Data: Sabato, 19 giugno 1999

Obiettivo: Scrittura di un virus da BOOT

Strumenti usati: Compilatore TASM 5.0
Reperibile presso www.crackstore.com oppure su
e-ViP CD Tools n. #1
Qualsiasi altro compilatore che supporti la modalit… MASM

Documentazione: Nessuna

E-mail: cod@gurlmail.com
ICQ: lasciare il vs numero in mail.... vi chiamer• io
IRC: Durante la settimana su irc.tin.it verso le 20.30, domenica esclusa
Canale #virus.it

Livello di difficolt…: MEDIO

Il BOOT SECTOR Š quella parte di un disco che ha il compito di caricare il
sistema operativo.

Fisicamente il BOOT RECORD ( da in poi con BR } si trova alla traccia
0, faccia 0, settore 1 di qualsiasi floppy disk. Sui dischi fissi invece a
queste coordinate abbiamo un settore chiamato MASTER BOOT RECORD { da ora
in poi MBR } dove risiede un piccolo programma dalla dimensione di circa
200 byte pi— una tabella contenente le varie partizioni del disco.
Fisicamente ogni settore di un disco (sia esso hard disk o floppy disk) ha
una dimensione di 512 byte. La principale differenza che distingue un MBR
da un BR consiste nel fatto che il BR si occupa di caricare il S.O. mentre
il compito dell'MBR Š quello di determinare la partizione attiva da cui
caricare il BR che a sua volta si occupa di caricare l'O.S.

La struttura standard di un BR Š la seguente:
OFFSET CONTENUTO DESCRIZIONE
000h NEAR JUMP - SHORT JUMP Contiene un salto all'istruzione 3Eh
003h OEM Nome del sistema operativo
; Blocco Parametri Bios
00Bh sectSIZE Dimensione settori
00Dh clustSIZE Dimensione cluster
00Eh resSECT Numero settori riservati dopo il BR
010h fatCNT Numero di FAT
011h rootSIZE Numero di voci memorizzabili nella ROOT
013h totalSECT Numero totali di settori
015h MEDIA Descrittore DOS
016h fatSIZE Numero settori x FAT
018h trackSECT Numero settori x traccia
01Ah headCNT Numero di faccie del supporto
01Ch hidenSECT Settori nascosti
020h hugeSECT Se totalSECT=0 qui viene memorizzato il
numero di settori del supporto
; Fine Blocco Parametri Bios
024h driveNUM Usato dal DOS ( 80h se disco d'avvio )
025h reserv Non usato
026h bootSIGN Settato a 29h - Extended boot signature (?)
027h volID Numero seriale Volume
02Bh volLABEL Nome assegnato al disco durante la procedura
di formattazione.
036h fsTYPE Identifica il file system adottato.
03Eh Boot loader
1FEh signature WORD x indicare che Š un settore valido.


La struttura standard di un MBR Š la seguente:
OFFSET CONTENUTO DESCRIZIONE
000h Inizio MBR Codice del loader, deve contenere anche
i vari messaggi di diagnostica.
1BEh Partizione 1 Inizia a: FACCIA - SETTORE - CILINDRO
( 1byte 1byte 2byte)
1C2h Partizione 1 Finisce a: FACCIA - SETTORE - CILINDRO
1C6h Partizione 1 Numero settore assoluto dove incomincia la
partizione per quei OS che usano il modo LBA
1CAh Partizione 1 Numero assoluto dei settori contenuti

; Tale struttura si replica x altre 3 volte, assumendo i dati della
; partizione 2, 3, 4
1FEh Marcatura BOOT Record Contiene i byte 55h, AAh
Se questi due byte non sono settati con
tali valori il BIOS non carica il disco.

Bisogna per• sapere che la prima partizione non ha inizio che nella traccia
0 faccia 1 quindi si pu• registrare qualsiasi cosa nei settori rimanenti
nella faccia 0, che in un moderno disco fisso possono arrivare anche ad
essere circa 32kbyte di spazio. Ecco dove risiedono programmi quali LILO,
System Commander e altre applicazioni che caricano OS diversi su un disco
fisso.

Ma lo scopo del nostro articolo non Š affatto questo, anche se vi dir•
che sapendo queste poche notizie gi… pubblicate in alto e un p• di fantasia
potreste creare un bel programmino di FDISK residente nell'MBR... forse in
un articolo futuro, quando si apriranno nuovi orizzonti, dato che non esiste
limite alla fantasia e tantomeno all'ingegno, e come dice il proverbio
"il bisogno aguzza l'ingegno" (o gi— per l non mi ricordo questo proverbio)

Ora passiamo sul fronte del BIOS:
Una volta che viene terminata la procedura di BOOT STRAP (tutti quei test)
viene lanciato l'INT19h questo legge dalla memoria CMOS (per questa memoria
ci vuole un'altro articolo, magari in VANA IMAGO #4 se Techno Knight decide
di pubblicarla ancora... prima dice che non ne pubblica pi—, ieri sera
invece ha chiesto di scrivere qualche articolo... vallo a capire) la
procedura di BOOT (solo sui BIOS dopo il 1993 fa questa operazioni, nei
vecchi BIOS il BOOT era standard) che solitamente Š Floppy A, Disco 1.
Stabilito il supporto da cui eseguire il BOOT viene caricato il primo setto_
re assoluto che nei dischi fissi Š l'MBR, mentre nei floppy Š il BR (spero
che non l'abbiate dimenticato).
Questo settore viene caricato all'offset assoluto di memoria 07C00h per•
bisogna notare che il registro CS Š settato a 0, quindi IP a 7C00h quando
sar… trasferito il controllo al BR. La prima delle pi— importanti operazioni
da fare se si vuol lavorare in modo decente Š quello di passare al segmento
07C0 con offset che punta all'istruzione successiva (pi— avanti capirete).
0000:7C00 e 07C0:0000 non sono altro che lo stesso byte, ma bisogna notare
che nel primo caso si deve tener conto del fatto che ad ogni indirizzo
bisogna addizionare la base fissa 7C00 mentre nel secondo no, pertanto
suggerisco il 2ø approcio, lo fanno tutti i virus e anche i normali BOOT
LOADER Ora lo scopo principale sarebbe quello di caricare il sistema operati
vo ma nessuno ci impedisce di piazzarci il nostro bel virus. La prima cosa
che il virus deve fare Š quello di assicurarsi un p• di memoria convenziona_
le pertanto l'unico metodo momentaneamente a disposizione Š quello di chiama
re l'INT12 che ci restituisce nel registro AX la quantit… in Kbyte di
memoria convenzionale esistente sul sistema (o disponibile se ci sta gi… il
virus). Normalmente otterremmo come risposta 639 (1kb se lo frega il bios!)
quindi noi decrementiamo questo valore a 638 o 637 (siate spilorci.. io lo
sono in questi termini) a secondo se il nostro virus Š per lo pi— complesso
o semplice... tutto dipende da voi e dalle vostre idee maliziose.
Abbiamo in AX 639, facciamo un bel DEC AX e otterremo 638, si ma soltanto
nel registro accumulatore, come facciamo a comunicarlo all'intero sistema
che da ora in poi c'Š TOTkbyte a disposizione?
All'offset 0000:0400h o al byte assoluto 0400h ha inizio la BIOS DATA AREA,
una locazione di memoria che nemmeno l'OS tocca dato che il cambiamento di
questa zona non porta altro che scompiglio. La cosa che per il momento ci
interessa sapere Š che a ridosso di questa tabella, precisamente aggiungendo
a 400h il valore 13h arriveremo ad una WORD che guarda un p• cosa contiene?
Un bel 630 (o qualsiasi altro valore che abbiate ottenuto) e noi non volendo
far del male a nessuno (io non sono di questo parere, e voi ?) memorizziamo
il nostro bel valore contenuto nell'accumulatore (o registro AX). Ora per
prima cosa dobbiamo trasferire il nostro codice in questa locazione di memo_
ria, pertanto bisogna ricavare il segmento dove trasferire il virus. Per
ricavare questo segmento potremmo moltiplicare il valore di AX * 1024 e
dividere il tutto per 16 (stiamo operando in modalit… reale, per chi non
lo avesse capito...) ma perchŠ fare quanto segue:

MOV CX, 1024
MUL CX
MOV CX, 16
DIV CX

dato che noi dobbiamo moltiplicare semplicemente per 64 (1024 / 16 = ???)
e la matematica ci insegna che il 64 Š un numero naturale divisibile per 2.
Avete qualche dubbio ? E ricorrendo alla matematica binaria il 64 Š un
multiplo di 2 ed svolgendo la seguente potenza 2^6 abbiamo di nuovo 64.
Ora potremmo ricavare il segmento che ci interessa semplicemente con una
sola istruzione:
SHL AX, 6

Cosa significa ? Be SHIFT LOGICAL LEFT ovvero far scivolare i BIT a sinistra
per 6 volte, e dovendo moltiplicare per 2 per 6 volte, questo fa a caso
nostro.

Trasferiamo il ns virus nel nuovo segmento:

PUSH AX
XOR AX, AX
MOV DI, AX
MOV SI, AX
PUSH CS
POP DS
POP ES
MOV CX, [dimensione del virus in byte, in word, in dword]
REP MOVS? (al posto di ? ci piazziamo B per byte, W per word, D per dword)
ricordando il simbolo da piazzare Š strettamente collegato a
come avete indicato la dimensione in CX, altrimenti rischiate
di copiare pochi o assai byte.

Facciamo un bel FAR JUMP alla prossima istruzione ed eccoci operare dal
segmento di nostra legittima propriet….

Prossimo obiettivo: Assicurarci l'esecuzione del virus.

E come facciamo ? Be, semplicemente ci prendiamo il puntatore FAR dell'INT13
e lo sostituiamo con un puntatore FAR al nostro INT13!
La tabella di interrupt Š situato all'inizio della memoria ed Š costituita
da un'insieme di 256 puntatori FAR. I puntatori FAR non sono altro che
indirizzi di memoria della lunghezza di 4byte, i quali contengono l'indiriz_
zo assoluto di un byte, ma in modalit… reale non contengono altro che il
seg:off del byte. Pertanto per leggere/modificare questo puntatore non dobbi
amo far altro che leggere i 4 byte compresi tra 004Ch e 004Fh. Il seguento
procedimento fa a caso nostro:

XOR AX, AX
PUSH AX
POP DS
MOV AX, WORD PTR DS:[004Ch] ; Ricava l'offset
; Lo copiamo dove ci pare
MOV AX, WORD PTR DS:[004Eh] ; Ricava il segment
; Lo copiamo dove ci pare

Per sovrascrivere il puntatore non dobbiamo far altro che
MOV AX, OFFSET myint13
MOV WORD PTR DS:[004Ch], AX
MOV WORD PTR DS:[004Eh], CS ; Be stiamo operando nello stesso segmento
; dove sta il virus e il nuovo int13!

Ora bisogna codificare l'int13h. Il vostro int13h, con le vostre idee,
con tutto quello che vi pare e piace.

Io vi leggo quanto ho scritto nella mia agenda:
>12 Gennaio 1999 Ore 4.50am
>Inizio a scrivere un nuovo virus da BOOT
>14 Gennaio 1999 Ore 6:00am
>Il nuovo INT13 intercetta le chiamate e controlla se le operazioni sono
>effettuate sul primo settore del disco.
>
>Beh il mio INT13 aveva qualche cosa che non funzionava, infatti lo
>continuai fino alla mattina 18 evitando di toccarlo giorno 17, in quanto
>c'era collegata una sorpresina al giorno 17 di ogni mese.
>18 Gennaio 1999 Ore 7:00am
>Qualcosa non va bene!!!
>18 Gennaio 1999 Ore 10:00am
>Sto scrivendo ancora il mio virus (ci sto lavorando dalle 5 del mattino,
>non sono davanti a un computer, bens davanti al prof. a scuola. Mentre
>spiega io sto scrivendo sul quaderno un INT13 che in teoria Š tutto
>esatto.

>Tornato a casa lo codifico, e il mio virus funziona!!!!
>Errore trovato in:
>Ogni qualvolta chiamavo il vecchio INT13 usavo la direttiva
>CALL FAR PTR CS:[Oldint13]
>ma l'offset nello stack era alterato.
>Piccolo errore: sto giocando con un INTERRUPT SOFTWARE, e termina con IRET
>Il che vuol dire che Š stato chiamato da un INT
>e l'INT oltre a salvare nello stack CS ed IP salva prima anche i FLAG il
>che significa che debbo salvarli prima di procedere con la CALL
>Metto davanti a tutte le FAR CALL un bel PUSHF ed ecco il gioco fatto.

Vi ho detto tutto questo soltanto per darvi un consiglio!
Se state lavorando a qualcosa Š non riuscite a venirne a capo, lasciate
stare per qualche p• di tempo, diciamo al massimo un giorno, e vedrete
che mentre siete intenti a fare chiss… cos'altro nel vostro piccolo
cervello si illuminer… una lampadina da 1000W che conterr… la soluzione
al vostro problema. Nel caso questa lampadina non si illuminasse, avete
un'altra soluzione piuttosto brutale per•... spaccarvi la testa al muro
e chiedere aiuto a qualcun'altro.

Ora, dopo aver trattato l'argomento dovremmo passare alla pratica....
Abbiamo 2 possibilit…:
1) Commentare un virus gi… esistente
2) Scriverne uno nuovo.

Immagino che tutti abbiate scelto il punto 2.

Ho a disposizione un virus da allegare a quest'articolo ma purtroppo non
Š commentato, non Š stato testato (funzionare funziona, necessita di qualche
ritocco al codice di qua e di la per la sezione pi— bella, la routine
play_load....), non passa le protezioni dei bios, e vorrebbe ritoccato in
qualche punto.
La logica vorrebbe che inserissi questo virus, lo commentassi e apporterei
le relative modifiche di cui ho parlato!
Ma purtroppo non voglio, quel virus tocca un periodo della mia vita che
desidero dimenticare per svariati problemi, quindi avrete l'onore
ed il piacere (se piacere sempre sar…) di testare il virus che mi accingo
a scrivere nelle ore successive, con qualche modifica che toccher… a voi
capire!

[Nota : Potete trovare il virus di cod in un file a parte, nell'articolo
successivo a questo]

Bene qui abbiamo finito, sono le 16.30 del pomeriggio, mi sono messo
alle 11.00... (se avessi passato cos tanto tempo)
Ho impiegato quasi 3 ore per scrivere questo articolo e quel specie
di virus che non so nemmeno se funziona. Cmq ci sta l'originale di cui
vi posso spedire in mail il codice sorgente. Decidete voi!

Ringrazio:
anto1 per avermi passato il RedHat 6 (fossi scemo a usare Windows, i virus
sono rivolti per quella piattaforma.)
Techno Knight perchŠ non ha niente di meglio da fare...
^wAr^DoG^ per avermi portato in questa brutta cosa...
LanDLorD per le sue idee pazze (ma poi l'hai chiamata a quella?)
Pasquale, per tutti i giorni che sono trascorsi passeggiando... ormai la
pacchia Š finita.
Quelli che mi sono dimenticato da cui escludo parenti e conoscenti vicini.

Ora siete arrivati alla fine Š giusto che mi presenti....
La scuola Š finita, non so se continuare nei giorni a venire....
Tutto sta da come si mette questa vita...
Spero di ricevere commenti, critiche (sul virus non rompete le palle!! dato
che l'ho scritto a caso e non so nemmeno se Š giusto, ho presupposto che
dovrebbe funzionare... il mio cervello non Š un compilatore/debugger/process
ore, quindi!).
Se vi interessa qualche altro argomento sono a Vs disposizione...
L'estate Š alle porte, gli esami pi— prossimi che mai!
INSOMMA VOGLIO DIRE
PER QUEL CHE MI RIGUARDA LA SCUOLA E' FINITA PER SEMPRE!!!!!!!!!!!!!!!!!!!!
TECHNO KNIGHT GIURO CHE SE TI VEDO TI TIRO IL COLLO! CI HA DATO UNA LIMITAZ
IONE DI 76 CARATTERI PER RIGA! CHE KAZZO DOVER TENER CONTO ANCHE DI STE COSE
ABBIAMO UNA MENTE... USIAMOLA

Saluto:
Tutti i miei compagni di classe che spero di non rivedere mai pi—
Tutti i miei professori mandandoli a quel paese
Coloro che mi conosco e che odio!

codõ

← previous
next →
loading
sending ...
New to Neperos ? Sign Up for free
download Neperos App from Google Play
install Neperos as PWA

Let's discover also

Recent Articles

Recent Comments

Neperos cookies
This website uses cookies to store your preferences and improve the service. Cookies authorization will allow me and / or my partners to process personal data such as browsing behaviour.

By pressing OK you agree to the Terms of Service and acknowledge the Privacy Policy

By pressing REJECT you will be able to continue to use Neperos (like read articles or write comments) but some important cookies will not be set. This may affect certain features and functions of the platform.
OK
REJECT