BY AESCULAPIUS
AMU Q/95 3.10 CRACK BY AESCULAPIUS
----------------------------------
Ciao a tutti. Vi mostrerò nelle prossime righe come crackare AMU W/95
3.10 usando il metodo 'dead listing' . Naturalmente , dovrai prima leggerti
, la lezione 9.3 del Maestro +ORC lesson 9.3. Avrai anke bisogno di un buon disassembler,
come w32dasm7 (già patchato da uno degli studenti del famoso +ORC ).
AMU (automated maintenance utility) è un eccellente applicazione per
controllare delle aree di files e contenente alcuni utlissimi messaggi automatici che
alleggerirannoe il carico giornaliero del sysop quando stai facendo correre un sistema BBS.
Puoi trovarne una copia a http://www.isonline.com/amu. Installa il programma come di solito.
Comincia a disassemblare il file amuw.exe. Avrai un file di testo abbastanza grande.
Caricalo nel tuo word peocessor preferito. Ok, stai facendo un ottimo lavoro. Ora
puoi fare un po' di analisi ZEN. Cosa cerchi? AMU è protetto con due diversi metodi
, il primo , consiste in un avviso ke dice 'unregistered for nn days' ogni volta ke fai correre il programmae
Il primo giorno l'avviso recita:" Unregistered for (1 day)". Il giorno dopo
reciterà :" Unregistered for (nn) days", dove 'nn' è il numero di giorni
da cui stiamo usando il programma senza registrazione. Il secondo metodo ès un limite
di tempo di 30 giorni, dopo ke il programma finirà di lavorare
(Goddamn it!). Tu puoi dedurre anke solo usando la tuo sostanza cerebrale un po'
più del solito ke questo programma si registra tramite uno speciale
key file kiamato 'amu.key'. Come lo so?? Leggendo il manuale d'istruzioni :).
Ora sappiamo cosa stiamo cercando, carikiamo il file d testo nel nostro word processor
preferito e clikkiamo sul pulsante "search", digitando le seguenti stringhe da trovare :"amu.key"
e 'Licensed'. Avremo un segmento di codice moolto interessantequando troveremo 'amu.key'. Eccolo qui sotto riportato:
:0041B4AC 68C0000000 push 000000C0
:0041B4B1 E8FBDD0100 call 004392B1
:0041B4B6 53 push ebx ; pusha i vari registri...
:0041B4B7 51 push ecx
:0041B4B8 52 push edx
:0041B4B9 56 push esi
:0041B4BA 57 push edi
:0041B4BB 55 push ebp
:0041B4BC 89E5 mov ebp, esp
:0041B4BE 81EC94000000 sub esp, 00000094
:0041B4C4 8945FC mov [ebp-04], eax ; [ebp-04] potrebbe
:0041B4C7 8B45FC mov eax, [ebp-04] tessre la locazione di memoria
:0041B4CA 057B190000 add eax, 0000197B dove è situato
:0041B4CF 50 push eax l' unregistered 'days counter' ?
* Possible StringData Ref from Data Obj ->"%sAMU.KEY"
Molto interessante, ma a questo punto non sono ancora sicuro di niente. Starei
mentendo come molti altri credo facciano, se dicessi: "sto usando solamente, e
ripeto solamente, il 'dead listing approach' per risolvere questo crack e posso dire senza dubbi
cosa sta contenendo o facendo questo registro". Una cosa che voi non sapete è che questi ke lo dicono avevano già
fatto correre il programma sotto SoftIce, conoscendo quindi già cosa è contenuto in ogni registro ed in ogni
locazione di memoria. In questo modo, le loro analisi sembrano essere quelle di un genio. Non ho mai fatto correre questo
programma in softice, quindi le mie ipotesi riguardo quello ke è contenuto nei vari registri o nelle locazioni
di memoria potrebbero essere sbagliate di grosso, ma anke se mi sbaglio, sono sincero!
Puoi caricare questo programma in SoftIce e crackarlo con una mano dietro la schiena ed
un okkio kiuso, ma quasto non è il punto, quello ke stiamo cercando di provare è ke
il 'dead listing approach' è la migliore strategia quando ti trovi di fronte a protezioni fatte con un Nag-screen
e l'unica cosa ke vuoi fare è un crack ben riuscito.
Ora, ke penso ke il codice in questa prima parte di codice, istia cercando
nella directory di AMU il file amu.key, se lo trova, allora fa partire delle sequenze
matematiche per convalidare la kiave. Se la kiave è falsa, probabilmente svolge
l'esecuzione dentro una delle call di questo segmento di codice o di uno ke non abbiamo
ancora visto.
Ora, andiamo a vedere alla nostra prossima locazione. Clikkate sul bottone "search" del vostro
word processor e cercate la stringa: 'Licensed'.
Questo sarà quello ke avrete:
:0041B679 B8E4204500 mov eax, 004520E4
:0041B67E 50 push eax
:0041B67F 8B45FC mov eax, [ebp-04]
:0041B682 057B190000 add eax, 0000197B
:0041B687 50 push eax
* Possible StringData Ref from Data Obj ->"%s%s"
|
:0041B688 B8E7204500 mov eax, 004520E7
:0041B68D 50 push eax
:0041B68E 8D459C lea eax, [ebp-64]
:0041B691 50 push eax
:0041B692 E81EDE0100 call 004394B5
:0041B697 83C410 add esp, 00000010
:0041B69A BA80010000 mov edx, 00000180
:0041B69F 8D459C lea eax, [ebp-64]
:0041B6A2 E876DD0100 call 0043941D
:0041B6A7 8D459C lea eax, [ebp-64]
:0041B6AA E8A9DD0100 call 00439458
:0041B6AF 8B45FC mov eax, [ebp-04]
:0041B6B2 83C028 add eax, 00000028
:0041B6B5 50 push eax
* Possible StringData Ref from Data Obj ->"Licensed to %s"
Come puoi vedere, siamo in mezzo ad un codice ke viene eeseguito quando il programma
corre nella sua versionet registratae. Questo segmento comincia a :0041B679,
prima di questa instruzione c'è un unconditional jump ke impedisce
al programma di eseguire questa parte senza l'ausilio di un conditional
jump. Quello ke dobbiamo fare è steppare un po' indietro per trovare
un salto condizionato, ke porterà all'esecuzione di questa benedetta area ke comincia
a :0041B679 e ke ci fa evitare il salto incondizionato a :0041B677. Steppando all'indietro
troveremo quello ke stiamo cercando:
:0041B4D0 B89A204500 mov eax, 0045209A
:0041B4D5 50 push eax
:0041B4D6 8D459C lea eax, [ebp-64]
:0041B4D9 50 push eax
:0041B4DA E8D6DF0100 call 004394B5
:0041B4DF 83C40C add esp, 0000000C
:0041B4E2 8D559C lea edx, [ebp-64]
:0041B4E5 B89C394600 mov eax, 0046399C
:0041B4EA E8B1CB0000 call 004280A0
:0041B4EF 89C2 mov edx, eax
:0041B4F1 8D857CFFFFFF lea eax, [ebp+FFFFFF7C]
:0041B4F7 E8E9DF0100 call 004394E5
:0041B4FC 8D957CFFFFFF lea edx, [ebp+FFFFFF7C]
:0041B502 B86E344600 mov eax, 0046346E
:0041B507 E8F666FFFF call 00411C02
:0041B50C 8D957CFFFFFF lea edx, [ebp+FFFFFF7C]
:0041B512 B86E344600 mov eax, 0046346E
:0041B517 E88166FFFF call 00411B9D
:0041B51C 80BD7CFFFFFF00 cmp byte ptr [ebp+FFFFFF7C], 00 ; Flag?
:0041B523 7415 je 0041B53A ; salta a
:0041B525 8D957CFFFFFF lea edx, [ebp+FFFFFF7C] :0041B53A
:0041B52B 8B45FC mov eax, [ebp-04] dove un
:0041B52E 83C028 add eax, 00000028 salto incondizionato
:0041B531 E899DD0100 call 004392CF ci porta via dal nostro
:0041B536 85C0 test eax, eax dal nostro amato
:0041B538 7502 jne 0041B53C :0041B543 jump
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0041B523(C)
|
:0041B53A EB0D jmp 0041B549 ; Questo jump porta il
programma alla zona di guerra :)
(unregistered segments
of the code)
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0041B538(C)
|
:0041B53C 8B45FC mov eax, [ebp-04] ; Il contatore!!!
:0041B53F 80782800 cmp [eax+28], 00
:0041B543 0F8530010000 jne 0041B679 ; Il nostro jump!!!
Ok, abbiamo quasi fatto. Quello ke dobbiamo fare (nel caso non ci foste ancora arrivati)
è cambiare l'esecuzione da :0041B523 a :0041B543 e quindi, possiamo
metter un :0041B679 dove si comincia a ballare!!!
Perkè non fare un saltone direttamente da :0041B523 a :0041B679 ?
Perkè non si può fare un salto intrasegmentario così grande nell'assembler!!
Procediamo: Con un buon Hex editor (Io preferisco Hiew v. 5.50 o
PSEDIT 4.4) cercate il seguente codice esadecimale:
74158D957CFFFFFF ; e cambiatelo per:
EB1E8D957CFFFFFF ; questo cambiamento sostituirà
l'istruzione:
:0041B523 je 0041B53A ; in:
:0041B523 jmp 0041B543
quindi cercate questa stringa:
0F8530010000 ; e cambiatela perr:
E93101000000 ; quaesto cambio sostituirà l'istruzione:
:0041B543 jne 0041B679 ; in:
:0041B543 jmp 0041B679
Come potete notare, ho cambiato entrambi i salti condizionali in salti unconditional,
il motivo è che così non sarà importante il contenuto del contatore,
l'esecuzione andrà sempre a finire bene (....per noi ;)) .
Ci sono talte altri parti di questo schema di protezione ke varrebbe la pena sondare
e capire. Per esempio,
:0041B715 837DFC1E cmp [ebp-04], 0000001E
:0041B719 7F06 jg 0041B721
1E Esadecimale è 30 decimale!!! 30 giorni è il nostro periodo di libero
utilizzo. Questo significa ke [ebp-04] è effettivamente il contatore...
Poco dopo, alla locazione:
:0041B728 837DFC3C cmp [ebp-04], 0000003C
:0041B72C 7F06 jg 0041B734
Guardate questo:, 3C Hex è 60 decimale. Questo significa ke il programma
vi permette di utilizzare il programma per 30 giorni dopo 30 giorni di continuo uso,
quindi il periodo di libero utilizzo è di fatto di 60 giorni, dopo i quali il programma
smetterà di funzionare. Segui il salto a to :0041B734 e capirai cosa intendo...
Ci sono migliaia di modi per crakkare questo programma, guarda il mio e prova a farne
uno tutto tuo.
Dopo tutto questo smanettare, AMU non scadrà e quando verrà fatto correre
ti mostrerà una finestra con scritto "Registered to: il tou nome".
Non sono un fortunato studente di +ORC anke se mi piacerebbe esserlo. Purtroppo
ho saputo della sua +HCU troppo tardi. Comunque, posso sempre dividere la mia buona
conoscenza di cracking con +ORC e i +suoi studenti.
Se questo testo sarà pubblicato scriverò un'altra lezione dove vi insegnerò
alcune nuove tecnike di cracking.
bye bye!
Aesculapius...
aesculapius@cyberjunkie.com
Aesculapius 1997. All rights reversed.