le nom etait "rien ne sert de courrir il faut partir a point"
et le pass etait , "dobro est le roi du Dobro"
ce qui fait correspondre a la constante (dont je ne regarde que les
130 premiers characteres ! , bien sur le test aurai pu etre plus long !
puisque j'avais autorisé un pass et un nom de 1000 characteres !
vraiment impressionant j'avais essayé de te perdre avec des faux
tests, t'a pas ete dupe Bravo encore
puis je me suis dit on va pas utiliser Xor en plus , j'aurai peut etre du

j'avait ajouter un timer au cas ou tu "ponte" un ou 2 test
de façon a planter le programme au cas ou !
mais bon vu que t'es pas un mancho t'a tracer comme il faut la routine de control , ce qui t'a ammener a comprendre !!
c'est vrais que le test en lui meme n'etait pas compliqué ;
puisque la constante apparait tres clairement dans OllyDbg , par exemple

; j'aurai du la cripter quand meme
Comparer par rapport a une constante , etait evident pour un cracker "moyen ou fort" , un petit "nopeur ou une JNZeur" moyen aurai peut etre bloqué quand meme !
la presence de faux numero de code est une astuce pour perdre les debutant traceur ! car il se disent , "facile le code apparait en clair dans le listing" !!!
la pour mon Crack me , j'en ai mis trop, du coup cela perd en credibilitée !!:D
j'essairai de t'en faire un plus dur un de ces 4
voici le listing en purebasic :
vous y verrez les multiples tests bidons pour embrouiller un peut le "traceur"
,plus on en met , plus le gars qui trace se fatigue , la il n'y en a manifestement pas assez !! y en faudrai 1000 avec des goto a la spagueti !!
Code : Tout sélectionner
; prg crée par Dobro
; en pure basic 3.94 beta4
; a l'aide de Japbe !!! <--ça marche avec !! :D
Declare TimerProc(hwnd.l, uMsg.l, idEvent.l, dwTime.l)
ept.s="21421421619922414314220214723113322221764214212137131211234146182216212"
nom$ = InputRequester("crackme", "entrez votre nom", "")
pass$ = InputRequester("entrez le code", "le mot de pass", "")
Dim c$(10000)
Dim car$(10000)
Dim car2$(10000)
For t=0 To Len(nom$)
car$(t)=Mid(nom$,t,1)
Next t
For t=0 To Len(pass$)
car2$(t)=Mid(pass$,t,1)
Next t
For t=0 To 10000
c$(t)=Str(Asc(car$(t))+Asc(car2$(t)))
do$=do$+c$(t)
Next t
If do$<>"5"
EndIf
Goto 150
200:
If c$(5)<>"15354564-565465"
Goto suite
EndIf
suite:
If c$(5)<>"15354564-565465-dgdf4454"
c$(5)="ok le code est bon !! "
Else
c$(45)= "le code n'est pas bon !"
EndIf
If c$(8)<>"15354564-565465"
Goto suite2
EndIf
suite2:
If c$(8)<>"15354564-565465-dgdf4454"
c$(8)="ok le code est bon !! "
Else
c$(45)= "le code n'est pas bon !"
EndIf
If c$(8)<>"15354564-56ffjfg465-fgh554-fprizjcpz"
Goto suite3
EndIf
suite3:
If c$(8)<>"15354564-565465-dgdf4454-654erorer5"
c$(8)="ok le code est bon !! "
Else
c$(45)= "le code n'est pas bon !"
EndIf
If c$(8)<>"15354564-565dfhsn5-fgh554-fprizjcpz"
Goto suite4
EndIf
suite4:
If c$(8)<>"15354564-565465-dgdf4454-654erorer5"
c$(8)="ok le code est bon !! "
Else
c$(45)= "le code n'est pas bon !"
EndIf
If c$(8)<>"15354564-56sfnsf-65-fgh554-fprizjcpz"
Goto suite5
EndIf
suite5:
If c$(8)<>"15354564-565465-dgdf4454-654erorer5"
c$(8)="ok le code est bon !! "
Else
c$(45)= "le code n'est pas bon !"
EndIf
If c$(8)<>"15354564-565dndg--5-fgh554-fprizjcpz"
Goto suite6
EndIf
suite6:
If c$(8)<>"15354564-565465-dgdf4454-654erorer5"
c$(8)="ok le code est bon !! "
Else
c$(45)= "le code n'est pas bon !"
EndIf
uop.s="6199224143142202147231133222217642142"
If c$(8)<>"15354564-565465-fgh554-fprizjcpz"
Goto suite7
EndIf
suite7:
If c$(8)<>"15354564-565dgn---dgdf4454-654erorer5"
c$(8)="ok le code est bon !! "
Else
c$(45)= "le code n'est pas bon !"
EndIf
If c$(8)<>"15354564-565465-fgh554-fprizjcpz"
Goto suite8
EndIf
suite8:
If c$(8)<>"15354564-565465-dgdf4454-654erorer5"
c$(8)="ok le code est bon !! "
Else
c$(45)= "le code n'est pas bon !"
EndIf
risk.s="14621610832102971171163211297114116105114329732112111105110116"
If c$(8)<>"15354564-565465-fgh554-fprizjcpz"
Goto suite9
EndIf
suite9:
If c$(8)<>"15dgn6546545465gn--64-565465-dgdf4454-654erorer5"
c$(8)="ok le code est bon !! "
Else
c$(45)= "le code n'est pas bon !"
EndIf
If c$(8)<>"153545dgn-dgn54dgn64-565465-fgh554-fprizjcpz"
Goto suite10
EndIf
suite10:
If c$(8)<>"15354564-565465-dgdf4454-654erorer5"
c$(8)="ok le code est bon !! "
Else
c$(45)= "le code n'est pas bon !"
EndIf
Goto zaza
toto:
If c$(13)<>Chr(50)
Dim c$(10)
EndIf
toto5 :
InitSprite()
InitMouse()
top$=ept
top2$=risk
top3$=uop
top$=top$+top2$+top3$
CallDebugger
Debug top$
Debug do$
If Left(do$,130)<>Left(top$,130)
do$=Chr(45)
top$=do$+Right(do$,130)
tii=tii+1
Goto suite12
EndIf
For t=1 To Len (top$)
Next t
Declare Forme(forme)
If OpenWindow(0, 0, 0, 400, 400, #PB_Window_BorderLess | #PB_Window_ScreenCentered, "Test") = 0 Or CreateGadgetList(WindowID(0)) = 0
End
EndIf
WindowID = WindowID(0)
If tti>0
ru=1
EndIf
SetTimer_(Handle,ru, 5000, @TimerProc()) ; envoie un evenement toutes les 1000 millisecondes
OpenWindowedScreen(WindowID, 0, 0, 400, 400, AutoStretch, 1, 1)
CreateSprite(1, 32,32)
StartDrawing(SpriteOutput(1))
Box(0, 0,32, 32,RGB($F1,$FD,$1A) )
StopDrawing()
Forme(2)
; change le chifre = change la forme !!!
; forme(0) = rectangle
; Forme(1) = rectangle avec bord arrondi
; Forme(2)= rond !!!
; Forme(3)=Triangle
; forme(4)=rectangle avec trou
; forme(5)=rond+triangle
sensx=10/2
sensy=16/2
Repeat
If tii>1000
End
EndIf
ExamineMouse()
If MouseButton(2) ; si clique bouton droit
End ; on quitte
EndIf
xp=xp+sensx
yp=yp+sensy
If xp+32>400 : sensx=-sensx:EndIf
If xp<0 : sensx=-sensx:EndIf
If yp+32>400 : sensy=-sensy:EndIf
If yp<0 : sensy=-sensy:EndIf
DisplaySprite(1, xp, yp)
FlipBuffers()
ClearScreen(255, 100, 100)
ForEver
End
; les procedures
Procedure Forme(forme)
Select forme
Case 1
Region = CreateRoundRectRgn_(0, 0, WindowWidth(), WindowHeight(), 40, 60) ; Création de la région pour faire une fenêtre avec les angles arrondis
; CreateRoundRectRgn_(X1, Y1, X2, Y2, R1, R2)
; X1, Y1 : coordonné du point haut gauche de la region
; X1, Y1 : coordonné du point haut gauche de la region
; R1, R2 : rayon de l'ellipse qui va servir à arrondir les angles de la region
SetWindowRgn_(WindowID(), Region, #True) ; On applique la région
DeleteObject_(Region) ; On supprime la région
Case 2
Region = CreateEllipticRgn_(0, 0, WindowWidth(), WindowHeight()) ; Création de la région pour faire une fenêtre elliptique
; CreateEllipticRgn_(X1, Y1, X2, Y2)
; X1, Y1 : coordonné du point haut gauche de la region
; X1, Y1 : coordonné du point haut gauche de la region
SetWindowRgn_(WindowID(), Region, #True) ; On applique la région
DeleteObject_(Region) ; On supprime la région
Case 3
Region = CreatePolygonRgn_(?Triangle, 4, #ALTERNATE) ; Création de la région pour faire une fenêtre elliptique
; CreateRoundRectRgn_(Array, NbPoints, Type)
; Array : Adresse de la liste ou de la Data
; NbPoints : Nombre de points du polygone + 1 (car on fait une boucle donc on a 2 fois le premier point)
; Type : Voir msdn
SetWindowRgn_(WindowID(), Region, #True) ; On applique la région
DeleteObject_(Region) ; On supprime la région
Case 4 ; rectangle
Region1 = CreateRectRgn_(0, 0, WindowWidth(), WindowHeight()) ; Création d'une région en rectangle
Region2 = CreateRectRgn_(10, 10, WindowWidth() - 10, 50) ; Création d'une région en rectangle
; CreateRectRgn_(X1, Y1, X2, Y2)
; X1, Y1 : coordonné du point haut gauche de la region
; X1, Y1 : coordonné du point haut gauche de la region
CombineRgn_(Region1, Region1, Region2, #RGN_DIFF) ; On combine les 2 régions
; Les modes suivants sont disponibles :
; #RGN_AND : Intersection
; #RGN_OR : Union
; #RGN_DIFF : Différences
; #RGN_XOR : Union moins les intersections
SetWindowRgn_(WindowID(), Region1, #True) ; On applique la région finale
DeleteObject_(Region1) ; On supprime les régions
DeleteObject_(Region2)
Case 5
Region1 = CreatePolygonRgn_(?Triangle, 4, #ALTERNATE)
Region2 = CreateEllipticRgn_(0, 0, WindowWidth(), WindowHeight())
CombineRgn_(Region1, Region1, Region2, #RGN_OR) ; On combine les 2 régions
SetWindowRgn_(WindowID(), Region1, #True) ; On applique la région finale
DeleteObject_(Region1) ; On supprime les régions
DeleteObject_(Region2)
EndSelect
EndProcedure
DataSection
Triangle :
Data.l 200, 400, 0, 0, 400, 0, 200, 400 ; Coordonnées des points du triangle en x, y (il faut faire une boucle donc on revient au premier point du triangle
EndDataSection
150:
Goto 200
zaza:
If c$(8)<>"15354564-565465-fgh554-fprizjcpz"
Goto suite11
EndIf
suite11:
If c$(8)<>"15354564-565ffgh465-dgdf4454-654erorer5"
c$(8)="ok le code est bon !! "
Else
c$(45)= "le code n'est pas bon !"
EndIf
If c$(8)<>"153545464534-565465-fgh554-fprizjcpz"
Goto suite12
EndIf
suite12:
If c$(8)<>"15354565454-4453*--4-565465-dgdf4454-654erorer5"
c$(8)="ok le code est bon !! "
Else
c$(45)= "le code n'est pas bon !"
EndIf
If c$(8)<>"15354564-5654689865--6565--5-fgh554-fprizjcpz"
Goto suite13
EndIf
suite13:
If c$(8)<>"15354564-5654554--65-dgdf4454-654erorer5"
c$(8)="ok le code est bon !! "
Else
c$(45)= "le code n'est pas bon !"
EndIf
If c$(8)<>"15354564-54645655453-895453-89+899+465-fgh554-fpriz4534jcpz"
Goto suite14
EndIf
suite14:
If c$(8)<>"15354564-56ddfb5468765-465-dgdf4454-654erorer5"
c$(8)="ok le code est bon !! "
Else
c$(45)= "le code n'est pas bon !"
EndIf
If c$(8)<>"15354564-578338378fgh554-fprizjcpz"
Goto suite15
EndIf
suite15:
If c$(8)<>"15354564-565465-dgdf4454-654erorer5"
c$(8)="ok le code est bon !! "
Else
c$(45)= "le code n'est pas bon !"
EndIf
If c$(8)<>"15354564-565785378-fgh554-fprizjcpz"
Goto suite16
EndIf
suite16:
If c$(8)<>"15354564-565465-dg78378374-654erorer5"
c$(8)="ok le code est bon !! "
Else
c$(45)= "le code n'est pas bon !"
EndIf
If c$(8)<>"15354564-565465456445567834343874-fprizjcpz"
Goto suite17
EndIf
suite17:
If c$(8)<>"15354564-565465-dgdf4444564554-654erorer5"
c$(8)="ok le code est bon !! "
Else
c$(45)= "le code n'est pas bon !"
EndIf
If c$(8)<>"15354564-565465-fgh554-fprizjcpz"
Goto suite18
EndIf
suite18:
If c$(8)<>"15354564-565465-dgdf4454-654erorer5"
c$(8)="ok le code est bon !! "
Else
c$(45)= "le code n'est pas bon !"
EndIf
Goto toto
Procedure TimerProc(hwnd.l, uMsg.l, idEvent.l, dwTime.l)
Select uMsg
Case #WM_TIMER
Select idEvent
Case 1
MessageRequester("hello", "pas encore pas encore :D" , #PB_MessageRequester_Ok)
End
Case 2
Case 3
EndSelect
EndSelect
EndProcedure