|
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
- 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.
- 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.
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..
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.
- 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
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).
- 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.
-