Zoom Icon

Adobe Acrobat Reader 6

From UIC

Adobe Acrobat Reader 6 - piccola modifica

Contents


Infos
Author: GeO
Email: geuzzo[at]gmail[dot]com
Website: None
Date: 07/07/2004 (dd/mm/yyyy)
Level: Very Easy, if you can read this, you can do it
Language: Italian Image:Flag_Italian.gif
Comments: 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...



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

HexWorkShop

W32Dasm 8.93


Link e Riferimenti

http://www.adobe.com


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

I documenti qui pubblicati sono da considerarsi pubblici e liberamente distribuibili, a patto che se ne citi la fonte di provenienza. Tutti i documenti presenti su queste pagine sono stati scritti esclusivamente a scopo di ricerca, nessuna di queste analisi è stata fatta per fini commerciali, o dietro alcun tipo di compenso. I documenti pubblicati presentano delle analisi puramente teoriche della struttura di un programma, in nessun caso il software è stato realmente disassemblato o modificato; ogni corrispondenza presente tra i documenti pubblicati e le istruzioni del software oggetto dell'analisi, è da ritenersi puramente casuale. Tutti i documenti vengono inviati in forma anonima ed automaticamente pubblicati, i diritti di tali opere appartengono esclusivamente al firmatario del documento (se presente), in nessun caso il gestore di questo sito, o del server su cui risiede, può essere ritenuto responsabile dei contenuti qui presenti, oltretutto il gestore del sito non è in grado di risalire all'identità del mittente dei documenti. Tutti i documenti ed i file di questo sito non presentano alcun tipo di garanzia, pertanto ne è sconsigliata a tutti la lettura o l'esecuzione, lo staff non si assume alcuna responsabilità per quanto riguarda l'uso improprio di tali documenti e/o file, è doveroso aggiungere che ogni riferimento a fatti cose o persone è da considerarsi PURAMENTE casuale. Tutti coloro che potrebbero ritenersi moralmente offesi dai contenuti di queste pagine, sono tenuti ad uscire immediatamente da questo sito.

Vogliamo inoltre ricordare che il Reverse Engineering è uno strumento tecnologico di grande potenza ed importanza, senza di esso non sarebbe possibile creare antivirus, scoprire funzioni malevoli e non dichiarate all'interno di un programma di pubblico utilizzo. Non sarebbe possibile scoprire, in assenza di un sistema sicuro per il controllo dell'integrità, se il "tal" programma è realmente quello che l'utente ha scelto di installare ed eseguire, né sarebbe possibile continuare lo sviluppo di quei programmi (o l'utilizzo di quelle periferiche) ritenuti obsoleti e non più supportati dalle fonti ufficiali.