Pain Shop Pro 6.01
Quando il WDasm fallisce


22-2-2000

by "DaRk PlaGuE"

 

 

UIC's Home Page

Published by Quequero


Che cazzo di data

Crackiamo il famoso PSP6...buon tute dark

Questa è sempre l'area dedicata a me :).....Cmq BRAVISSIMO un ottimo tute su PSP, oggetto anche di una lezione di +ORC :)

 
UIC's form E-mail: [email protected] UIC's form

Difficoltà

(x)NewBies (x)Intermedio ( )Avanzato ( )Master

 

Stiamo per patchare il PSP 6.01; uno dei più utili e famosi programmi di grafica che abbia mai visto.


Pain Shop Pro 6.01
Quando il WDasm fallisce
Written by DaRk PlaGuE

Introduzione

Eccoci di nuovo qua. Tutto è cominciato quando circa un mese fa mi sono SCARICATO dalla rete il PSP 6.01 per provare Getright. Bambini non fatelo a casa senza un programma del genere perchè scaricare circa 14 Mb tutti di fila senza interruzioni non è molto bello. Comunque, avevo provato velocemente a craccarlo con il WDasm (altra pazzia) ma questo mi si bloccava mentre cercava di aprire il file e per un po' ho abbandonato il progetto. Due settimane fa poi mi sono rivolto al forum di Ringzer0 per chiedere aiuto e così grazie ai consigli di +Mad ho finito il tutto in una settimana di lavoro saltuario.

Tools usati

Soft-Ice
Exescope
Hex Workshop (o un qualsiasi editor esadecimale)
Hiew (poi vi spiego a cosa mi è servito)
Mi pare di averli trovati tutti nel sito di Que.

URL o FTP del programma

Non vi sconsiglio di scaricarlo dalla rete ma di prenderlo dal CD omaggio di qualche rivista; se però volete proprio scaricarlo lo trovate un po' dappertutto..

Notizie sul programma 

Chi non conosce il PSP 6.01 ?!?!?!?!?!?!

Per chi non sapesse di cosa si tratta ecco una breve descrizione presa dall'Help del programma:
 
"Jasc Paint Shop Pro 6.01 contains all the tools you need for creating, editing, and retouching your images. It is friendly enough for the casual user who wants to enhance family photographs, yet powerful enough for the professional who needs to create multi-layered graphics. This version, with the new vector layer features, gives Paint Shop Pro enhanced drawing capabilities."
Se non sai l'inglese non so come tu possa vivere; in altre parole ARRANGIATI. A parte questo il programma dura 30 giorni più altri trenta di bonus, non presenta possibilità di essere registrato e quindi dovremo patcharlo.

Essay

Let's go !!! Il programma, appena avviato ci mostra un bel nag con due tasti (in realtà sono finti perchè sono disegnati sul nag): "OK" e "Order". Se clicchiamo su OK il programma parte altrimenti se clicchiamo su Order ci viene mostrata la guida in linea. Il programma, inoltre, ti obbliga ad aspettare sette secondi prima di poter cliccare da qualsiasi parte. Io ho seguito questo procedimento:
 
