Modifichiamo la memoria di Aw97pr |
|
|
15/05/2000 |
by "Fytse" |
|
|
Published by Quequero |
|
Veramente complimenti, hai fatto un ottimo lavoro, cmq il programma poteva essere avviato oltre che con un file batch (poco elegante :) con un semplicissimo CreateProcess, se vi interessa andate nella sezione UIC del sito e cercate il mio tutorial sul patching in memory (vota antonio vota antonio :) |
Ciauzzz | |
UIC's form |
|
UIC's form |
Difficoltà |
( )NewBies (X)Intermedio ( )Avanzato ( )Master |
Questo tutorial spiega come creare un programma in grado di modificare i valori di memoria di un altro programma "vittima", rendendolo registrabile con la sequenza "0000"
Introduzione |
Tools usati |
URL o FTP del programma |
Notizie sul programma |
Essay |
Questo tut non è scritto per crackare aw97pr ma solo per spiegare in che modo sia
possibile intercettare i valori di memoria di un programma qualsiasi, ed infine di
modificare tali valori per pervenire al nostro scopo. Ho scelto questo programma perché
non sono riuscito in poco tempo a decriptarlo
inoltre ha una semplice protezione
anti-Soft-Ice, ma non è un problema: Frogsice fa bene il suo lavoro.
Dando una rapida occhiata col Soft-Ice si trovano in pochi minuti vari punti
attaccabili, io ho scelto quello più logico:
il cmp fra i valori generati dalla pass immessa (4 dword) e quelli in memoria (fissi).
Il programma necessita solo di un codice di registrazione, niente pass associata al
nick
meglio così!
Ecco la parte di codice che ci interessa:
4BA33F: MOV AL, [ECX] ;Locazione 81F620,
valori generati dalla pass immessa
MOV DL, [ESI] ;Locazione
E98000, valori giusti per la registrazione
CMP AL, DL
;Confronta i due valori
JNZ 004BA373
;Salta se non sono uguali... Codice
errato
Continua poi con analoga procedura fino a confrontare i valori dell'intera dword
Ritorna poi all'inizio per confrontare il valori delle altre 3 dword... se tutto è
corretto salta alla registrazione del programma.
P.S. nel programma "modificatore" non utilizzo la locazione E98000 in quanto ad
ogni controllo effettuato, tali valori vengono ripresi da 016F:56E910; tale stringa è
fissa e viene caricata in memoria solo all'avvio... cosa volete di più dalla vita???
Infine il programma aggiuntivo per modificare tali valori: scritto in assembler lo si può
tranquillamente compilare con queste direttive:
tasm32 /mx /m3 /z /q modifi.asm
tlink32 modifi, modifi,, import32.lib
.386P
Locals
jumps
.Model Flat ,StdCall
PROCESS_VM_WRITE equ 020h ;Flag per il processo di scrittura
PROCESS_VM_OPERATION equ 008h
mb_ok equ 0
codice_pos equ 56e910h ;Locazione di memoria da modificare
extrn MessageBoxA : PROC ;Dichiariamo le procedure esterne
extrn FindWindowA : PROC
extrn GetWindowThreadProcessId :Proc
extrn OpenProcess : PROC
extrn WriteProcessMemory: PROC
extrn CloseHandle : PROC
extrn ExitProcess : PROC
.Data ;Qui dichiariamo tutti i messaggi e le dword da modificare
caption db "Dumping memory of aw97pr - Writed by Fytse",0 ;Titolo
text db "Ciauzzz",13,10 ;Testo della message box
iniziale
db "Questo programmino inganna aw97pr!",13,10
db "Rendendolo registrabile con il codice 0000",0
err_cap db "ERROR",0
notrun db "Mi dispiace, aw97pr non è in esecuzione",0
;Messaggio di errore se non è avviato il progr. Vittima
no_write db "E' stato riscontrato un problema durante la modifica dei
dati...",13,10
db "Mi dispiace non poterti aiutare",13,10,0 ;Messaggio di
errore se non è possibilemodificare la memoria
readycap db "Pronto",0
readytxt db "Oki, adesso puoi registrare aw97pr!",0 ;Messaggio
di modifica avvenuta
codice dd 3558767946
dd 1078871828
dd 3425283123
dd 2604492216
Ecco le nostre 4 dword. Corrispondono ai rispettivi valori esadecimali
In assembler i valori vengono sempre dichiarati in forma decimale e massimo una dword alla
volta.
wnd_name db "AW97PR 1.22",0 ;Nome della finestra del
programma vittima
cls_name db "TApplication",0 ;Nome della classe
E facile procurarsi queste informazioni con programmino tipo ApiSpy
pid_sc dd ? ;In questa locazione salviamo il Process ID
p_hand dd ? ;e qui lhandle del processo
.Code
Main:
push mb_ok
push offset caption
push offset text
push 0
call MessageBoxA ;Visualizziamo la prima messageBox
is_SC_RUN:
push offset wnd_name
push offset cls_name
call FindWindowA ;Cerchiamo la finestra del programma vittima
cmp eax,0
jz SC_isnt_run_end ;Se non è avviato, visualizza una messageBox di
errore
push offset pid_sc ;Qui viene memorizzato il PID
grazie alla prossima call
push eax
call GetWindowThreadProcessId ;Trova il Process ID
open_the_process:
push pid_sc
push 0
push PROCESS_VM_WRITE OR PROCESS_VM_OPERATION
call OpenProcess ;Apriamo il processo
mov p_hand,eax ;Salviamo lhwnd
change_codice:
push 0
push 16 ;I valori da modificare (4dword=16valori)
push offset codice ;Le nostre 4 dword dichiarate
allinizio
push codice_pos ;La locazione di memoria dove apportare la
modifica
push p_hand ;Lhandle del processo
call WriteProcessMemory ;Call che riscrive la memoria
cmp eax,0
jz error_on_write ;Se si è verificato un errore, visualizza la
relativa messageBox
Trainer_ready:
push mb_ok
push offset readycap
push offset readytxt
push 0
call MessageBoxA ;Oki, tutto è andato per il verso giusto!
close_the_PID_Handle:
push p_hand
Call CloseHandle ;Chiude lHwnd
jmp end_ ;Termina il nostro progr.
error_on_write:
push mb_ok
push offset err_cap
push offset no_write
push 0
call MessageBoxA ;Errore durante la scrittura
jmp close_the_PID_Handle ;Chiude lhwnd e termina il
progr.
SC_isnt_run_end:
push mb_ok
push offset err_cap
push offset notrun
push 0
call MessageBoxA ;Il programma vittima non è avviato
end_:
CALL ExitProcess ;Chiude il nostro modificatore
End Main
Se vogliamo possiamo omettere la visualizzazione delle message box e creare un file .bat
che avvii prima il progr. vittima e poi il nostro modificatore. Avviamo il progr. con il
file .bat, la memoria viene automaticamente modificata, il nostro progr. si chiude
automaticamente
non ci resta che registrarlo con la sequenza 0000.
Ecco tutto, con questo facile programmino in assembler possiamo crackare qualsiasi
programma senza modificarlo nella sua struttura evitando di incappare in noiosissimi crc
che allungano talvolta di molto il nostro lavoro. E molto utile anche con progr.
criptati che non ci permettono apportare le dovute modifiche
anche se lo si potrebbe
decriptare. Cmq è una valida alternativa secondo me troppo sottovalutata nel modo del
cracking.
Fytse
|
Un ringraziamento particolare va a Masta, questo tutorial è nato grazie a lui! Se ve la cavate con linglese leggete anche il suo tut, si trova anche nella UIC, sezione Assembly.........Hei guarda che pure io ho fatto un tute simile :))) NdQuequero
Disclaimer |
UIC's page of reverse engineering, scegli dove andare: |
Home Anonimato Assembly CrackMe ContactMe Forum Iscrizione |
Lezioni Links Linux NewBies News Playstation |
Tools Tutorial Search UIC Faq |
UIC |