************************************************************************************
* CRACKING par
Alexia[SKY],eBrain,TiPiaX *
************************************************************************************
1 - Easy soft
CD menu générateur par Alexia[SKY]
Materiel
nécéssaires :
Un editeur
HEXADECIMAL, style Hex Works Shop, Hiew etc....
Ce
programme à pour but de vous aider à préparer vos compiles sur cd.
Compression,
présentation, etc...
En sa
version SHAREWARE, il a cependant un inconvénient majeur.
Dès que
vous générez un joli menu, UREGISTRERES VERSION apparaît dans tous les sens.
Sur chacune
des fenêtres générées, 3 en l'occurrence.
Notre but est
donc de supprimer ce stupide message de ce stupide logiciel.
Nous
l'installons et avons ces fichiers executables :
Lavmenu.exe,
Menu.exe, et 2 autres qui ne nous interessent pas. Si nous lançons le
Menu.exe,une erreur
apparaît:"ERROR : File not Found [2] Creating
menu.tps\ !farver etc."
Ce n'est pas celui la. On
lance Lavmenu.exe, et la tout se passe bien.
On fait un
peu n'importe quoi, le but étant de générer les fichiers.
Je ne
m'attarde pas sur les commandes de ce log, on est pas là pour ça.
Nous
générons notre fichier et le lançons. Voilà notre fameux UREGISTRERES VERSION
partout.
(Avec un
nom comme ça, on ne peut pas s'empécher de le cracker ;)).
On quitte
et on regarde les fichiers générés.
Autorun.inf,
qui lui même fait appel au fichier menu.exe présent aussi dans ce repertoire.
On en
conclue donc qu'il colle son Menu.exe ici dans ce repertoire.Ca doit être ça.
Prenez
votre editeur hexadecimal, et ouvrez le fichier Menu.exe du répertoire
d'install du log.
Faites
Find, Recherchez UREGIS (c'est pas la peine de mettre ça au complet..)
PAF ! ! !
On le tient. Il est-là. modifiez ça par des espaces (20 en ascii), continuez la
recherche.
L'opération
se fera 3 fois, une fois tout remplacés par des espaces, enregistrez, générez
un fichier. BAK
(Habitude a
prendre, ca sert si on abime un fichier) et relancez le Lavmenu.exe.
Ce dernier
nous dit toujours uregistrers, mais le fichier menu lui, ne laisse plus
apparaître
UREGISTERES
nulle part.
Cool works
! Vous venez de faire votre premier crack ;))) Felicitations ;)
Bien sur,
il y a bien d'autres méthodes pour y arriver, mais celle ci me semble la plus
simple,
faut avouez
que.....
Ceci dis,
les programmeurs de ce log auraient pus avoir la bonté de crypter ça !
2 - WinRescue
98 V 2.04 par Alexia[SKY]
Cette fois
ci, et pour la derniere fois je pense, on va se faire un petit crack facile.
Parceque
des daubes comme ça, vous devez être en mesure de les cracker en moins de 5
minutes maintenant.
Première étape
: on teste le logiciel. Il y a une boite de bialogue au démarage qui demande un
mot de passe.
On tape le
mot de passe et on a un message d'erreur.
On
décompile. W32Dasm, notre fidèle serviteur se fera un plaisir de remplir cette
tâche.
On regarde
ensuite la liste des chaines de caractère ( menu Refs \ String Data References
).
On remarque
une chaine bien sympa qui correspond à notre message d'erreur.
On y va. Un
peut plus haut, on voit que le code suit un saut conditionnel.
Et encore
plus haut le code qui correspond à la chaine "Registration Key
Accepted". ( 465A5F )
Alors, on
va aller à l'origine du saut ( 4659F7 ). Là, on vois bien le JE ainsi que le
CMP qui le précède.
On voit
aussi que tout ce code correspond à la chaine "Svet CHRISTA".
( Au
passage si quelqu'un sait ce que ca veut dire, qu'il veuille bien me le
signaler SVP :0).
Serais ce
le mot de passe ? On essaye et... oui, c'est bien lui !
Noter que
vous auriez tout aussi bien pu remplacer le JE par des NOP.
De cette
manière, n'importe quel pwd aurait été accepté.
Mais ça, je
vous laisse le faire !
3 - Pretty HTML V2.00
par Alexia[SKY]
Objet : Crack de Pretty
HTML V 2.00 ( Disponible sur le CD Pro PC-Team N°43 )
Niveau :
Débutant
Outils :
Axe ( un éditeur hexadécimal )
Outils :
W32Dasm89 ( un désassembleur )
Télécharger
le logiciels <http://www.multimania.com/tirips/ph_200.zip>
Voici les
URLs où télécharger les logiciels nécesaire à ce crack :
Axe
<http://www.multimania.com/utils/axe20.zip>
W32Dasm<http://www.multimania.com/utils/w32ds893.zip>
Là, il y a
pas 36 solutions, il faut lancer le logiciel, en l'occurence prettyhtml.exe.
Dès qu'on
lance le logiciel, une boite de dialogue nous informe qu'il faut enregistrer
le produit.
Ok, cliquons sur le bouton "Enter registration key". Il nous est
demander
un nom et
un mot de passe. Tu as de la chance, c'est le genre de crack qui se réalise
assez
rapidement. En plus comme il s'agit d'un petit logiciel, il ne devrait pas y
avoir
trop de
complications. On entre n'y nom, n'y mot de passe. Que se passe t'il ?
Un label
change ( un label, c'est un zone de texte qui fait en général une ligne ).
"Incorrect name or serial...". Voila
un message interessant. On recommence l'opération
en entrant
cette fois ci un nom et un mot de passe bidon. Rien ne se passe.
Le message
est toujours le même. En fait, il a quand même du se passer quelquechose,
le
réaffichage du message, mais nous, on a rien vu ! On lance Axe et on fait une
recherche
du mot "Incorrect". Pour ceux qui hésiterait, c'est une chaine ANSI,
mais ce
n'est pas
toujours le cas. Une fois la chaine trouvée, on regarde. Pas très interessant
à première
vu... et pourtant. On remarque d'autre chaine de caractères. Un peu plus
haut, on
voit "mpp". Tiens ! l'éditeur de ce logiciel s'apelle Média ++ ( mpp
).
Coïncidence
? Et "PName", ca ne te dit rien ? Tout a l'heure, on ne te demandais
pas
d'entrer ton "name" ? Continuons... "pretty.reg", c'est
sans doute un fichier.
Un petit
coup d'oeil dans le répertoire d'installation nous apprend qu'il n'y a pas
de fichier
portant ce nom... étrange... on s'apercevra à la fin qu'il est chargé de
contenir le
nom et le mot de passe crypté. On continue notre ascension et là !
Révélation : "Thank you...". Cette
petite phrase veut tout dire !
Ce
logiciel est tout con. Il nous demande un mot de passe. Si ce n'est pas le bon
ou s'il n'y
en a pas, il change le texte du label qu'il y a juste en dessous.
Par contre,
on peut facilement déduire que si on entre un bon mot de passe,
il change
aussi le label, mais cette fois ci, il y aura écrit "Thank you...".
Bien sur, a
ce stade là, on peut pas le vérifier, mais on a pas le choix et on doit faire
avec !
En
conclusion, le logiciel effectue une vérification du mot de passe tapé et
choisit en
fonction de celui ci le message à afficher. Cerise sur le gateau,
il se
pourrait même qu'a le suite de ce message, le logiciel soit enregistré,
et c'est ce
que nous cherchons !
Maintenant,
lance W32Dasm et ouvre le fichier prettyhtml.exe.
Laisse le
logiciel désassembler le fichier et ensuite, rend toi à l'endroit où
se trouve
"Thank you" (fais une recherche !). Une fois que tu y es,
observe le
code. Pour ceux d'entre vous qui ne connaissent pas l'assembleur,
ca va être
dur de tout comprendre, alors je vais essayer d'être le plus clair possible.
On voit * Possible StringData Ref from Code Obj
->" Thank you, ..."
La ligne indique qu'à cet
endroit, on fait appel à la chaine "Thank you".
La ligne
d'après, on voit: 004815E9 B91C174800
mov ecx, 0048171C
Clique deux
fois dessus et vérifie qu'elle se surligne bien en bleu.
Si c'était
vert, ca signifierait que cette ligne renvoi à une autre adresse
(un peu
comme goto en basic) ou qu'au contraire, cette ligne est la cible
d'un saut.
Ce dernier cas aurait compliqué la situation. On aurait été obligé
d'aller
chercher dans le code la ligne qui renvoi à celle ci, et la compréhension
aurait été
plus difficile. Mais ce n'est pas le cas, alors tout ce qu'on peut en
déduire,
puisqu'on sait que les lignes qui suivent celle-ci servent à enregister
PrettyHTML
( enfin, on le suppose ), c'est que plus haut dans le code,
il y a un
endroit qui sera la cible d'une instruction genre "goto" que l'on
appelle
JMP(jump), ou qu'il y aura un JMP vers le message "Incorrect name or
serial".
Regarde la
ligne 004815E0 0F84DD000000 je
004816C3
On remarque
la commande "JE" qui signifie "Aller à 004816C3 si la ligne
précédente
renvoi
1". 004816C3 est une adresse qu'il faut aller vérifier. A cette adresse
ci, il n'y
a rien de
très concluant. Regardont un peu plus bas : "Incorrect name or
serial".
BINGO ! La
ligne 3 crée une dérivation conditionelle vers le code qui garde
le logiciel
"unregistered".
Maintenant
la ligne 004815DC 837DF800 cmp
dword ptr [ebp-08], 00000000
Cette ligne
est la solution de tout. Elle compare une valeur dword et 0. Si les deux
valeurs
sont égales, la ligne renvoie la valeur 1. La ligne 3 elle regarde le renvoi
de la 4 et
si ce renvoie est 1, elle ordonne au programme d'effectuer un saut vers
l'adresse
004816C3, qui rappellons le maintient le programme en version shareware.
De cette manière,
le code qui enregistre le logiciel et qui se situe après la ligne 3
n'est
jamais executé. La valeur dword [ebp-8] est déterminée plus haut dans le
programme
et si elle est égale à 0, la ligne 3 est executée. Tu as compris, il suffit
de modifier
la ligne 4. Tu vois le chiffre 00000000 ? Remplacons le par n'importequelle
valeur
différent de 0. Ainsi, la ligne 4 comparera la valeur dword ( egale à 0 pour
n'importe
quel mot de
passe incorrect ) et le chiffre que tu auras entré. Les deux chiffres étant
différents,
la valeur de renvoie ne sera pas 1, mais 0. La ligne 3 ne n'executera pas,
mais le
code qui enregistre le programme si !
Dans le
menu debug, clique sur "Load process". Double-clique sur la ligne 4
et appuie sur F2
pour placer
un point d'arrêt. Appuie sur F9 en deux fois pour lancer l'execution du
logiciel.
Une fois la
fenètre de Pretty HTML chargé, clique sur "Enter registration key" et
tape n'importe
quel nom et
mot de passe. Clique sur "OK". Tu entendras un bip ! Basculer vers
W32Dasm.
Cherche la
ou il y a écrit "Source for data disp 1" et clique sur
"eip" et sur "code". Tu vois là
ou il y a
"BP*" ? C'est la ligne 4. Clique dessus. Et ensuite sur dword. Note
la valeur à coté
de
l'adresse qui apparait au même endroit que la ligne 4 au paravant ( la valeur
est 00f87d83 ).
Bon,
maintenant, regarde l'autre fenètre ou il y a ecrit "Patch Code".
Clique sur ce bouton.et
tape "cmp [ebp-08], 1". Moi,
j'ai mit 1, mais tu peut mettre ce que tu veut. Clique sur "Apply
Patch"
et
confirme. Ferme la fenètre. Regarde de nouveau "Source for data disp
1". Et oh ! Miracle,
la valeur à
changer ! Maintenant, c'est 01f87d83 ( enfin, si t'a mit 1 tout à l'heure !).
Note cette valeur.
Lance ton
éditeur hexadécimal préféré et cherche la valeur 837df800. Pourquoi cette
valeur,
c'est un
peu compliqué a expliqué ici ( consulte des manuels sur la manière dont les
programmes
chargent
leurs données dans la mémoire ), mais sache qu'il faut prendre les valeurs que
tu as
notée 2
chiffre par 2, et lire à l'envers (ainsi 00 f8 7d 83 donne 83 7d f8 00 ). Il y
en a peut être
plusieures
de ces valeurs, mais n'oublie pas que celle qu'on cherche se trouve près de la
chaine
"Thank you". Ok, t'as trouvé ? Pour
moi, il est à l'offset 809DC en hexa ( 528612 en Décimal ).
Ensuite,
c'est pas compliqué, change le 837df800 en 837df801. Enregistre le tout, ferme
tout
les
logiciels inutiles et lance Pretty HTML. Clique sur "Enter registered
key" et tape le nom
et mot de passe
que tu veut ! Et la, Magie ! Tu es enregistré !
Voila,
c'était pas bien compliqué ! Mais, ce n'est qu'un début, et pour devenir un
crackeur,
tu doit
vraiment t'y mettre et essayer de cracker n'importe quoi ( euh, commence quand
même
pas par des
grands softs genre 3D Studio MAX, c'est un coup à te décourager !!! )
4 -
PhotoImpact 4 Trial Version par
Alexia[SKY]
Objet :
Crack de Ulead PhotoImpact 4 Trial version
Niveau : C
( pas très compliqué....)
Outils : Axe
( un éditeur hexadécimal )
Outils :
W32Dasm89 ( un désassembleur )
Petit
crackeur, tu es de retour ? C'est bien. Si tu as réussis à cracker Pretty HTML,
tu es sur le chemin
de la
progression. Comme tu as déjà acquis de l'expérience, ce cours va être beaucoup
moins détaillé,
parceque je
suis sur d'abord que tu as pas tellement envie de lire des pages et des pages
de texte,
et ensuite,
parceque l'oiseau doit, petit à petit, voler de ses propres ailes !
Bon allez,
j'arrête mes conneries et on commence...
1° On
regarde le programme
Les 30
premiers jours, le programme se lance normalement... ou presque. Il y a
toujours cette boite
de dialogue
à la con au démarrage. Mais on va s'en occuper plus tard... OK, vous avez vu ?
Bon, alors
maintenant, avancez votre horloge de quelque mois pour voir ce qui se passe au
bout
de 30 jour
( euh non, ne le fais pas sinon, tu sera obligé de réinstaller windows. Donc on
va faire
comme si tu
l'avais fais...). Après, relancez le soft, et là, galère, le programme lance
toujours la boite
de
dialogue, mais il est impossible d'aller plus loin, le programme se ferme quand
on clique sur OK.
Remettez
votre horloge à l'heure et relancez le soft : le soft ne se lance toujours
pas...
Conclusion
: le programme vérifie la date et la compare à celle de la première execution.
Si la date à dépasser 30 jours, le
programme se vérrouille.
2° Comment
contrer la protection ?
Cette étape
est celle qui ne s'apprend pas. Chaque cas est différent et c'est au crackeur
de savoir
s'adapter.
J'ai déjà tenter d'apprendre l'art du crack à plusieurs personne et j'ai
remarquer que
c'est cette
étape qui pose le plus de probleme aux débutant. Il sont capable de réaliser
les opérations
techniques,
mais ne savent pas lesquelles réaliser. Alors, exercez vous le plus possible en
utilisant
votre
matière grise plus que les tutoriaux. Je vais pas vous torturer plus longtemps.
Pour contrer la
protection,
on a droit à deux solution :
Première
méthode : On regarde ce qui ce passe quand on clique sur le bouton
"Continuer".
On
regarde ce qui se passe quand on clique sur "OK". On compare
et
on effectue une petit modification de manière à ce que lorsque la date
est
dépassée, si on clique sur "OK", tout se déroule comme si on cliquait
sur
"Continuer".
Deuxième
méthode : On regarde dans le code décompilé ce qui fait appel à la boite de
dialogue
orange
et ce qui fait appel à le fenètre principale du logiciel. Ensuite, on va
remplacer
le code qui lance la boite de dialogue par celui qui lance la fenêtre.
De
ce fait, l'application se lancera immédiatement quel que soit la date.
Comme vous
l'avez compris, la méthode la plus intéressante est la seconde. C'est donc
celle là qu'on
va
réaliser. Notez bien qu'on ne va pas s'attarder à chercher les lignes de code
qui verifient la date...
Il est si
simple de carrement les contourner :o)
3° En
pratique, ce que ça donne....
Lancez
iedit.exe avec W32Dasm ( CTRL+L et F9 pour ceux qui auraient pas encore
trouvé... ).
Quand la
boite de dialogue apparait, cliquez sur API... La ligne de code qui viens
d'etre executée est
"4EB01D68
call USER32.DialogBoxParamA". C'est tout simplement la ligne qui affiche
la boite de dialogue.
Notez bien
qu'on ne se trouve plus dans le fichier IEDIT.EXE lancé initialement, mais dans
le module
U32CFG.DLL.
Et bien soit, on va le décompiler lui aussi. Il suffit juste de cliquer sur le
nom de la dll dans la
liste des
modules. Donc tu te trouve à la ligne 4EB01D68. Ben maintenant clique sur
Continue et on regarde
ce qui se
passe grace à F8 (mode pas à pas !). On constate qu'il y a un jne vers 4EB01D1C
juste après un cmp
! Voila la
solution !
Le
programme teste si on a cliquer sur Continue et nous envoie vers la suite si
c'est oui. Remplacez à la ligne
4EB01D68
"call USER32.DialogBoxParamA" par un "JMP 4EB01D1C" et 4
nop... ( Pour remplacer, il suffit
de cliquer
sur "Patch Code"... ) Et c'est pas plus compliqué que ca ! Remplacez
les chaines hexadécimales
adéquates
par les nouvelles dans le fichier U32CFG.DLL.
Ce tutorial
est un peu plus compliqué parce que je n'ai quasiment rien expliqué en détails
à part la manière de
procéder, mais
le crack en lui même ne m'a pas demandé plus de temps que celui de Pretty HTML.
By Alexia[SKY]
5 - Comment trouver une adresse de
softice(ou windasm) qui corresponds a l'offset du fichier exe ? par eBrain
Remarque:
ce cours est util aux crackers et à ceux qui veulent connaitre la structure
des
executables windows PE (portable executable)
Réponse :
générealement on fait une recherche de la chaine dans le programme et
puis
on trouve l'offset dans le fichier. Mais je voudrais vous présenter
une
autre méthode, à savoir sans faire de recherche.
Outils
nécessaires :
un
editeur hexa
windasm
un
peu de mathématiques
Concrètement
: prenons la version 6.2 de winzip32.exe (version tres ancienne de winzip)
ouvrons
le avec windasm
on
voit par exemple :
COPIER/COLLER
-------------------------------------------------------------------------------------------
*
Reference To: USER32.GetDlgItemTextA, Ord:00F5h
|
:0040B418 FF15C8FA4D00 Call dword ptr [004DFAC8]
* call qui appelle la fenêtre d'enregistrement
:0040B41E
0FB605B0C24D00 movzx eax, byte ptr
[004DC2B0]
*on
stock en eax le nom entré dans Name. Ici : HUGS2000 dans l 'ex.
:0040B425 85C0 test eax, eax
*Vérifie si on a entré quelque chose, sinon --> erreur
:0040B427 0F841C000000 je 0040B449
:0040B42D
0FB605A0A44D00 movzx eax, byte ptr
[004DA4A0]
* stock en eax le serial entré dans Registration. Ici : 12345678
dans l 'ex.
:0040B434 85C0 test eax, eax
*Vérifie si on a entré quelque chose, sinon --> erreur
:0040B436 0F840D000000 je 0040B449
:0040B43C
E8F6F7FFFF call 0040AC37
*Vérifie si le serial et le nom correspondent si OK alors eax =0
sinon
:0040B441 85C0 test eax, eax
:0040B443 0F8545000000 jne 0040B48E
---------------------------------------------------------------------------------------------------------
L'adresse
0040b418 est la même dans softice, sauf que dans softice il y a en plus un
sélécteur du style :
0170:0040B418 FF15C8FA4D00 Call dword ptr [004DFAC8]
0170 ici est le selecteur
que windows attribue aux programmes il y a d'autre selecteurs, comme 015f,
0030.
Pour
l'instant on oublie le selecteur. A quel offset du fichier correspond ce code ?
Ne faisons
pas de recherche de la chaine du code FF15C8FA4D00 dans l'exe, oublions cette
séquence de code.
Tout
d'abord si vous ne connaissez pas le header du format PE, je vous conseillerai
de lire securimag
(e-zine
underground) que vous pouvez trouver sur madchat.org ou allez sur wotsit.org
dans la section
binaire. Il
y a aussi des docs dessus.
ce
qui nous interresse ici c'est seulement
:
Header
Offset Bytes Function
----------------------------------------------------------------------------------------------------
MZ | +00 | 2 | signature 'MZ'=
4Dh 5Ah
| +3C | 4 |
offset du nouveau header PE ou 0
----------------------------------------------------------------------------------------------------
PE | +00 | 4 |
signature 'PE..' (= 50h 45h 00h 00h)
| +2C | 4 |
adresse de base
|
| | du code dans la mémoire du process
|
+10C | 4 | raw offset
----------------------------------------------------------------------------------------------------
Le format PE possède à la
fois le header MZ pour pouvoir être executé sous DOS (2.0+)
et le
header PE pour windows 9x et NT x.
Exemple
dans l'exe de winzip 6.2, on a :
4D5A90000300000004000000FFFF0000 MZ..............
B8000000000000004000000000000000 ........@.......
00000000000000000000000000000000 ................
000000000000000000000000
8000 0000 ................
0E1FBA0E00B409CD21B8014CCD215468 ........!..L.!Th
69732070726F6772616D2063616E6E6F is program canno
742062652072756E20696E20444F5320 t be run in DOS
6D6F64652E0D0D0A2400000000000000 mode....$.......
504500004C010700CF0C603200000000 PE..L.....`2....
00000000E0000E010B010414007E0700 .............~..
Le header
de MZ commence a l'offset 0. La signature est MZ ou ZM.
l'offset du
header de PE est precisé à l'offset 3c ici 8000 ce qui est égale a l'offset 80
(hexa)
à partir de
l'offset 80 (hexa) on va 2c(hexa) octets plus loin on note le dword VIRTUAL
OFFSET
et
10c(hexa) + loin on note le dword RAW OFFSET.
Remarque :
dword est un double word, 4 octets
Savez vous
comment soustraire ou additionner ?
Si non,
fermez cet e-mag et allez prendre de l'air dehors !
-------------------------------------------------------------------------------------------------
* l'OFFSET
du CODE dans windasm ou soft ice
- (VIRTUAL OFFSET - RAW OFFSET) = OFFSET du FICHIER *
-------------------------------------------------------------------------------------------------
Actually :
Le code se charge à virtual offset dans la mémoire, à cause de la taille du
header et
les déclarations de l'exe(header). Le code
ne commence qu'à l'offset RAW OFFSET.
En fait c'est beaucoup plus compliqué que ça
mais j'ai un peu simplifié.
VOILA !
avec notre exemple de winzip 6.2 on a VIRTUAL OFFSET = 1000 h et RAW OFFSET = 0400h
Remarque :
pour les neuneus, dans l'editeur hexa on a 0004 0000 qui correspond 0000 0400.
Les processeur INTEL lisent a l'envers
octet par octet.
Un autre exemple : 1000 0000 =>
00000010
l'offset
dans windasm :
:0040B418
FF15C8FA4D00 Call dword ptr [004DFAC8]
0040B418 - (1000-400) = 40b418-c00 = 40a818
Bilan :
ADRESSE
DANS WINDASM(SOFTICE) / FICHIER
0040B418 /
a818(hexa)
Voilà allez
sur l'offset a818 et vous l'avez votre séquence de code !
Remarque :
Les programmes windows (sauf kernel......) commencent a l'offset selecteur :
0040 0000 +
VIRTUAL offset donc 0040 0000 est la base en fait.
Lisez
Delphi 3 ou securimag(chapitre 16.4) vous trouvez d'avantage d'informations.
Bien, j'espere
que vous avez compris même si vous trouvez ça complêtement inutile.
Allez
sur le site protools.hpages.net, il y a des tonnes de logiciels pour convertir
les
offset DEBUGGER -> FILE et d'autre outils très efficaces.
By eBrain (alias OCEAN), IRCnet #codefr
6 - Solution Du KeygenMe par TiPiaX
On va donc
se faire le KeygneMe de moi!
(eh oui je
crack mes progs :)
Tout
d'abord on démarre le proggy et on rentre:
nom: TiPiaX
serial
: 1911 (vieille habitude, j'aurais pas du
lire les tuts de Bama :)
ensuite on
fait CTRL+D pour faire apparaître Softice et vous tappez votre
config
comme d'hab :
data
code on
puis on
place un :
bpx
GetDlgItemTextA
C'est un breakpoint
sur l'API qui permet de loader les chaînes en mémoire.
Puis CTRL+D
pour quitter.
Vous faites
"OK" et là (on s'en doute pas du tout) SOFTice break ! sisi !
On fait F12
pour revenir dans le prog (car là on est dans les APIs)
et on
arrive ici: (je vous commente un peu le truc).
Je vous
balance tout:
légende :
appel d'API en rouge.
endroits ou vont les jumps en vert.
ce qui nous intéresse en bleu.
------------------------------------------------------------------------------
PUSH 32 //
PUSH
004056D4 // <-cet
argument correspond au buffer
PUSH
000003E8 // qui
recevra le nom lors de l'appel
PUSH
EDI // de
l'API.
MOV DWORD PTR [00405708],00000000 // <-On met quelques variables à 0.
MOV DWORD PTR [0040570C],00000000 //
MOV DWORD PTR [004056D0],00000000 //
CALL
[USER32!GetDlgItemTextA] //
Appel de GetDlgItemTextA pour chopper le nom
MOV AL,[004056D4] // met la premiere lettre du nom dans al
TEST
AL,AL //
teste si la lettre est un 0
JNZ 004010AA // saute sur (1) si oui *voir ps(1)
PUSH
00
//
PUSH
00405250 //
Sinon on appelle une boite de message
PUSH
00405234 //
"entrez un nom".
PUSH EDI //
CALL [USER32!MessageBoxA] //
MOV
EAX,00000001 //
POP
EDI
//
RET
0010
//
(1):
PUSH ESI
PUSH 00
PUSH 00
PUSH 000003E9
PUSH EDI
CALL
[USER32!GetDlgItemInt] //
Appel de GetDlgItemInt pour chopper le serial entré
MOV Cl,[004056D4]
MOV ESI,[0040570C]
XOR EDX,EDX
MOV [00405710],EAX // serial en 00405710
TEST CL,CL
MOV [004056D0],EDX
JZ 004010F4
//!!!la boucle
interessante!!! // détaillé après:)
(2):
MOVSX
ECX,CL
ADD
ESI,ECX
INC EDX
MOV [00405708],ECX
MOV CL,[EDX+004056D4]
TEST CL,CL
JNZ
0040108D //saute sur (2)
MOV 004056D0,EDX
MOV ECX,ESI
SHL ECX,05
ADD ECX,ESI
POP ESI
CMP EAX,ECX
MOV [0040570C],ECX
PUSH 00
JNZ 00401122
//la
boite de message "bravo"
PUSH 0040522C
PUSh 0040520C
PUSH EDI
CALL [USER32!MessageBoxA]
MOV EAX,00000001
POP EDI
RET 0010
//la
boite de message Mauvais serial
PUSH 00405205
PUSH 004051E8
PUSH EDI
CALL [USER32!MessageBoxA]
MOV EAX,00000001
POP EDI
RET 0010
------------------------------------------------------------------------------
ps(1) : Le prog
regarde si la premiere lettre est 0 car cela signifie qu'aucun nom n'a été
entré.
Dans ce cas
il envoie une boite de message.
Là on a vu
une vue d'ensemble qu'on va résumer avant de passer à la suite:
tout
d'abord le prog appelle GetDlgItemTextA pour chopper notre nom qu'il met en
004056D4
Il teste
ensuite si on a bien entré un nom. Puis il prend le numero de serie qu'il place
en
00405710. Après il génère le bon serial et le compare à celui qu'on avait entré
puis
il envoie
les boites de messages: "Bravo, bon serial" ou "mauvais
serial"
Etudions
donc la procédure qui génère le serial (c'était le bleu :)
------------------------------------------------------------------------------
MOV Cl,[004056D4] // premiere lettre du nom dans Cl
MOV
ESI,[0040570C] // on
met 0040570C à 0 (car ESI = 0 ici)
XOR
EDX,EDX // met
EDX à 0
MOV
[00405710],EAX //
serial en 00405710
TEST
CL,CL // teste
si la premiere lettre est un 0
MOV
[004056D0],EDX // on
s'en fout...
JZ
004010F4
//!!!la
boucle interessante!!!
(2):
MOVSX
ECX,CL // Met CL
dans ECX (ça fait rien du tout, lol :)
ADD
ESI,ECX // on ajoute la valeur de la
lettre dans ESI
INC
EDX // EDX =
EDX +1
MOV
[00405708],ECX // Met
la lettre dans 00405708
MOV
CL,[EDX+004056D4] // TRES IMPORTANT : Cl vaut maintenant la
valeur
// du début du
nom +1. En fait CL pointe sur la
// prochaine
lettre quoi.
TEST
CL,CL // si il y a plus de lettre
JNZ
0040108D // on part sauter
sur (2)
------------------------------------------------------------------------------
Pour
résumer:
le prog
prend donc le nom lettre par lettre et les additionne dans ESI. Donc ESI =
lettre1 + lettre2 ...
Car il faut
savoir que toute lettre a une valeur sous forme de nombre entier.
On pourrait
penser que c'est fini, mais il reste encore ceci à ne pas oublier (c'est le
plus dur :)
------------------------------------------------------------------------------
MOV 004056D0,EDX
// on s'en tape :)
MOV
ECX,ESI // on met la
valeur de notre addition dans ECX
SHL
ECX,05 // on décalle
ECX de 5 bits vers la gauche.
ADD
ECX,ESI // et on
ajoute L'addition (ECX) au résultat.
POP
ESI
CMP
EAX,ECX // compare le
bon et le mauvais serial.
MOV [0040570C],ECX
PUSH 00
JNZ 00401122
------------------------------------------------------------------------------
un décalage
de bits à gauche revient à multiplier le nombre par une puissance de 2
SHL 5 , 20
= décalage de 20 bits sur le nombre 5.
ce qui
équivaut à 5 * 2^20 .
Donc dans
notre cas on a SHL ECX,05 ce qui correspond à : ECX = ECX * 5^2
soit : ECX
= ECX * 32
Si on regarde la suite du source on voit
que l'on ajoute encore ESI au résultat. Or ESI = ECX
donc en
réalité le prog fait : ECX = ECX * 33
Si vous
avez tout compris : le serial vaut :
(somme des
lettres) *33
Eh oui tout
ce code juste pour ça ! :)
Vous n'êtes
pas obligé de comprendre comment marche SHL c'est juste mieux. Mais rien ne
vous empêche
de faire
des décalages de bits dans votre Keygen pour trouver le serial.
Maintenant
il faut passer au coding de notre keygen. Si vous la programmez en asm, il
suffit de faire
un copier
coller du prog (enfin presque quoi). C'est pourquoi on va la faire en c pour ce
qui savent pas
comment ça
ce boutique. On va en faire 2 : une avec les decalages de bits et l'autre sans:
Votre
KeyGen:
On voit la
première sans les decalages de bits:
------------------------------------------------------------------------------
//les variables nécessaires:
int
nombre = 0;
int
total = 0;
int i = 0;
int serial;
char nom[50];
GetDlgItemText(hwnd,IDC_NOM,nom,50);
if
(nom[0] == 0) //pas de nom !!
{
MessageBox(hwnd,"Vous
devez entrer un nom","KeyGeN",MB_OK);
break;
}
for (i=0; nom[i] != 0; i++)
{
nombre
= (char) nom[i];
total
= total + nombre;
}
total = total * 33;
SetDlgItemInt(hwnd,IDC_SERIAL,total,NULL);
------------------------------------------------------------------------------
Vous
rajoutez une belle boite de dialogue à tout ça. Comme certains savent pas le
faire je joint
la source
complète :) Vyons maintenant la même chose avec les décalages de bits.
L'interêt est
qu'il n'y a
pas besoin de réfléchir, c'est du copier coller traduit en c :)
------------------------------------------------------------------------------
//les variables nécessaires:
int nombre = 0;
int
total = 0;
int i = 0;
int serial;
char nom[50];
GetDlgItemText(hwnd,IDC_NOM,nom,50);
if
(nom[0] == 0) //pas de nom !!
{
MessageBox(hwnd,"Vous
devez entrer un nom","KeyGeN",MB_OK);
break;
}
for (i=0; nom[i] != 0; i++)
{
nombre
= (char) nom[i];
total
= total + nombre;
}
total = (total << 5) +
total;
SetDlgItemInt(hwnd,IDC_SERIAL,total,NULL);
------------------------------------------------------------------------------
Et voila ce
tut s'achève ici. J'espère qu'il vous servira pour Keygener de vrai progs. Big greets à:
Moi, Jufox, AntiSocial,
Obscurer, LutinNoir, KoP, Christal, Pointbat, Bendi, TeeJi et tout FcF.
Gros Fuck à
: Mist :-(
Bonne
Chance - D'autres plus difficiles devraient suivre...
By TiPiaX