Adobe Acrobat 6.0 | ||
Data |
by "|GeO|" |
|
07/07/2004 |
Published by Quequero | |
|
Grazie geo, essenziale e rapido ;p, il trick e' simpatico, anche io odio quella dir ;p |
|
|
|
|
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...
Introduzione |
Tools usati |
URL o FTP del programma |
Notizie sul programma |
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. =)
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.