Modifichiamo la memoria di Aw97pr
con un programmino in assembly


15/05/2000

by "Fytse"

 

 

UIC's Home Page

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
E-mail: [email protected]
Fytse, #crack-it, #uic
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"


Modifichiamo la memoria di Aw97pr
con un programmino in assembly
Written by Fytse

Introduzione

Ciauzzz a tutti, riecco Fytse!!! Questo tutorial è in pratica ricavato da un analogo metodo utilizzato da Masta per modificare un gioco in modo da avere sempre munizioni a quantità. Riprendiamo il suo metodo e crackiamo aw97pr in un modo alquanto insolito.

Tools usati

Soft-Ice
Api Spy
Tasm

URL o FTP del programma

Bho! e chi se lo ricorda???

Notizie sul programma 

Programmino in grado di trovare in vari modi la password di un documento word, la versione non registrata funge solo con una lunghezza massima di 4 caratteri... pochi!

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 l’handle 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 l’hwnd

change_codice:

push 0
push 16 ;I valori da modificare (4dword=16valori)
push offset codice ;Le nostre 4 dword dichiarate all’inizio
push codice_pos ;La locazione di memoria dove apportare la modifica
push p_hand ;L’handle 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 l’Hwnd
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 l’hwnd 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

Note finali

Un ringraziamento particolare va a Masta, questo tutorial è nato grazie a lui! Se ve la cavate con l’inglese leggete anche il suo tut, si trova anche nella UIC, sezione Assembly.........Hei guarda che pure io ho fatto un tute simile :))) NdQuequero

Disclaimer

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 immane che ogni singolo programmatore ha dovuto portare avanti per fornire ai rispettivi consumatori i migliori prodotti possibili.
Noi reversiamo al solo scopo informativo e di miglioramento del linguaggio Assembly.
Capitoooooooo????? Bhè credo di si ;)))) 

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