Adobe Acrobat 6.0

Data

by "|GeO|"

 

07/07/2004

UIC's Home Page

Published by Quequero



Grazie geo, essenziale e rapido ;p, il trick e' simpatico, anche io odio quella dir ;p

 

 

E-mail: [email protected]
|GeO|, su #asm #crack-it e #traduzioni

 

Difficoltà

(X)NewBies ( )Intermedio ( )Avanzato ( )Master

 

In questo piccolo tute mostrerò come evitare che questo programma crei la cartella ebook personali (o my ebooks se si usa la versione inglese/americana) in Documenti...


Adobe Acrobat 6.0

Written by |GeO|

Introduzione

Ok, questa piccola opera di reversing è dedicata ad Adobe Acrobat Reader 6.0 e alla sua noiosissima peculiarità di creare la directory "Ebooks personali" in documenti ad ogni avvio del programma. Questa funzione è un bel po' pallosa e quindi ho deciso di eliminarla.

Tools usati

-w32dsm
-un hex editor

URL o FTP del programma

Il programma lo potete reperire su www.adobe.com nella sezione supports --> downloads

Notizie sul programma

Non credo che Adobe Acrobat Reader abbia bisogno di presentazioni ;)

Essay

Ok, dopo aver disassemblato il file con il win32dsm mi sono messo a cercare fra le imported functions "CreateDirectoryA" che è un'api di kernel32.dll

Nel programma questa funzione era utilizzata in quattro punti diversi, ma a me ne interessava solo uno...

Ecco il codice:

:007155FB       cmp dword ptr [esp+04], 00000000
:00715600 7506  jne 00715608 --> diventa: 7406    je 00715608
:00715602       mov eax, 40000003
:00715607       ret


* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00715600(C)
|
:00715608       push 00000000
:0071560A       push [esp+08]

* Reference To: KERNEL32.CreateDirectoryA, Ord:0042h
|
:0071560E       Call dword ptr [00844504]
:00715614       test eax, eax
:00715616       je 0071561B
:00715618       xor eax, eax
:0071561A       ret



* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00715616(C)
|

* Reference To: KERNEL32.GetLastError, Ord:015Ah
|
:0071561B       Call dword ptr [008445F0]
:00715621       push eax
:00715622       call 0071476C
:00715627       pop ecx
:00715628       ret


:00715629       cmp dword ptr [esp+04], 00000000
:0071562E       jne 00715636
:00715630       mov eax, 40000003
:00715635       ret

[...]

Prima della funzione c'è un compare fra 0x00 e quanto puntato dal puntatore a [esp+04]; se [esp+04] è uguale a 0 crea la directory "ebooks personali", altrimenti no. Qui mi è bastato invertire il jump (da jne a je) per ottenere il risultato desiderato. Molto probabilmente viene eseguito un controllo per verificare l'esistenza della cartella: in caso di reale esistenza della stessa [ebp+04] viene settata ad un valore diverso da 0, altrimenti viene settato a 0 e la cartella viene creata. La funzione Createdirectory ritorna un valore diverso da zero se la cartella viene creata con successo (valore che viene messo nel registro eax), altrimenti ritorna il valore zero (sempre messo in eax). In seguito viene eseguito un test eax, eax che rimanda a getlasterror (funzione che gestisce l'errore) in caso che eax sia 0: test esegue un AND logico fra destinazione e sorgente, e se eax è 0 restituisce 0 (e lo zero flag verrà settato a 1), se è 1 restituisce 1 (se non capite il perché andatevi a vedere la "tavola di verità" dell'and e tutto vi sembrarà più chiaro =)). Quindi, ricapitolando, se eax è 1, il salto non avviene, se è 0 avviene (dato che era un jne preceduto da un "test").

Beh, detto questo non mi resta molto da dire. =)

 
                                                                                                                              |GeO|

Note finali

Ringraziamenti e saluti:

-Albe: per avermi dato delle dritte di assembly

-AndreaGeddon: per l'inesauribile pazienza e disponibilità! (e sfatiamo una volta per tutte questo mito:
mi ha assicurato che non è pelato! :D)

-Active85k: per avermi dato un parere (positivo ;)) sul tute

-Saluto anche tutti gli studenti della UIC e i frequentatori di #crack-it e #asm

Disclaimer

Questo readme/tutorial è solo a scopo dimostrativo/informativo, non mi assumo nessuna responsabilità per le vostre azioni
nè tantomeno per eventuali danni causati dall'applicazione di quanto trattato qui.

Noi reversiamo al solo scopo informativo e di miglioramento del linguaggio Assembly.