Copy Link
Add to Bookmark
Report

Vana Imago 2 31

eZine's profile picture
Published in 
Vana Imago
 · 5 years ago

  

       Techno Knight presenta....                                                                                                                                                 ***************************************                                           COME CREARE UN VIRUS PER WINDOWS 9x                                                  Le domande + domandate                                                   ***************************************                                                  di Techno Knight                                                                                                                                                                                                    Suppongo (diciamo pure _SPERO_) che tra voi ci sia molta gente che sta          cominciando a programmare virus, e probabilmente non capir… come fare           a creare un virus per Windows 9x.                                               Bene, cioŠ male, Windows 95 Š stato pensato proprio per essere ininfettabile,   ma zio Bill ha fatto i conti senza l'intelligenza dei coderz.                   Vediamo quali sono le domande + comuni per chi si avvicina alla                 programmazione virale....                                                                                                                                       1) E' possibile fare l'appending ai PE ?                                                                                                                           Il formato dei PE (gli eseguibili di windows) Š fatto in modo da essere         + difficile da infettare che i normali .EXE del DOS. Tuttavia Š                 cmq abbastanza semplice, e non intendo + parlarne, dato che ho gi… scritto      un articolo che lo spiega nello scorso numero di Vana Imago                                                                                                                                                                                  2) PerchŠ il mio virus da un errore di pagina non valida ?                                                                                                         Sotto windows esistono differenti livelli di protezione per le zone             di memoria, ve ne accorgerete quando tenterete di eseguire del                  self-modifying code e inesorabilmente verrete umiliati dal solito               errore di pagina non valida.                                                    Quando scriviamo un prog per windows in .data dovremmo mettere tutte            le variabili inizializzate, e in questo modo potremmo scriverci sopra,          ma purtroppo per un virus questo non Š possibile, perchŠ quando infetteremo     un file, non avremmo + il nostro bel .data con le variabili, quindi non         mettere mai dei veri dati in .data (a meno che non sia robba che serva          solo al capostipite). Rimane per• il fatto che non possiamo scrivere            in .CODE. A questo si rimedia chiamando l'API VirtualProtect, di                Kernel32.dll. La sintassi Š :                                                                                                                                          CALL  VirtualProtect,OFFSET di Inizio,Lunghezza,modo,puntatore                                                                                           OFFSET di Inizio indica l'inizio della zona della quale si vuole cambiare       la protezione, lunghezza indica per quanti bytes da OFFSET di Inizio si         estende la zona di memoria, modo indica il modo di protezione (nel nostro       caso 4) e puntatore punta ad una zona di memoria dove saranno salvati           i dati contenuti (baahhh)                                                       Quindi :                                                                                                                                                     Start :                                                                                                                                                                   CALL  bohbah                                                          bohbah:                                                                                   POP   EBP                                                                       SUB   EBP,OFFSET bohbah                                                         LEA   EAX,[EBP+OFFSET Start]                                                    MOV   ECX,OFFSET Fine-OFFSET Start                                              CALL  VirtualProtect,EAX,ECX,4,0                                                                                                                       ecc.ecc.ecc..                                                                                                                                                  Fine:                                                                                                                                                                                                                                           3) Che cazz Š questo delta offset ???                                                                                                                              La domanda + frequente che mi fanno i miei amici che stanno cominciando.        Semplicemente pensa questo, se hai scritto ad esempio :                                                                                                                MOV   EAX,OFFSET dopll                                                                                                                                   Al momento dell assemblaggio OFFSET dopll verr… sostituito con l'indirizzo      di dopll. FinchŠ esegui il capostipite, allora nessun problema, perchŠ          l'indirizzo corrisponde effettivamente, ma gi… dopo la prima infezione          l'OFFSET di dopll sar… diverso, quindi in realt… in EAX sar… spostato           sempre quel valore, che per• non corrisponde + all'indirizzo di dopll!!!        Noi per• sappiamo che quel valore corrisponde all'indirizzo di                  dopll rispetto all'inizio del virus (infatti nel capostipite l'inizio del       virus Š 0 quindi l'indirizzo corrisponde), quindi non dobbiamo fare altro       che trovare l'indirizzo di inizio del virus e sommarlo all'OFFSET originale     di dopll. L'indirizzo di inizio del virus viene appunto chiamato                Delta Offset. Ecco come trovarlo :                                                                                                                                   CALL    ProceduraFittizia                                                                                                                               ProceduraFittizia:                                                                                                                                                      POP     EBP                                                                     SUB     EBP,OFFSET ProceduraFittizia                                                                                                                      Quando il CALL chiama la procedura fittizia l'indirizzo di ProceduraFittizia    viene messo nello stack, quindi non resta che cacciarlo fuori e sottrarre       l'indirizzo che aveva la label nel capostipite. E' ovvio che alla prima         infezione EBP sar… uguale a 0, quindi tutti gli offset corrisponderanno.        Ecco, EBP da ora in avanti sar… il nostro delta offset.                         Quindi mai scrivere :                                                                                                                                                         MOV     EAX,OFFSET eee                                                                                                                             Ma invece :                                                                                                                                                                  LEA     EAX,[EBP+OFFSET eee]                                                                                                                                                                                                      (Se non conosci l'asm magari ti starai domandando come mai con POP EBP           otteniamo l'offset dell'etichetta. In pratica quando la CPU esegue              un CALL salva nello stack l'offset dell'istruzione immediatamente               seguente al CALL, in modo che il RET sapr… dove ritornare. In                   questo caso salver… quindi l'offset dell'istruzione POP EBP, che                corrisponde a quello della label...)                                                                                                                                                                                                                                                                                         4) Come faccio a chiamare le API di Windows in un virus ?                                                                                                          E adesso veniamo al problema + spinoso...le API                                 Un normale programma per windows di solito ha una import table, che             al momento dell'esecuzione viene riempita con gli indirizzi delle API           chiamate dal programma.                                                         Un virus non pu• avere una import table, perchŠ dopo la prima infezione         cmq si ritroverebbe con la import table non sua, ma della vittima.              Come fare ?                                                                     Una soluzione sarebbe utilizzare la import table del file "ospite" (che         quindi contiene gi… gli indirizzi delle API, perchŠ Š in esecuzione),           e sperare che il file ospite importi due API : GetModuleHandleA e               GetProcAddress, la prima serve a sapere l'indirizzo in memoria di un            modulo, la seconda l'indirizzo delle funzioni.                                  Quindi bisognerebbe scannare la import table alla ricerca degli indirizzi       di queste due funzioni, ma potrebbe sempre accadere che il programma            non importi queste due API, quindi saremmo al punto di prima, ed ecco           la seconda soluzione : avere memorizzati nel virus gli indirizzi del            kernel e delle varie API che ci interessano. Attenzione, perchŠ questi          indirizzi cambiano tra Windows 95, Windows 98 e la prima versione beta          di Windows 95. Allora, della beta di win95 non ce ne fotte un cazzo, quindi     non ci resta che trovare il kernel sotto Windows95 e Windows98, quindi          prendete hacker view, aprite kernel32.dll e cercate la stringa (lo              dico in esadecimale :) : 9C FC 50 53.                                           Segnatevi l'indirizzo dove comincia questa stringa.                             Adesso con il w32dasm disassemblate kernel32.dll e nella lista delle            export cercate tutte le API che vi interessano, e segnatevi l'indirizzo         di ognuna (cominciano con BFF...).                                              Adesso per chiamare un API pushate l'indirizzo dell'api e poi saltate           all'indirizzo del kernel, trovato prima.                                        Come ho detto gli indirizzi del kernel e delle api cambiano tra win95 e         win 98. Quindi il vostro virus dovr… per prima cosa controllare                 entrambi gli indirizzi possibili del kernel, e determinare                      se sta girando sotto win95 o sotto win98, e in base a questo utilizzare         indirizzi differenti per le API.                                                Se non vi va di trovare tutti gli indirizzi delle API in entrambi i             kernel (che pallllleeee!!!) potreste copiarli pari pari dal mio virus           "SaBoTaGiO", che usa appunto questo pallosissimo metodo, per• c'Š un            piccolo problema : non ho ancora distribuito il sorgente del virus, e           non intendo farlo :)) quindi potete solo provare a disassemblarlo, ma           a questo punto tanto vale che andate a disassemblare kernel32.dll ....                                                                                                                                                                       5) Come si fa ad eseguire il codice originale del file infettato ?                                                                                                 Semplice, se avete appendato per bene basta fare la somma del                   vecchio entrypoint del file + l'Image Base (cioŠ dove il file                   viene caricato in memoria), e saltare all'indirizzo ottenuto.                   Se non sapete dove stanno l'entrypoint e l'image base vi rimando                al mio articolo sui PE sul numero 1 di VI.                                                                                                                                                                                                                                 Techno Knight (techno83@freemail.it)                                                                                                                                                                              

← 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