Domanda [TUT] Leggere la chiave simmetrica XTEA e di compressione (LZO) dalla memoria bypassando tutti i pac

Stato
Discussione chiusa ad ulteriori risposte.

d3vil401

Utente Platinum
3 Gennaio 2009
2,077
106
1,055
1,046
Premessa
Versione IF - Pub.
Complete version will be soonly posted on d3vblog


Titolo lungo uh?
è da tanto che non posto nulla,quindi oggi posterò qualcosina.
Oggi vi rilevo uno dei metodi che uso per fare questa storia.
Il Key Bruteforcer di PadMak o come diamine si chiamava ha usato più o meno lo stesso ragionamento,solo che ha usato la ricerca della sequenza dei bytes (FindPattern) che vi dirò lungo la guida e poi ha usato la libreria ReadProcessMemory (Kernel32).
Sto scrivendo questa guida con spiegazioni dettagliate sugli argomenti che stiamo affrontando,ma lascio la pratica poco dettagliata per evitare che utenti con troppa poca esperienza si permettano di tirarsela pur non sapendo nulla!

Per chi sa cosa altro possa fare questo metodo,è pregato di starsi zitto.
Non ho scritto cosa altro si può fare proprio perché la gente deve imparare a pensare anche con la propria testa e perché dopo andiamo a finire nel chaos più completo.



Prima di cominciare vorrei mostrarvi alcune cose:
Le regole etiche che ci interessano dell'hacking (anche se noi in realtà stiamo praticando cracking).


Be safe. Your safety, the safety of your fellow jackers, and the safety of anyone you hack should never be compromised.

Be subtle. Leave no evidence that you were ever there.

Leave things as you found them (or better).

Leave no damage.

Do not steal anything.

Brute force is the last resort of the incompetent. ("One who breaks a thing to find out what it is has left the path of reason." - John Ronald Reuel Tolkien, "The Lord of the Rings")

Above all, exercise common sense.


Purtroppo non posso obbligarvi di rispettarle,ma dovreste capire che se tutti rispettassero queste regole,il 98% delle guerre tra server privati ora non ci sarebbe.
Forse rispettandole non diventerete famosi come sperate,ma sicuramente non avrete nemici e farete sicuramente la figura dei maturi.
Ognuno commette sbagli,per carità io soprattutto,però sarebbe giusto rispettarle.

Materiale

