|
quequero.org UIC
Forum
|
View
previous topic :: View
next topic |
Author |
Message |
reveng70 Guest
|
Posted: Thu Feb 10, 2005
11:31 pm Post
subject: Internal keygenning |
|
|
|
Ciao a tutti, mi
piacerebbe capire qualcosa di piu' sull'argomento... Ho
letto un po' in qua e in la' e se non sbaglio l'idea e' quella
di sfruttare l'algoritmo applicato ai dati in ingresso per
"rivoltare il programma contro se' stesso" e farci dire da lui
cosa si aspetterebbe da noi... L'idea non e' male ma
vorrei capire di piu' sulla sua applicabilita' e in generale
se c'e' qualche tute specifico sull'argomento... Ad
esempio una domandina: ma se ho un prog. che chiede un
seriale, il quale viene maneggiato fino alla nausea (mixandolo
con una firma dipendente dalle caratteristiche del PC) e il
risultato confrontato con un valore (che suppongo sia anche
lui dipendente dalle caratteristiche del PC), l'idea e' ancora
applicabile? Non riesco a capire come in tal caso potrei
espiantare l'algoritmo e farmi dare la risposta: al massimo
potrei vedere cosa succedera' ai miei dati, ma come posso
ottenere qualcosa che mi permetta di capire cosa inserire per
ottenere il valore che superi il confronto? Ok, forse mi
sono spiegato con la chiarezza di un balbuziente ubriaco .. Ma
qualcuno mi puo' dire almeno se sono completamente fuori
strada?...
Grazie. | |
Back to
top |
|
|
Zero_G Moderator
Joined: 20 May
2004 Posts: 886 Location: Dark Side of the Moon
|
Posted: Fri Feb 11, 2005
12:16 am Post
subject: Internal keygenning == Keygen Injection ? |
|
|
|
reveng70
wrote: |
Ciao a tutti, mi piacerebbe capire
qualcosa di piu' sull'argomento... Ho letto un po'
in qua e in la' e se non sbaglio l'idea e' quella di
sfruttare l'algoritmo applicato ai dati in ingresso per
"rivoltare il programma contro se' stesso" e farci dire
da lui cosa si aspetterebbe da
noi... |
quello che dici è più propriamente
detto keygen injection,
cioè si tratta di sfruttare l'algoritmo interno del programma
per beccare il seriale al varco e farlo stampare o scrivere da
qualche parte al programma stesso.
ti fà
risparmiare fatica, perché non lo devi fare te il keygen, ma
sfrutti direttamente il seriale giusto che lui stesso ha
generato per fare il confronto.
reveng70
wrote: |
L'idea non e' male ma vorrei capire di
piu' sulla sua applicabilita' e in generale se c'e'
qualche tute specifico
sull'argomento... |
se ti può interessare , ne ho scritto due
io su alcuni crackme che si prestavano particolarmente a
questo tipo di attacco, quindi se vuoi darci un'occhiata li
trovi nella UIC Store: http://www.quequero.org/uic/SOARP.htm http://www.quequero.org/uic/KeygenMe2.htm
reveng70
wrote: |
Ad esempio una domandina: ma se ho un
prog. che chiede un seriale, il quale viene maneggiato
fino alla nausea (mixandolo con una firma dipendente
dalle caratteristiche del PC) e il risultato confrontato
con un valore (che suppongo sia anche lui dipendente
dalle caratteristiche del PC), l'idea e' ancora
applicabile? |
certo che è ancora applicabile:
l'importante è che ci sia un momento in cui il seriale compare
da qualche parte per intero e soprattutto in chiaro; il
vantaggio del keygen
injection è che non ti devi preoccupare dell'algoritmo
perché in sostanza il lavoro lo fai fare a lui ed aspetti solo
che abbia finito. diciamo che in fondo lo prendi per il c...
reveng70
wrote: |
Non riesco a capire come in tal caso
potrei espiantare l'algoritmo e farmi dare la risposta:
al massimo potrei vedere cosa succedera' ai miei dati,
ma come posso ottenere qualcosa che mi permetta di
capire cosa inserire per ottenere il valore che superi
il confronto? |
forse te parli di keygen in generale: fare un
keygen significa scrivere un programma che ricalca esattamente
l'algoritmo che il programma usa per validare il codice da te
immesso; se in origine prendeva i dati del tuo computer e li
usava per calcolare un seriale buono, significa che una volta
reversato e schematizzato l'intero procedimento devi
rimboccarti le maniche e "codare" un piccolo programmetto che
replichi questo comportamento per darti il seriale corretto.
ovviamente ciò implica che l'hai reversato del tutto e che sai
programmare bene...
reveng70
wrote: |
Ok, forse mi sono spiegato con la
chiarezza di un balbuziente ubriaco .. Ma qualcuno
mi puo' dire almeno se sono completamente fuori
strada?... |
ho apprezzato molto la figura del balbuziente ubriaco...
prego!
-=Zero_G=- _________________ "To see a World in
a grain of Sand, Hold Infinity in palm of your
Hand." | |
Back to
top |
|
|
reveng70 Guest
|
Posted: Fri Feb 11, 2005
9:57 pm Post subject:
|
|
|
|
Grazie Zero_G, ho
capito gia' qualcosa in piu' e comunque mi sono scaricato i
tuoi tutorial, appena mi arriva la nuova dose di anfetamine
provo a leggermeli... Comunque
continuo ad avere dei dubbi legati all'ultimo caso che sto
affrontando... Se hai pazienza provo ad essere un po' meno
balbuziente (sul meno ubriaco non posso garantire...
). Allora, il sw parte con un dialog dove mi mostra in un
editbox un numero a 32 bit che e' il machineID (MID).
Sotto c'e' un editbox vuoto dove devo inserire il SERIAL.
Tracciandolo con olly ho ricostruito cosa succede: il MID
viene xorato con una costante e il risultato (lo chiamo
MIDXOR) viene salvato. Subito dopo viene chiamata una
funzione (chiaramente di stampo "hashing" vista la dose di
shift, and, xor presenti) che a partire da MIDXOR e da SERIAL
produce alla fine un numeraccio NUM. A questo punto i 16
bit bassi di NUM vengono confrontati con una KOSTANTE e c'e'
il classico bivio test eax,eax + jne. Ovviamente
patchandolo si risolve tutto, ma il mio interesse era nel
capire come trovare SERIAL. Mi sa che il reversing della
routine di hashing e' un po' fuori dalla mia portata, quindi
ho cominciato a chiedermi se il keygen injection mi potesse
aiutare... Il problema che vedo e' che qui non confronta cio'
che inserisco con una elaborazione di un nome (tipico esempio
che ho trovato nei tute finora), ma confronta il risultato
dell'elaborazione di due input (SERIAL e MIDXOR) con qualcosa
che sembra una costante... Ok, credo di essermi
spiegato... Se puoi dedicarmi un paio di neuroni te ne saro'
grato... | |
Back to
top |
|
|
Shub-Nigurrath Intermediate
Joined: 16 Jul 2004 Posts: 89 Location:
Oscura Kadath
|
Posted: Sat Feb 12, 2005
1:10 am Post subject:
|
|
|
|
Ciao, sull'argomento ci
ho lavorato un po su ed una valida variante del keygen
injection o del self-keygen è quella degli oraculum.
Guardati in merito il tutorial su http://tutorials.accessroot.com/ "Oraculum
Tutorial With Framework Src V11"
E' un po lungo, ma
puoi saltare le cose che già conosci. In pratica l'oraculum
non fa altro che andare a pescare le cose che ti servono
(fishing diretto o comunque ti peschi quello che ti pare) da
dentro al programma, tramite un loader esterno. Il grande
vantaggio rispetto al classico injection è che non inietti
proprio nulla ed in questo modo la dipendenza fra le
differenti versioni del programma si riduce a zero e riesci
anche a fare un self-keygen che funzioni con qualsiasi
versione del programma (cosa che non era possibile prima,,
visto che immettevi del codice non
piccolissimo). _________________ &8~) Ŝħůβ-Ňìĝüŕřāŧħ
- W la 1111000111001010 | |
Back to
top |
|
|
Zero_G Moderator
Joined: 20 May
2004 Posts: 886 Location: Dark Side of the Moon
|
Posted: Sat Feb 12, 2005
3:44 am Post subject:
|
|
|
|
reveng, il problema è che
non sempre si può fare keygen injection! la lampadina si deve
accendere quando ci sono dei confronti in chiaro tra il
seriale buono e quello immesso e quando è possibile sfruttare
qualche operazione di stampa propria del programma (tipo un
ex-NagScreen... ) se il check avviene tramite hashing come mi
dici te, ci sta che questa funzione venga calcolata sul
seriale immesso e poi confrontata con quello che sembra una
costante perché forse tutti i seriali buoni danno quel valore
lì di hash. però questo non lo so, perché non posso vedere il
codice... cmq se ti
leggi il mio tutorial sul SOARP, che è per l'appunto un
crackme didatticamente utile, probabilmente riesci a farti
meglio un'idea di questo sistema, che in fin dei conti è molto
semplice se si sa dove intervenire.
-=Zero_G=- _________________ "To see a World in
a grain of Sand, Hold Infinity in palm of your
Hand." | |
Back to
top |
|
|
bender0 Guru
Joined: 18 Jan
2004 Posts: 390 Location: ~/
|
Posted: Sat Feb 12, 2005
2:52 pm Post subject:
|
|
|
|
mmmh... se il prog calcola
una hash dal tuo nome puoi costruirti un bruteforcer
iniettato. inietti poche linee di codice per creare\caricare
le stringhe di bruteforce (il metodo di bf lo scegli tu) e per
chiamare la funzione che le controlla a ripetizione, oltre
ovviamente a segnalarti i serial che trova. non è
semplicissimo ma... è un'esperienza _________________ b0 | |
Back to
top |
|
|
reveng70 Guest
|
Posted: Sat Feb 12, 2005
8:38 pm Post subject:
|
|
|
|
Ok ragazzi, qualche
nebbia si sta diradando... Sto finendo i tute di Zero_G, e
poi sono rimasto molto colpito dal discorso dell'oraculum...
Ho iniziato a leggerlo e, come dire, sono quasi folgorato,
sia per il tema interessante, sia per la professionalita' di
Shub... E proprio per quello mi sono anche affacciato sul
forum di arteam... Oddio ma ci vorrebbe un'altra vita per
imparare tutta sta roba... Rischio l'overload del sistema...
Vado a prendermi una biretta... | |
Back to
top |
|
|
Shub-Nigurrath Intermediate
Joined: 16 Jul 2004 Posts: 89 Location:
Oscura Kadath
|
Posted: Sun Feb 13, 2005
2:39 am Post subject:
|
|
|
|
beh, grazie per i
complimenti..spero il mio lavoretto sia alla loro altezza..
_________________ &8~) Ŝħůβ-Ňìĝüŕřāŧħ - W
la 1111000111001010 | |
Back to
top |
|
|
|
Watch
this topic for replies |
You can post new topics in this forum You
can reply to topics in this forum You can edit your
posts in this forum You can delete your posts in this
forum You can vote in polls in this forum You
can moderate
this forum |
|