WINRAR 3.51 it : Operare sugli archivi bloccati |
||
Data |
by LUCIFUGE[2006]-IseduceWITHfear |
|
25/03/2006 |
Published by Quequero |
|
Qui è la MACCHINA. Dorme tranquilla eppure è vulnerabile. Qui è la MACCHINA. Con il suo respiro liquido/elettrico. |
Eccellente tutorial anche questo, rinnovo i complimenti! |
Potrebbe svegliarsi e cancellarci tutti. Potrebbe svegliarsi e cadere come altri idoli per mani umane. Qui è la MACCHINA. Con il suo dolore/piacere. |
.... |
|
.... |
Difficoltà |
( )NewBies ( )Intermedio ( )Avanzato ( )Master |
|
Introduzione |
WinRAR è la versione per piattaforma Windows del gestore di archivi creato da Alexander Roshal.
Attualmente è disponibile, in prova per quaranta giorni, la versione stabile 3.51 in italiano.
Tra le molteplici funzioni offerte dal programma, oltre al celebrato algoritmo di compressione, per le finalità che qui interessano vi è quella di
prevenire modifiche agli archivi creati mediante una apposita funzione di “blocco”.
In questo tutorial vedremo come sussista la possibilità di operare anche sugli archivi “bloccati” sfruttando una banale vulnerabilità offerta
proprio dallo stesso programma.
NB. Per il tutorial utilizzeremo a scopo didattico la versione di prova del programma e non procederemo a modificarne il sistema di registrazione.
Tools usati |
URSoft W32Dasm Ver 8.93 + Bratalarm Patch 3.0 - final
UltraCompare Professional Version 3.10 (http://www.ultracompare.com/)
UltraEdit-32 Professional Text/HEX Editor Version 11.20b (http://www.idmcomp.com)
Lo stesso target ossia WinRAR
URL o FTP del programma |
www.winrar.it
Essay |
Come ricordato nell’introduzione, WinRAR permette di creare archivi ai quali, spuntando l’opzione “Blocca l’archivio”, non è più consentito
apportare modifiche.
La funzione è accessibile in vari modi ad es. all’interno dell’applicazione è possibile attivarla selezionando un archivio precedentemete creato
e premendo Alt+B. Questo è il pannello di WinRAR che si aprirà (in giallo è evidenziata la funzione) :
1) Primo tentativo di operare su archivi bloccati.
Nel pacchetto di installazione si trova allegato un documento chiamato NoteTecniche.txt.
In esso è contenuta una serie di informazioni molto interessanti sul formato degli archivi RAR.
Per quel che ci interessa, veniamo a conoscenza che in ogni archivio è presente un insieme ben preciso di blocchi ordinati allo scopo di
qualificare in modo esatto cosa esso sia e cosa contenga.
Ecco alcuni passi estratti dal documento :
Ogni blocco inizia con i seguenti campi:
HEAD_CRC 2 bytes CRC del blocco intero o parziale HEAD_TYPE 1 byte Tipo di blocco HEAD_FLAGS 2 bytes Blocco con indicatori HEAD_SIZE 2 bytes Dimensione del blocco ADD_SIZE 4 bytes Campo opzionale - dimensione del blocco aggiunto
Intestazione dell'archivio ( MAIN_HEAD ) ----------------------------------------
HEAD_CRC CRC dei campi da HEAD_TYPE a RESERVED2 2 bytes
HEAD_TYPE Tipo di blocco: 0x73 1 byte
HEAD_FLAGS Bit indicatori: 2 bytes 0x0001 - Attributo di volume (archivio multi-volume) 0x0002 - E' presente un commento dell'archivio. RAR 3.x usa un blocco separato per il commento e non imposta questo indicatore.
0x0004 - Attributo per archivio bloccato 0x0008 - Attributo di archiviazione solida 0x0010 - Nuovo schema d'assegnazione dei nomi ai volumi ('nome_volume.partN.rar') 0x0020 - Sono presenti le informazioni d'autenticità RAR 3.x non imposta questo indicatore.
0x0040 - E' presente l'informazione per il recupero dei dati 0x0080 - L'intestazione del blocco è crittografata 0x0100 - Primo volume (impostato solo da RAR 3.00 e seguenti)
gli altri bit in HEAD_FLAGS sono riservati per uso interno.
HEAD_SIZE Dimensione totale dell'intestazione dell'archivio, 2 bytes compreso l'eventuale commento |
Dunque, quando WinRAR procede a bloccare un archivio non fa altro che modificare 2 bytes nell’intestazione dei medesimi (HEAD_FLAGS),
con il valore corrispondente all’Attributo “archivio bloccato”.
Ora possiamo provare a creare due archivi, del medesimo contenuto, di prova [PROVA1.RAR e PROVA2.RAR] il secondo dei quali sarà
“bloccato”.
Verifichiamo con WinRAR la presenza del blocco nel secondo archivio creato :
Lanciamo UltraCompare ed analizziamo le divergenze fra i due file :
Così rispettivamente agli indirizzi 0x0007 e 0x000A sono state apportate da WinRAR delle modifiche all’intestazione dell’archivio.
I valori presenti nel file PROVA1.RAR erano rispettivamente CF90 per l’indirizzo 0x0007 e 00 per l’indirizzo 0x000A.
Mentre i valori del file PROVA2.RAR erano 1537 per l’indirizzo 0x0007 e 44 per l’indirizzo 0x000A.
Ora rinominiamo il file di installazione di WinRAR ossia WRar351it.exe come PROVA3.RAR ed utilizziamolo come bersaglio del nostro
piccolo esercizio.
Clicchiamo sul file appena rinominato per aprirne il contenuto in WinRAR e verifichiamo le informazioni ivi contenute :
Bene, tra le altre è presente il “Blocco archivio”.
Chiudiamo l’applicazione e riapriamo lo stesso file con UltraEdit-32.
Si lo so che dall’intestazione si tratta di un file eseguibile, per la precisione un archivio auto-estraente che contiene al suo interno il file
RAR, e precisamente all’indirizzo 0x00E400 troviamo l’intestazione a cui ci eravamo abituati (se il file di installazione in vostro possesso
è diverso dal mio potete utilizzare la stringa Rar! come argomento di ricerca) :
Procediamo alla sostituzione dei seguenti byte 984F con CF90 e 0C con 00.
Salviamo il tutto e riapriamo l’archivio con WinRAR.
Controlliamo le informazioni contenute nel file :
Il “Blocco archivio” è sparito (purtroppo non vengono più riconosciuti i dati di autenticazione).
Ora possiamo procedere con un altro tentativo ad esempio creando un archivio bloccato di grosse dimensioni ed a modificare
rispettivamente CF90 per l’indirizzo 0x0007 e 00 per l’indirizzo 0x000A, ed otterremo sempre come risultato un archivio
sbloccato.
2) Secondo tentativo di operare su archivi bloccati.
Lanciamo WinRAR.EXE e proviamo ad aggiungere altri file all’archivio PROVA2.RAR.
Si aprirà la finestra diagnostica rilevando un preciso valore di errore nell’applicazione :
Creiamo una copia del file WinRAR.EXE e rinominiamola STUDIO.EXE
Apriamo con il W32DASM il file Studio.EXE e cerchiamo la stringa corrispondente all’errore ossia “Impossibile modificare un archivio
bloccato” :
:00402383 80BB046E000000 cmp byte ptr [ebx+00006E04], 00 :0040238A 7420 je 004023AC :0040238C F6C201 test dl, 01 :0040238F 751B jne 004023AC * Possible Reference to String Resource ID=00711: "Impossibile modificare un archivio bloccato" | :00402391 B8C7020000 mov eax, 000002C7 :00402396 E84DF30000 call 004116E8 :0040239B 50 push eax :0040239C 83C317 add ebx, 00000017 :0040239F 53 push ebx :004023A0 E86B250400 call 00444910 :004023A5 83C408 add esp, 00000008 :004023A8 B001 mov al, 01 :004023AA 5B pop ebx :004023AB C3 ret :004023AC 80BB026E000000 cmp byte ptr [ebx+00006E02], 00 :004023B3 742E je 004023E3 :004023B5 F6C202 test dl, 02 :004023B8 7529 jne 004023E3 :004023BA F6C204 test dl, 04 :004023BD 7409 je 004023C8 :004023BF 80BB066E000000 cmp byte ptr [ebx+00006E06], 00 :004023C6 741B je 004023E3 |
Notiamo la presenza di un salto condizionato ed esattamente 751B ossia eseguirà il salto tutte le volte che la condizione (ossia il rapporto
che lega dl a 01) sarà diversa da zero (ZF=0), mentre quando la condizione non sarà verificata allora genererà l’errore “archivio bloccato”.
:0040238C F6C201 test dl, 01 :0040238F 751B jne 004023AC ------------- SEGUIAMO IL SALTO -----------------------. :00402391 B8C7020000 mov eax, 000002C7 "Impossibile modificare un archivio bloccato" | :00402396 E84DF30000 call 004116E8 | :0040239B 50 push eax | :0040239C 83C317 add ebx, 00000017 | :0040239F 53 push ebx | :004023A0 E86B250400 call 00444910 | :004023A5 83C408 add esp, 00000008 | :004023A8 B001 mov al, 01 | :004023AA 5B pop ebx | :004023AB C3 ret | :004023AC 80BB026E000000 cmp byte ptr [ebx+00006E02], 00 <-----------------------------------+ :004023B3 742E je 004023E3 :004023B5 F6C202 test dl, 02 :004023B8 7529 jne 004023E3 :004023BA F6C204 test dl, 04 :004023BD 7409 je 004023C8 :004023BF 80BB066E000000 cmp byte ptr [ebx+00006E06], 00 :004023C6 741B je 004023E3 |
Possiamo procedere invertendo l’ordine dei fattori del test ossia invece di test dl,01 con test 01,dl.
Apriamo WinRAR.EXE con UltraEdit e premiamo Ctrl+G ed inseriamo l’indirizzo corrispondente alle istruzioni da modificare ossia
0x00198c (se non sapete ricavare l’indirizzo guardate in basso nella finestra di W32Dasm o di IDA) :
E modifichiamo F6C201 con F601C2 ossia il nostro test invertito. Salviamo ed avviamo WinRAR.
Proviamo nuovamente ad operare con l’archivio PROVA2.RAR e constatiamo che è possibile aggiungere dei file all’archivio nonostante
sia presente il “Blocco archivio”. L’effetto è un po’ bizzarro lo devo ammettere e come entrare dentro una casa con la porta chiusa….
Lo stesso risultato è raggiungibile modificando solo il salto condizionato 751B in un salto incondizionato ossia EB1B.
Infatti allo stesso modo potremo aggiungere od aggiornare un archivio bloccato.
Con questo metodo non possiamo però eliminare i file già presenti in un archivio “bloccato”, questo perché vi è un altro
controllo eseguito da WinRAR sulla intestazione del file che influenza il comportamento del tasto destro del mouse
dove è presente la voce “elimina file/cartelle” ed i comandi presenti nel menu.
Riapriamo il file con W32Dasm è cerchiamo il punto dove viene effettuato il controllo sull’intestazione rammentando le informazioni
contenute nel file NoteTecniche.txt.
:004044BC 8BC3 mov eax, ebx :004044BE E8510B0000 call 00405014 :004044C3 8BC3 mov eax, ebx :004044C5 E8C6020000 call 00404790 :004044CA 80BB006E000000 cmp byte ptr [ebx+00006E00], 00 :004044D1 7423 je 004044F6 :004044D3 33D2 xor edx, edx :004044D5 8A9382460000 mov dl, byte ptr [ebx+00004682] :004044DB 6683E23F and dx, 003F :004044DF 668993DC460000 mov word ptr [ebx+000046DC], dx :004044E6 668B8B80460000 mov cx, word ptr [ebx+00004680] :004044ED 66898BDE460000 mov word ptr [ebx+000046DE], cx :004044F4 EB43 jmp 00404539 :004044F6 668B83126E0000 mov ax, word ptr [ebx+00006E12] |:004044D1(C) :004044FD 663B83D4460000 cmp ax, word ptr [ebx+000046D4] :00404504 7433 je 00404539 :00404506 B8AC020000 mov eax, 000002AC <–--- "L'intestazione dell'archivio è danneggiata" :0040450B E8D8D10000 call 004116E8 :00404510 50 push eax :00404511 8D5317 lea edx, dword ptr [ebx+17] :00404514 52 push edx :00404515 E8F6030400 call 00444910 :0040451A 83C408 add esp, 00000008 :0040451D E8A6E30100 call 004228C8 :00404522 807DBF00 cmp byte ptr [ebp-41], 00 :00404526 7511 jne 00404539 :00404528 33C0 xor eax, eax :0040452A 8B55C0 mov edx, dword ptr [ebp-40] :0040452D 64891500000000 mov dword ptr fs:[00000000], edx :00404534 E9CE010000 jmp 00404707 :00404539 F683DC46000001 test byte ptr [ebx+000046DC], 01 ; Test se “archivio multi-volume” :00404540 0F95C1 setne cl ; imposta il byte se la condizione non è 0 :00404543 83E101 and ecx, 00000001 :00404546 888B026E0000 mov byte ptr [ebx+00006E02], cl :0040454C F683DC46000008 test byte ptr [ebx+000046DC], 08 ; Test se “archivio solido” :00404553 0F95C0 setne al ; imposta il byte se la condizione non è 0 :00404556 83E001 and eax, 00000001 :00404559 8883016E0000 mov byte ptr [ebx+00006E01], al :0040455F F683DC46000002 test byte ptr [ebx+000046DC], 02 ; Test se “archivio con commento” :00404566 0F95C2 setne dl ; imposta il byte se la condizione non è 0 :00404569 83E201 and edx, 00000001 :0040456C 8893036E0000 mov byte ptr [ebx+00006E03], dl :00404572 F683DC46000004 test byte ptr [ebx+000046DC], 04 ; Test se “archivio bloccato” :00404579 0F95C1 setne cl ; imposta il byte se la condizione non è 0 :0040457C 83E101 and ecx, 00000001 :0040457F 888B046E0000 mov byte ptr [ebx+00006E04], cl :00404585 83BBE846000000 cmp dword ptr [ebx+000046E8], 00000000 ; Test se “primo volume” :0040458C 0F95C0 setne al ; imposta il byte se la condizione non è 0 :0040458F 83E001 and eax, 00000001 :00404592 8883056E0000 mov byte ptr [ebx+00006E05], al :00404598 F683DC46000040 test byte ptr [ebx+000046DC], 40 ; Test se “informazioni per il recupero” :0040459F 0F95C2 setne dl ; imposta il byte se la condizione non è 0 :004045A2 83E201 and edx, 00000001 :004045A5 8893076E0000 mov byte ptr [ebx+00006E07], dl :004045AB F683DC46000080 test byte ptr [ebx+000046DC], 80 ; Test se “file crittografato” :004045B2 0F95C1 setne cl ; imposta il byte se la condizione non è 0 :004045B5 83E101 and ecx, 00000001 :004045B8 888B086E0000 mov byte ptr [ebx+00006E08], cl :004045BE 80BBC446000000 cmp byte ptr [ebx+000046C4], 00 :004045C5 740D je 004045D4 :004045C7 80BB086E000000 cmp byte ptr [ebx+00006E08], 00 :004045CE 0F8527010000 jne 004046FB |
Per i nostri scopi sono interessanti le seguenti linee di codice
:00404569 83E201 and edx, 00000001 :0040456C 8893036E0000 mov byte ptr [ebx+00006E03], dl :00404572 F683DC46000004 test byte ptr [ebx+000046DC], 04 ; Test se “archivio bloccato” :00404579 0F95C1 setne cl ; imposta il byte se la condizione non è 0 |
Possiamo procedere nel seguente modo :
all’indirizzo 0x003b79 modifichiamo 0F95C1 in 909090
|
L’inconveniente di questo metodo consiste solo nel fatto che WinRAR non visualizzerà correttamente la presenza del “blocco archivio”.
Saranno, infatti, falsate tutte le informazioni relative nell’apposito box.
Proviamo allora a cercare dove la stringa relativa venga caricata. La porzione di codice che ci interessa è la seguente :
:0046A5FE 51 push ecx :0046A5FF 6A70 push 00000070 * Possible Reference to String Resource ID=00112: "Tipo" :0046A601 53 push ebx :0046A602 E8DBD40200 Call 00497AE2 * Reference To: USER32.SetDlgItemTextA, Ord:0000h :0046A607 833D6C124C0000 cmp dword ptr [004C126C], 00000000 :0046A60E 7407 je 0046A617 SALTA AD ASSENTE SE LA CONDIZIONE E’ “ZERO” :0046A610 B891020000 mov eax, 00000291 * Possible Reference to String Resource ID=00657: "Presente" | :0046A615 EB05 jmp 0046A61C
Modifichiamo cmp dword ptr [004C126C], 00000000 in cmp dword ptr [004C126C], 00000001
|
Per fare ciò andremo a modificare le premesse che determinano il salto al valore “Assente” (salta se la condizione è uguale a zero)
ossia all’indirizzo 0x069c0d sostituiremo il valore 00 con 01.
Lanciamo WinRAR e proviamo ad operare su un archivio privo di blocco. Tutto funziona regolarmente.
Ripetiamo l’operazione con un archivio in cui il blocco è presente. Anche qui tutto funziona regolarmente.
Ora potremo aggiungere, aggiornare ed eliminare file o commenti da qualunque archivio “bloccato” senza che le informazioni sulla
presenza della protezione vengano falsate.
,.,.,.,LUCIFUGE[2006]-IseduceWITHfear.,.,.,.
Note finali |
Ringrazio in ordine sparso tutti Voi e QUEQUERO.
Ringrazio quel pozzo di superficialità che è la Libera Università Internazionale degli Studi Sociali Guido Carli.
Ringrazio i Rhapsody, gli Angra, i Dreamtheater, i Depeche Mode, i Darkness, Giuseppe Verdi ed Antonio Vivaldi.
Disclaimer |
Mi permetto di apportare modifiche al classico “avviso” previsto da Quequero, che troverete alla fine di queste mie virgolettato.
Questa premura non è dovuta ad un attacco di egocentrismo ma al desiderio di chiarire alcune cose.
Vi è una stretta assonanza tra l’antica pazienza dell’Orologiaio e quella tutta moderna del Reverser.
Non mi si perdoni il paragone perché lo ritengo molto calzante.
Entrambi lavorano su una materia prima ed entrambi spesso “sezionano” un opera intellettuale altrui.
Provate ad immaginarli. Li vedete.
Osservate la cura dell’Orologiaio con in mano il suo pezzo d’alta manifattura.
Squadra il quadrante con il monocolo in tutte le sue finiture ed osserva la qualità delle lancette… i dettagli su quadrante… ascolta il
passo dell’orologio saggiando il ticchettio del suo cuore.
Poi eccolo pronto all’opera di “disassemblaggio”.
Armato della sua chiave apre il fondello e rimuove le vite delle protezioni previste per il movimento.
Estrae la corona di carica ed infine adagia il cuore ancora pulsante in un contenitore adatto.
Procede con calma a smontare ogni sua componente svitando con mano decisa e leggera ogni piccola vite.
Alla fine del suo paziente lavoro, disteso su un piano privo di polvere, c’è un intero codice meccanico fatto di parti piccolissime… molle
rotelle ponti ecc…
Perché ? per passione innanzi tutto e anche per arte.
L’Orologiaio svolge il suo compito per apprendere il funzionamento di un orologio e non fa differenze se si tratta di un movimento standard
considerato dai più “unadjustable” o di una manifattura. Appreso il suo funzionamento potrà ripare il movimento danneggiato, procedere
ad una sua revisione pulendo l’olio invecchiato ed aggiungendone di nuovo come potrà decidere di apportare modifiche al movimento stesso.
Un movimento però che normalmente è un prodotto intellettuale di altri.
E’ questo farà l’orologiaio tranquillamente nella sua bottega.
Immaginate con me ?
Quante volte è accaduto già ? Nel mondo orologiero è una consuetudine che una casa acquisti un movimento X e proceda ad una sostituzione
dei suoi pezzi al decoro dei ponti od alla scheletratura ed esso diventi un nuovo prodotto intellettuale.
La caratteristica unica dell’essere umano è il creare il nuovo dal nuovo e dal nuovo ancora.
Per questo ci “evolviamo” perché anche un idea vecchia ci sembra di colpo nuova grazie ad uno stimolo sorto dentro di noi.
Il Reverser è come un Orologiaio nei termini in cui apre e studia un prodotto intellettuale altrui.
Studia per passione, per imparare ed anche per apportare modifiche. Cerca nuovi stimoli.
Quando si parla di orologi non è possibile ascoltare le impressioni dei semplici utenti.
Perché persone che si limitano ad indossare semplicemente un orologio potranno discutere di estetica dell’orologio ma cosa comprenderanno
della differenza che passi tra un orologio che monta 35 rubini, di cui 25 realmente necessari a sovrastare l’attrito e ben 10 disposti solo per
scena, ed un orologio che ne monta solo 25, ma tutti realmente necessari ?
Solo appassionati di orologeria e tecnici potranno apprezzare una soluzione tecnica rispetto ad una altra e così via.
Dunque quando parliamo di reversing intendiamo programmatori od autodidatti (come me) che nell’analisi del codice altrui trovano uno stimolo
non fine a se stesso. Studiano con passione, per imparare ed anche per apportare modifiche.
Certo esiste la “pirateria” (o meglio ora esiste un tempo la faccenda dei corsari era tutta un’altra storia).
Certo va combattuta ma è anche vero che se esistono ladri di auto non per questo tutti coloro che la mattina mettono le mani nel motore
della propria vettura o della vettura altrui sono “i ladri”… così come se esistono coloro che fanno orologi falsi non è vietato agli orologiai
aprire e smontare gli orologi altrui.
Almeno questa è la visione del sottoscritto ,.,.,.,LUCIFUGE[2006]-IseduceWITHfear.,.,.,..
"Vorrei ricordare che il software va comprato e non rubato, dovete registrare il vostro prodotto dopo il periodo di valutazione. Non mi ritengo responsabile per eventuali danni causati al vostro computer determinati dall'uso improprio di questo tutorial. Questo documento è stato scritto per invogliare il consumatore a registrare legalmente i propri programmi, e non a fargli fare uso dei tantissimi file crack presenti in rete, infatti tale documento aiuta a comprendere lo sforzo che ogni sviluppatore ha dovuto portare avanti per fornire ai rispettivi consumatori i migliori prodotti possibili.
Reversiamo al solo scopo informativo e per migliorare la nostra conoscenza del linguaggio Assembly."