1. Cheat Engine - Qualsiasi versione.
2. PEiD - Per curiosità,non è obbligatorio
3. Metin2 File Premastering o Metin2 Extractor. M2File Prem.
3.1 Metin2 File Premastering by Tim66613 permette anche la creazione di archivi.
3.2 Metin2 Extractor (presente anche il source su EPvP) by PUSHEDX permette la sola estrazione degli archivi.
4. Un cervello funzionante.
5. Delle basi riguardo questi argomenti.
6. Delle basi riguardanti CE.
7. Maturità: Queste conoscenze sanno esser pericolose,ma solo se in mani sbagliate (Scommetto che qualcuno verrà a dirmi perché ho postato qua,dove di maturità ce n'è veramente poca).
8. Voglia di imparare: Questi argomenti servono per conoscenza e non per lamering.
9. Serietà: Non sono argomenti da prendere per fare il Lamer o sentirsi già esperti.
10. Voglia di non leecharmi la guida.
11. Per cose più avanzate,è raccomandatissima la conoscenza dell'Assembly.

Presentiamo le basi

XTEA

XTEA è un algoritmo crittografico,è la versione modificata di TEA e richiede una chiave simmetrica di 16 bytes (16 caratteri).
Progettato come algoritmo per la crifrazione dei blocchi.

LZO

LZO è un algoritmo di compressione,è stato rilasciato nel 1996 sotto Copyright.
L'autore è Markus Oberhumer,ci sono 2 versioni di LZO:
miniLZO (miniLZO.h) che è OpenSource
LZO Professional che è la versione professionale (si paga).
Tempi e prestazioni:
Codice:
memcpy(): ~60 MB/sec
LZO1X decompression in C: ~16 MB/sec
LZO1X decompression in optimized assembler: ~20 MB/sec
LZO1X-1 compression: ~5 MB/sec

Cheat Engine

E' uno scanner di memoria,un editor esadecimale e un debugger sviluppato da Dark Byte.
Da Wikipedia
Il software gira sotto Windows e viene utilizzato per barare utilizzando dei cheat nei videogiochi: il suo funzionamento permette di cercare all'interno della memoria utilizzata dai giochi particolari valori indicanti i parametri della partita (ad esempio i punti ferita) per poi modificarli o forzarli ad essere dei valori specifici.

Packers

I packers sono programmi che incorporano nei loro eseguibili (Stub) il file eseguibile da proteggere,cryptando,comprimendolo e aggiungendo varie protezioni da debuggers (CE,OllyDBG/ICE,SoftICE...),virtualizzazioni (VirtualBox,SandBoxie,VirtualPC,...) e a volte anche per aggiungere un sistema di registrazione delle licenze incorporato.
Quelli attualmente più famosi e stimati attualmente sono Themida e The Enigme Protector.
Un packer famoso,gratuito e universale ma non creato con scopo per proteggere l'eseguibile è UPX,quest'ultimo supporta numerosissime struttura di files,dai PE alle ELF.

Punto debole dei packers

Per quanto essi possano proteggere il file originale,al momento dell'esecuzione il codice (obfuscato o no) è comunque decryptato e decompresso e quindi visualizzabile.
Perché non esiste metodo per cryptare la memoria di Runtime (Ovvero,il programma caricato in memoria dal Loader).
Giusto iOS (Apple) usato negli iPhone,iPod ed iPad hanno un sistema di cryptatura del codice eseguito in memoria,ma anche questo funziona come i packers e quindi facilmente bypassabile.

I file PE

Il file Portable Executable,ovvero quelli con estensione .exe,sono strutturati in modo abbastanza semplice ma le loro proprietà sono tantissime.
Non starò qui a spiegare tutta la struttura di un PE,ma sarebbe giusto conoscerne almeno un poco.
Il file PE è strutturato nel seguente modo:

DOS Header
PE Header
Section Table
Sections

La section table indica le varie sezioni e le relative proprietà.
Dovete immaginare un file PE come un libro diviso in capitoli,ogni capitolo descrive una cosa.
Le sezioni più importanti e che incontreremo spesso sono: .text,.data,.rdata,.rsrc,.idata e altre che potreste incontrare.
Quella che ci interessa è .text,ovvero la sezione dove risiede il codice del programma.

Questa spiegazione era molto generica,per avere un'ottima guida a riguardo studiate Qui,è la stessa che studiai io

HackShield

Hackshield possiamo definirlo come protezione dal reverse engineering come fanno i packers.
Però quest'ultimo è un Engine,molto simile a quelli usati dagli AntiVirus (infatti la casa sviluppatrice,la AhnLab ha sviluppato anche un antivirus con engine simile a questo) mirato a fermare il cheating dai giochi.
Cerca di prevenire la modifica della memoria facendo l'Hooking della funzione WriteProcessMemory e ReadProcessMemory.
Viene creato spesso il processo con diritti allo stesso livello del Kernel (Ring0) in modo da prevenire qualsiasi tipo di accesso,Metin2 non ha questo supporto (Quella funzione,oltre a tante altre,è usata nella licenza Hackshield Pro) ma rimane comunque un'impresa,diciamo,ardua riuscire a bypassarlo.
E' quasi sempre necessario un unpack della libreria e del launcher del gioco per poterlo bypassare.


############################

Si comincia

Spero voi sappiate già come attachare un processo con CE,perché di certo non ve lo spiegherò io.
Bene,usiamo il Memory Edit per la cosa,ma non avremo bisogno principalmente del disassembler anche se invece sarà molto importante per le protezioni avanzate,ma ci serviremo del dump.
Da come potete vedere possiamo leggere liberamente la memoria del programma.
screen1.png

Sono sicuro al 0xFF% che in qualche minuto riceverete un errore del genere
screen2.png

Questo è HackShield (nel caso in cui il launcher ne abbia integrato)
esistono metodi per bypassarlo,ma a noi non ci interessa.
Metin2 ha fatto la cazza*a di far comparire una MessageBox invece di chiudersi immediatamente,in questo modo anche se ci detecta il programma noi potremo continuare tranquillamente a navigare nel codice.

Ora noi sappiamo che la chiave simmetrica XTEA esadecimale è
Codice:
B9 9E B0 02 6F 69 81 05 63 98 9B 28 79 18 1A 00

e la chiave di compressione LZO è
Codice:
22 B8 B4 04 64 B2 6E 1F AE EA 18 00 A6 F6 FB 1C

Ma a noi non ci interessa,perché cercare dei dati che sono stati cambiati ci darà sempre un errore.
Quindi dobbiamo ragionare:
Apriamo un editor esadecimale un launcher unpackato e cerchiamo una delle 2 chiavi.
Ora,sappiamo che le due chiavi sono a 16 bytes.

Analizziamo il dump:
Codice:
00 00 00 00 2E 3F 41 56 43 45 74 65 72 50 61 63 6B 4D 61 6E 61 67 65 72 40 40 00 00 B9 9E B0 02 6F 69 81 05 63 98 9B 28 79 18 1A 00 22 B8 B4 04 64 B2 6E 1F AE EA 18 00 A6 F6 FB 1C D8 F8 75 00

In char
Codice:
.....?AVCEterPackManager@@..¹ž°.oi..c˜›(y..."¸´.d²n.®ê..¦öû.Øøu.

Da come potete vedere le chiavi sono consecutive,quindi trovare una delle due equivale a trovarle tutte.

Il problema è proprio quello: trovarle.
Come le possiamo trovare?
Notiamo bene "AVCEterPackManager"

Questa stringa proviene dalla classe che hanno usato per scrive il codice per cryptare e decryptare gli EPack,proveniente principalmente da Crypto++,ed è la stessa usata dal Key Bruteforcer di quel tizio.

Quindi basterà trovare quella stringa e troveremo facilmente le chiavi
screen3.png

Il resto dovreste esser capaci di farlo :)
Ovviamente esistono metodi per eludere questo sistema.
Se avete domande fatemele,ma non fatemi domande del tipo "non ci riesco,mi fai vedere tu?","me lo fai tu?","come faccio a...?";
Ricordate che da me non avrete pappa pronta,quindi se volete un aiuto,aspettatevi una risposta generica.

By d3v1l401
d3vblog.com

Come potete notare non sono stato dettagliato,e l'ho fatto di proposito onde evitare ultra-lamering e bimbate che sicuramente saranno presenti,ma in modo meno frequente
Pubblicherò altri metodi per prendere dati in questo modo,ma lo farò solo se non vedrò usi scorretti di questo metodo.

Ma soprattutto,verranno pubblicate sul mio blog,dove continuerò ad aggiornare la guida man mano che vado avanti con tecniche di questo tipo che posso rendere pubbliche.

Se dovete proprio pubblicarla altrove vorrei che voi mettiate i miei crediti.
 
Vorrei proprio vedere cosa hai capito tu di questa guida per definirla inutile.

ahah MOLTO divertente. vorrei invece capire cosa TU hai capito per definirla utile, credo che qualsiasi persona con un minimo di cervello almeno le sposti ste chiavi e possibilmente non le metta manco vicine. poi se di cervello ne hai un po' più magari hai anche cambiato quell'algoritmo di merd* con qualcuno più serio. se faccio una fottuta affermazione è perchè posso permettermelo, sapendo tranquillamente di cosa stiamo parlando, probabilmente meglio di OP e di te messi assieme.
 
ahah MOLTO divertente. vorrei invece capire cosa TU hai capito per definirla utile, credo che qualsiasi persona con un minimo di cervello almeno le sposti ste chiavi e possibilmente non le metta manco vicine. poi se di cervello ne hai un po' più magari hai anche cambiato quell'algoritmo di merd* con qualcuno più serio. se faccio una fottuta affermazione è perchè posso permettermelo, sapendo tranquillamente di cosa stiamo parlando, probabilmente meglio di OP e di te messi assieme.

Basta crederci DarkAnima.
Non ti credere che sia tanto semplice cambiare la posizione,io so che ti stai riferendo a quel semplice PUSH,ma ricorda che il codice è unpackato,basta andare in quel PUSH e trovare la chiave.
Stessa cosa riguarda l'algoritmo e qualsiasi altra cosa tu modifichi.
:)

