Maledetto Norton AntiVirus

Nota per il lettore: questo post è stato recuperato da un backup polveroso ed è una traccia di un “me” di svariati anni fa…

Come tutte le settimane, stavo per aggiornare il mio Norton Antivirus 2000 tramite LiveUpdate, ma ecco apparire una simpatica finestra intitolata “promemoria sull’aggiornamento delle definizioni dei virus” che mi ricorda che il mio abbonamento è scaduto. Le possibilità sono due: chiamare la Symantec e sganciare $oldoni oppure scaricare fantomatici aggiornamenti gratuiti, che, è inutile sottolinearlo, non esistono. Mi ricordo allora, di aver visto qualche volta su www.download.com versioni scaricabili .exe delle definizioni del NAV: che funzionino ugualmente? Le trovo sul sito della Symantec Italia, scelgo quella in lingua italiana e scarico l’ultima disponibile. Doppio click su 20031026-002-i32.exe e… nuovo errore: anche lui mi ricorda che il mio abbonamento è scaduto.
Solo che adesso sappiamo dove mettere le mani 😉

Il NAV è costituito da un casino di eseguibili e dll, invece questo è un exe unico, un pò grande, ma calcolando che è tipo un archivio autoestraente e che l’interfaccia grafica è proprio ridotta all’osso, alla fine non dovrebbe essere poi tanto grande da decompilare…

Carichiamo allora 20031126-007-i32.exe nel WDasm e diamo un’occhiata alle Functions/Export: guarda caso la prima si chiama ?AllowDefInstall@@YGHPAH@Z… Doppio click:

Exported fn(): ?AllowDefInstall@@YGHPAH@Z - Ord:0001h
:00404004 55 push ebp
:00404005 8BEC mov ebp, esp
:00404007 56 push esi
:00404008 8B7508 mov esi, dword ptr [ebp+08]
:0040400B 85F6 test esi, esi
:0040400D 7417 je 00404026
...

Subito sopra questa funzione, troviamo il chamante:

* Referenced by a CALL at Address:
|:00401E50
...

Facciamo quindi click su GoTo Code Location e inseriamo 00401E50. Verremo catapultati qui:

* Reference To: updat32.?AllowDefInstall@@YGHPAH@Z
|
.00401E50: E8AF210000 call .000004004
.00401E55: 397DF4 cmp [ebp][-000C],edi
.00401E58: 751B jne .000001E75
.00401E5A: 393DB88E4200 cmp [000428EB8],edi
.00401E60: 7505 jne .000001E67
.00401E65 0000 add byte ptr [eax], al
...

Ora siamo dentro la vera e propria routine di protezione: notiamo da subito due comandi jump condizionali JNE (ovvero “salta se non uguale”). Segnamoci l’offset (00001E50, è scritto in basso nella status bar del WDasm), chiudiamo il nostro caro debugger e carichiamo l’exe in HIEW. Per prima cosa passiamo alla modalità decodifica: per fare ciò, premiamo F4 e scegliamo decode, poi premiamo F5 per effettuare la ricerca dell’offset, inseriamo 00001E50 e battiamo Enter.

.00001E50: E8AF210000 call .000004004 -------- (1)
.00001E55: 397DF4 cmp [ebp][-000C],edi
.00001E58: 751B jne .000001E75 -------- (2)
.00001E5A: 393DB88E4200 cmp [000428EB8],edi
.00001E60: 7505 jne .000001E67 -------- (3)
...

Ora diamo F3 per passare in modalità scrittura e sostituiamo la 3° riga. Il risultato finale dovrà questo:

.00001E50: E8AF210000 call .000004004 -------- (1)
.00001E55: 397DF4 cmp [ebp][-000C],edi
.00001E58: E918000000 jmp .000001E75 -------- (2)
.00001E5D: 8E4200 mov es,[edx][00000]
.00001E60: 7505 jne .000001E67 -------- (3)
...

Usiamo adesso F9 per salvare e F10 per uscire da HIEW. Con il jump condizionale sostituito con un jump forzato, la protezione va a farsi benedire…

Proviamo quindi a lanciare 20031126-007-i32.exe, diamogli il tempo di compiere il suo sporco lavoro e poi apriamo il Norton Antivirus per controllare la data dell’ultimo aggiornamento: guarda guarda, è proprio il 26 Novembre 2003…