- Ho soppresso il conto alla rovescia.
- Ho fatto si che il Nag scompaia da solo. (Questa è l'unica parte un po' bellina per il resto la protezione è una cazzata).
- Ho cambiato l'immagine del nag Shareware con una senza i tasti disegnati.
- Ho soppresso le stringhe che dicevano: "Il programma era da consumarsi preferibilmente entro il ....e tu lo hai fatto marcire (e adesso sono cazzi tuoi)".[Quest'ultima parte è però incompleta perchè non capisco da dove salta fuori la scritta "Version 6.01 Evaluation" che compare in alto a destra del nag.] NON E' PIU' COSI', FINALMENTE L'HO CAPITO. ANDATE A VEDERE ALLA FINE L'AGGIORNAMENTO.


P.S. Per applicare le modifiche nei punti 1 e 2 ho usato Hiew perchè permette di cambiare i bytes nel disassemblato (ebbene sì, dove non riesce Wdasm arriva Hiew) semplicemente scrivendo una nuova istruzione assembler per i punti 3 e 4 ho usato Hex Workshop (perchè non riuscivo con hiew) :-(

P.S. 2 Il procedimento per l'Animation Shop è identico.
PUNTO 1° I vostri programmi si ostinano a voler scadere dopo trenta giorni?
                   Ecco come sopprimere facilmente questo conto alla rovescia.
Dunque partiamo dal fatto che il modo più semplice per effettuare un controlla sulla data è quello di settare un cmp [giorni passati dall'installazione], [giorni totali]. Questo è proprio quello che fa PSP. Come trovare questo cmp? Noi ci agganceremo all'api "time" chiamata da "msvcrt.dll" e visto che questa non è tra le stringhe predefinite del Soft-ice dovrete aggiungerla manualmente (EXP=c:\windows\system\msvcrt.dll) nel winice.dat altrimenti non poppa. Fatto questo salvate e riavviate Windows. Adesso siete pronti. Ora, visto che soft-ice non mi poppava subito se piazzavo il preakpoint prima di eseguire PSP dovremmo usare un semplice stratagemma e ovvero dovremo premere Ctrl+D poco dopo aver fatto partire il prog. e prima che compaia il nag. Così facendo dovremmo ritrovarci in PSP (se non è così dovremo uscire ed entrare in Soft-Ice fino a quando non lo prendiamo). Piazziamo in bp su "time" (bpx time) e usciamo da Sice.
 
Piccolo excursus:
mi piacerebbe dire come funziona precisamente l'api time, per mettere più note nel codice, ma tutte le informazioni che ho sono queste:
"Time
The Microsoft® Win32® application programming interface (API) provides a variety of date and time functions, structures, and messages to retrieve and set the date and time for the system, files, and the local time zone."
Fine excursus.
 
Sice poppa automaticamente, F11 e ci troviamo qua:
 
.................................
0076C52D call time ;MSVCRT.dll
0076C533 mov ecx,[esp][00028]                        Qui approdiamo noi e da qui cercheremo tutti i cmp
0076C537 mov edx,[esp][00064]
0076C53B push ecx
0076C53C push edx
[...]
0076C55E add edx,eax
0076C560 lea esi,[edx][00001]
0076C563 cmp esi,001                                        (1) Ecco il primo
0076C566 jge .00076C56D
0076C568 mov esi,00000005B
[...]
0076C5C3 call ebx
0076C5C5 add esp,004
0076C5C8 cmp esi,eax                                        (2) Eccone un altro
0076C5CA push esi
0076C5CB jge .00076C5D9
0076C5CD lea edx,[esp][00014]
0076C5D1 push 000005CBF
.......................
Se al punto (1) guardiamo cosa c'è in esi (d esi) vedremo subito che contiene i giorni di utilizzo. Però questo confronto ci interessa relativamente poco perchè quello che determina se far funzionare il programma o meno è il (2). Qui infatti esi contiene i nostri giorni e eax contiene 30. Come facciamo ad annullare il conteggio? Semplice: cambiamo il cmp esi, eax in "xor esi, esi" di modo che il contenuto di esi sarà azzerato ad ogni avvio.
 
PUNTO 2° Cliccare ad ogni avvio su "ok" vi fa venire i crampi?
                   Fate fare questo sporco lavoro al programma. :-)
Ora, visto che il programma non scade più si tratta solo di renderlo più gradevole. Per prima cosa facciamo scomparire da solo il nag sfruttando il fatto che ci fa aspettare sette secondi prima di farci cliccare su Ok. Per entrare nella parte di codice dove viene controllato se viene cliccato il tasto ok dovremmo usare un piccolo stratagemma che mi ha suggerito +Mad:
 
"Per trovare un buon punto di ingresso, appoggiati a un'API che sicuramente viene chiamata quando premi un tasto sul nag screen: WinHelp (ovviamente premendo help). Passando per questa API dovresti trovare un punto comune di ingresso di ogni pressione dei tasti sul nag screen. Quindi premendo il tasto OK, studia i salti condizionali che avvengono. Chiudi tutto e rilancia il programma: forzando i salti condizionali in modo che simulino la pressione del tasto OK, il nag si chiuderà da solo."

Noi faremo proprio questo: piazziamo un Bb su winhelp (bpx winhelp) e clicchiamo su order. Ora steppiamo con F10 (è un po' lungo però avete sempre sotto controllo il codice e non rischiate di non vedere qualcosa) fino ad entrare in PSP e ci troviamo qua:
.............................
0076BBAE push ecx
0076BBAF push eax
0076BBB0 call WinHelpA ;USER32.dll              Questa è la call appena richiamata.
0076BBB6 test eax,eax                                       Noi siamo qui.
0076BBB8 jne 00076BBC8
0076BBBA push 0FF
0076BBBC push 000
0076BBBE push 000005DB6
..........................

Adesso diamo un'occhiata in alto per vedere se c'è qualcosa di interessante ed ecco cosa vediamo: alla riga 76BAFA c'è una chiamata e PtInRect. Questa serve a delimitare un'area rettangolare (in questo caso il nag) e a controllarla quando si clicca. Quindi piazziamo un Bp su quell'istruzione e torniamo in windows. Chiudiamo il file help e proviamo a cliccare ancora su order per vedere se il PSP passa per quel punto. Effettivamente il sice Poppa. Usciamo, chiudiamo la guida e proviamo a cliccare su Ok.......il Sice poppa anche ora. (Non uscite da Soft-Ice). Perfetto abbiamo preso il punto del programma dove vengono controllati i clic sul nag (questo lo capiamo dal fatto che Sice non poppa da solo ma solo quando clicchiamo). Adesso dobbiamo controllare come si comportano i jmp condizionali quando viene cliccato Ok (ovvero adesso).Steppiamo con F10 e controlliamo tutti i salti condizionali. Ecco cosa succede:
..........................
0076BAE7: add esp,018
0076BAEA: cmp d,[eax][00004],000000201
0076BAF1: jne 00076BCCF                                     Questo salto non deve essere eseguito per simulare il clic del                                                                                       mouse!!!      
0076BAF7: mov esi,[eax][0000C]
0076BAFA: mov ebp,[00098B540]                            Partiamo da qua (PtInRect)
0076BB00: xor edi,edi
0076BB02: lea ecx,[esp][00018]
0076BB06: mov di,[eax][0000C]
0076BB0A: shr esi,010
0076BB0D: push esi
0076BB0E: push edi
0076BB0F: push ecx
0076BB10: call ebp
0076BB12: test eax,eax
0076BB14: je 00076BBFE                                          Questo salto viene eseguito
0076BB1A: lea ecx,[esp][00048]                                                                                             
[....]                                                                                                                                           
0076BBFE: push esi                                                     Dalla riga 0076BB14 arriviamo qua
0076BBFF: lea edx,[esp][0002C]
0076BC03: push edi
0076BC04: push edx
0076BC05: call ebp
0076BC07: test eax,eax
0076BC09: je 00076BCCF                                         Questo salto non viene eseguito
0076BC0F: mov eax,[000930B24]
0076BC14: test eax,eax
0076BC16: je 00076BCA7                                         Questo salto non viene eseguito
0076BC1C: mov esi,[000930B2C]
0076BC22: call 0008334B0
0076BC27: mov edi,[eax][00004]
0076BC2A: test esi,esi
0076BC2C: je 00076BCA7                                        Questo salto non viene eseguito
0076BC2E: mov eax,[esi][00020]
0076BC31: push eax
0076BC32: call GetParent ;USER32.dll
0076BC38: push eax
0076BC39: call 0008334EC
0076BC3E: push 000
0076BC40: push 000020000
0076BC45: push 000
0076BC47: mov ecx,eax
0076BC49: call 000833F9C
0076BC4E: mov eax,[000930B24]
0076BC53: test eax,eax
0076BC55: jne 00076BC5E                                       Questo salto viene eseguito
0076BC57: mov edx,[edi]
0076BC59: mov ecx,edi
0076BC5B: call d,[edx][00070]
0076BC5E: mov eax,[esi]                                             Dalla riga 0076BC55 arriviamo qua
0076BC60: mov ecx,esi
0076BC62: call d,[eax][00060]
0076BC65: call 000833888
0076BC6A: test eax,eax
0076BC6C: je 00076BC77                                        Questo salto non viene eseguito
0076BC6E: mov edx,[eax]
0076BC70: mov ecx,eax
0076BC72: call d,[edx][0007C]
0076BC75: jmp 00076BC79
0076BC77: xor eax,eax
0076BC79: mov eax,[eax][00020]
0076BC7C: push eax
0076BC7D: call UpdateWindow ;USER32.dll             Qui viene effettivamente cancellato il Nag.
0076BC83: mov ecx,edi
0076BC85: call 00040FBFA
..........................

Adesso non ci resta che cambiare tutti i Jxx in questo modo:
0076BB14: je 00076BBFE    (Questi due salti devono diventare Jmp)
0076BC55: jne 00076BC5E

0076BC09: je 00076BCCF    (Questi quattro salti devono essere "Noppati" hex 90)
0076BC16: je 00076BCA7     
0076BC2C: je 00076BCA7    
0076BC6C: je 00076BC77

Inoltre per simulare la pressione del tasto del mouse (ricordate che Soft-Ice Poppa solo dopo aver cliccato, se mettiamo un Bp su PtInRect) dobbiamo "Noppare" anche il salto 0076BAF1: jne 00076BCCF. Fatto tutto ciò il Psp una volta fatto partire chiuderà automaticamente il Nag. E anche questo punto è fatto !!!! ;-))

PUNTO 3° Perchè mai dobbiamo tenere un nag con due tasti se poi non ci servono?
Adesso cambieremo questo nag con i due tast (ok e order) con un che non li ha. Voi mi direte: "Come facciamo a cancellare i tasti?" Ebbene non possiamo perchè i tasti sono "disegnati" sul nag. In compenso, però, ci vengono in aiuto i programmatori della Jasc e ora capirete perchè. Aprite il PSP con Exescope e guardate sotto Resourcee poi Dib. Date un'occhiata al 385 e al 383. Allora? Visto che gentili. Infatti oltre a darci una immagine del Nag con i due tasti ce ne danno anche una senza !!! Adesso dobbiamo solo dire al programma di farci vedere quella senza i due tasti. Sicuramente l'Id verrà Pushata prima di una call e quindi ci basterà cambiare il numero dell'Id da pushare da 385 a 383. Prima, però, dobbiamo ricordarci un paio di cose:

1- I numeri in Exescope sono decimali mentre nel programma sono esadecimali e quindi dovremo convertirli con la calcolatrice di windows. 385 ==> 01 81      383 ==> 01 7F.
2- Il codice per i push è 68 e i numeri sono pushati al contrario.
 
In base a queste due cose dobbiamo cercare in Hex Workshop un 68 81 01 da cambiare in 68 7F 01. Ogni volta che troveremo un 68 81 01 (non sono moltissimi in tutto il programma) proveremo a cambiare 81 in 7F e avvieremo il Psp (ricordatevi di rimettere tutto a posto se non è il push esatto). In questo modo scopriremo che il byte da cambiare è all'offset:36BE0f. Fatto ciò il Nag iniziale non è più quello dello shareware. Eh Eh, anche qui ho finito. E adesso l'ultima parte ovvero:

PUNTO 4° Per quale ragione dobbiamo sapere che siamo al giorno zero se tanto rimarrà sempre quello?

Ora sopprimeremo la stringa che compare sul nag e che ci informa che siamo al giorno zero. Per eliminarla ci sono due metodi:
1- La cerchiamo con Hex Workshop e sostituiamo ogni lettera con uno spazio.
2- La cancelliamo completamente con l'Exescope.
Visto che il primo metodo è più che intuitivo vi spiegherò solo il secondo.
Dopo aver aperto il PSP con Exescope cercare sotto Reourcee poi sotto String. Quella che ci interessa è, sotto 1485 al numero 23744. Infatti quando i giorni sono 0 ci mostra questa. Per cancellarla evidenziatela e cancellatela (facile No?). Salvate e avete finito!!

Con questo si conclude il tutorial sul PSP 6.01. Spero di essere stato chiaro. Se così non fosse scrivetemi pure e vi spiegherò qualsiasi (forse) cosa (inerente al PSP 6.01). Ciao a tutti e buon divertimento !!!

--------------------------------------AGGIORNAMENTO--------------------------------------

Ho finalmente capito come togliere la scritta "Evaluation" dal Nag-Screen. Era una boiata estrema e non ci avevo pensato. Dunque, per togliere quella maledetta scritta dovrete aprire il Psp (e l'Animation shop) con l'Hex Workshop e cercare (con F3) la "Text string" Evaluation ricordandovi di selezionare l'opzione ASCII String. Dategli l'OK e troverete una sola scritta evaluation o meglio troverete "[spazio]Evaluation" in esadecimale "20 45 76 61 6C 75 61 74 69 6F 6E". Per togliere la scritta vi basterà sostituire lo spazio iniziale (20h) con 00 facendo diventare la strina "[Null]Evaluation" in hex "00 45 76 61 6C 75 61 74 69 6F 6E". In questo modo quando il programma non presenterà più la scritta infame.

Ora si che ho veramente finito. Ciao

                                                                                                          DaRk PlaGuE

Note finali

E anche questa è andata. Ora volevo ringraziare Quequero perchè mi sembra più che giusto.
E ora qualche ringraziamento:
Grazie a +Mad ancora perchè è grazie a lui se ho potuto craccare questo Prog.
Saluto Max (adesso che ho finito questo riguardo il M98. Tu fatti sentire).

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.

 
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