Se poi tu sei tanto bravo non vedo l'utilità di stare qui a leggere questa guida :)
Ti ricordo che 1 persona su 100 sa di cosa parla questa guida.
 
Basta crederci DarkAnima.
Non ti credere che sia tanto semplice cambiare la posizione,io so che ti stai riferendo a quel semplice PUSH,ma ricorda che il codice è unpackato,basta andare in quel PUSH e trovare la chiave.
Stessa cosa riguarda l'algoritmo e qualsiasi altra cosa tu modifichi.
:)

Se poi tu sei tanto bravo non vedo l'utilità di stare qui a leggere questa guida :)
Ti ricordo che 1 persona su 100 sa di cosa parla questa guida.

appunto, hai appena ammesso l'inutilità. anche se io cambiassi quel semplice push, con questa guida non sapresti più dove andare a trovare le chiavi visato che basi tutto su quella stringa. per la cronaca se cambi cifratura trovi le chiavi ma non te ne fai nulla, visto che tea non è più tea, quindi non te ne fai nulla. quella persona su 100 che sa di cosa parla la guida, sicuramente conosce anche già il metodo per prendere le chiavi
 
Ultima modifica:
appunto, hai appena ammesso l'inutilità. anche se io cambiassi quel semplice push, con questa guida non sapresti più dove andare a trovare le chiavi visato che basi tutto su quella stringa. per la cronaca se cambi cifratura trovi le chiavi ma non te ne fai nulla, visto che tea non è più tea, quindi non te ne fai nulla. quella persona su 100 che sa di cosa parla la guida, sicuramente conosce anche già il metodo per prendere le chiavi

Controllo dov'è il PUSH e se sostistuisci l'algoritmo trovo quello modificato.
Se fai come Lucifer,che cambia le chiavi al decrypt e poi resetta le originali,conosco un metodo per eludere anche questo sistema.
Se vuoi fare un Detour all'algoritmo,allora hai comunque bisogno di una libreria esterna injectata,mi basta unpackarla e vedere che algoritmo usa,dopodiché adatto il detour sul decrypter/crypter di Tim66613 aggiungendo la libreria alla IAT oppure injectandola con un loader.
:)

Si è inutile,per me,per chi ha le stesse conoscenze di me se non più ampie;
ma se tutti facessero il tuo ragionamento adesso nessuno condividerebbe guide e nessuno imparerebbe qualcosa.
 
Il Key Bruteforcer di PadMak o come diamine si chiamava ha usato più o meno lo stesso ragionamento


Non credo che il bruter di padMak ricerchi una maschera di byte...
Se si chiama Bruter credo che si calcoli tutte le chiavi possibili ( 16^255 ) e che le provi una ad una, infatti gli devi dare anche il nome di un archivio al programma :D

Cmq sia guida secondo me inutile, non perchè lo è per me, ma credo sia fatta più con scopi di voler dimostrare, e non con fini di voler condividere.
IMHO una guida del genere non può avere senso per svariati motivi, inoltre ho letto in post precedenti molte stronzate ma evito di commentare.

Come potete notare non sono stato dettagliato,e l'ho fatto di proposito onde evitare ultra-lamering e bimbate che sicuramente saranno presenti,ma in modo meno frequente
Pubblicherò altri metodi per prendere dati in questo modo,ma lo farò solo se non vedrò usi scorretti di questo metodo.

Apparte che è una contraddizione, ma ti vorrei far notare che un uso corretto di questo metodo non c'è.. ( Tra l'altro alquanto obsoleto )
 
Non credo che il bruter di padMak ricerchi una maschera di byte...
Se si chiama Bruter credo che si calcoli tutte le chiavi possibili ( 16^255 ) e che le provi una ad una, infatti gli devi dare anche il nome di un archivio al programma :D

Cmq sia guida secondo me inutile, non perchè lo è per me, ma credo sia fatta più con scopi di voler dimostrare, e non con fini di voler condividere.
IMHO una guida del genere non può avere senso per svariati motivi, inoltre ho letto in post precedenti molte stronzate ma evito di commentare.



Apparte che è una contraddizione, ma ti vorrei far notare che un uso corretto di questo metodo non c'è.. ( Tra l'altro alquanto obsoleto )

Metodi per trovare altri dati.
Dragon tu ogni volta che faccio una guida dici che lo faccio come metodo per mettermi in risalto ._.
 
Si è vero, non ha alcun senso sta guida non prendiamoci in giro.. su...

---------- Post added at 21:55 ---------- Previous post was at 21:54 ----------

Che ti vuoi mettere in risalto lo dimostrano le tue risposte a dark_anima o come si chiama, quindi evitiamo di fare gli ipocriti e diciamo le cose come stanno ;)
 
Non voglio fare nessun tipo di commento per le bambinate che ho letto in queste 2 pagine.

Dico solo che hai fatto un ottimo tutorial Devil, complimenti. :D
 
Si è vero, non ha alcun senso sta guida non prendiamoci in giro.. su...

---------- Post added at 21:55 ---------- Previous post was at 21:54 ----------

Che ti vuoi mettere in risalto lo dimostrano le tue risposte a dark_anima o come si chiama, quindi evitiamo di fare gli ipocriti e diciamo le cose come stanno ;)

La mia intenzione non era quella dragon,se devo attirare l'attenzione avrei alternative migliori...
 
Controllo dov'è il PUSH e se sostistuisci l'algoritmo trovo quello modificato.
Se fai come Lucifer,che cambia le chiavi al decrypt e poi resetta le originali,conosco un metodo per eludere anche questo sistema.
Se vuoi fare un Detour all'algoritmo,allora hai comunque bisogno di una libreria esterna injectata,mi basta unpackarla e vedere che algoritmo usa,dopodiché adatto il detour sul decrypter/crypter di Tim66613 aggiungendo la libreria alla IAT oppure injectandola con un loader.
:)

Si è inutile,per me,per chi ha le stesse conoscenze di me se non più ampie;
ma se tutti facessero il tuo ragionamento adesso nessuno condividerebbe guide e nessuno imparerebbe qualcosa.

Hey , io non cambio nessuna chiave.. se pensi questo sbagli dibbrutto! ;)
In ogni caso,sto giusto testando una release scema da fare su IF ;D
 
Stato
Discussione chiusa ad ulteriori risposte.
Indietro
Top Bottom