Méthodes basiques anti-cracking

Partagez votre expérience de PureBasic avec les autres utilisateurs.
lionel_om
Messages : 1500
Inscription : jeu. 25/mars/2004 11:23
Localisation : Sophia Antipolis (Nice)
Contact :

Message par lionel_om »

oki, oui je connais les Execptions (en C++ et en Java), mais j'aime pas trop ce système...
C'est mieux une prog plus propre plutot que de devboir capter tout un tas de bordel...
Webmestre de Basic-univers
Participez à son extension: ajouter vos programmes et partagez vos codes !
gilbert2
Messages : 13
Inscription : mar. 09/août/2005 23:30

Message par gilbert2 »

lionel_om a écrit :oki, oui je connais les Execptions (en C++ et en Java), mais j'aime pas trop ce système...
C'est mieux une prog plus propre plutot que de devboir capter tout un tas de bordel...
;o)

En tout cas, j'espere avoir repondu a ta question sur les deboggueurs. :=)

a++
AYBABTU
Messages : 26
Inscription : mer. 10/août/2005 14:34

Message par AYBABTU »

Merci lionel_om pour avoir scanné l'article. Evidement, et comme très souvent dans les magazines grand public, tout est mélangé. J'ai pas pris la peine de lire, je devrais sans doute le faire, mais là mon ecran est trop petit pour une lecture agréable :) En tout, j'ai vu les titres, et on y mélange le cracking, le warez, les divx, le piratage et meme le pire, la revente de logiciels illegaux. C'est sur, quand on est un "pirate" (je ne supporte pas ce terme), on est capable de tout faire, on est moralement imonde. (le seul truc que j'ai lu en entier dans l'article c'est le howto de la derniere page, pour cracker un logiciel. Enfin pour fisher un serial. Un truc qu'on fait au debut quoi, sur un logiciel vraiment pas protégé)

Histoire d'éclaircir les choses, je voudrais dire que 99% des crackeurs ne vendent pas de logiciels illegaux. (j'ai meme hesité a mettre 100%) Ceux qui vendent ça sont des imbeciles qui n'ont pas peur de grand chose. Mais ca leur retombera dessus un jour ou l'autre (voir 2bcalvi qui se fesait des sous avec les pubs de son site merdique)

Bon et sinon, a par ca, bah moi je te conseille ollydbg pour debugger, c'est le debuggeur le plus "user friendly" que je connaisse. Je fais casiment tout avec personnellement.

Et Julien, espece de <censuré> :D J'ai regardé ton crackme, il est bien plus tendu qu'avant. J'ai bien compris tout l'algo mais je ne pense pas réussir a le casser. (enfin a trouver le bon serial). Je tente quelques methodes de bruteforce en ce moment mais j'y crois pas trop, si le serial fait plus de 6 caracteres je suis baisé :) Pour le cracker, je pourrais bidouiller quelques trucs, je vois comment, mais ca ne marcherait que sur le crackme. Si tu decidais de mettre la meme protection sur un de tes softs, avec dans la dll decryptée des routines ne concernant pas que la registration (si tu laisses que des trucs de registration dedans, c'est inutile), alors c'est l'exemple donnée plus haut de cryptage de fichier avec un serial fixe. (et le vilain il a copier/coller l'exemple de erix sur le RDTSC :p) Honnetement, je pense que c'est fesable, en y passant du temps (beaucoup). Parce que la structure d'un dll, c'est connu, Mais ton algo est bien méchant tout de meme (30 secondes pour créer la dll sur un 2400+ ! ) Le seul inconvient que je vois a ce type de routine, c'est que le serial est fixe (le nom ne sert a rien ici) Donc si un de tes clients est "pourris", c'est finis, on a la dll decryptée. Mais je m'avoue pas vaincu encore, ne donne pas la solution stp :)
julien
Messages : 846
Inscription : ven. 30/janv./2004 15:06
Contact :

Message par julien »

Oui j'ai piqué le bout de code à erix14 (que je remercie +++) pour l'anti debug (il est vraiment bien ce code ),
Je te laisse chercher, :D


Tace le code que tu entre, que remarque tu ?

Par contre il est clair que si un client refile son code, c'est foutu, une autre solution est lors d'une activation en ligne de renvoyer le bon code pour le décryptage des fichiers, le code n'est pas connu par le client. Qu'en pense tu ?
AYBABTU
Messages : 26
Inscription : mer. 10/août/2005 14:34

Message par AYBABTU »

julien a écrit :Oui j'ai piqué le bout de code à erix14 (que je remercie +++) pour l'anti debug (il est vraiment bien ce code ),
Je te laisse chercher, :D
C'est pas méchant a virer ca, il suffit de nopper le second RDTSC ;)
julien a écrit : Tace le code que tu entre, que remarque tu ?
Je remarque que tu adores le md5 ;) Mais pas le simple ... C'est pas bete d'avoir verifié comme ca d'abord si le serial etait valide, ca evite de crasher le programme.
julien a écrit : Par contre il est clair que si un client refile son code, c'est foutu, une autre solution est lors d'une activation en ligne de renvoyer le bon code pour le décryptage des fichiers, le code n'est pas connu par le client. Qu'en pense tu ?
Bon plan en effet. La il faudrait que le client "pourris" en question ait des competences pour étudier comment ca fonctionne. En gros, faut que le crackeur paye ton soft :)
julien
Messages : 846
Inscription : ven. 30/janv./2004 15:06
Contact :

Message par julien »

pour aller plus loin, j'imagine ceci :
le code donné au client contient une partie de la clef de décryptage (ce code est fabriqué à partir de son nom, prenom email...)
Lors d'une activation un serveur renvoie une autre partie de la clef composé de son nom, email....

Il y'a décryptage des fichiers avec TAG des fichiers (nom/prenom)

Je pense que c'est faisable, mais trop lourd pour des petit softs :)
bombseb
Messages : 445
Inscription : jeu. 25/août/2005 22:59
Localisation : 974
Contact :

Message par bombseb »

tres interessant ce thread...mais j'ai eu la flemme de tout lire désolé :oops:
Fred parlait d'exe automodifiable et disais que c'était possible. C'est peut être une solution pour stocker ce genre de chose...
faire un exe automodifiable n'est pas une tres bonne chose je pense... les antivirus vont détecter une modification de l'exe et vont croire qu'il à été infecté par un virus...

sinon je me disait quand début d'un prog il y a peut etre moyen du code executable crypté non ?
à chaque execution le code est décrypté en mémoire et executé. ce code controlerais la validité du programme...
mais bon c'est toujours possible de cracker ce genre de protection...
bombseb
Messages : 445
Inscription : jeu. 25/août/2005 22:59
Localisation : 974
Contact :

Message par bombseb »

merde je m'apercoit que vous étiez justement en train de parler de cryptage... j'avais pas lu tout le thread je vous l'ai dit :oops:
erix14
Messages : 480
Inscription : sam. 27/mars/2004 16:44
Contact :

Message par erix14 »

Voici un petit algorithme de cryptage, de ma composition. :D
Même en ayant l'algorithme sous les yeux, le cracker aura du mal... Qu'en pensez-vous ?
N'oubliez pas d'activer l'assembleur en ligne.

Code : Tout sélectionner

;/
;/                    Algorithmes de cryptage et de décryptage
;/                   Programme Eric Ducoulombier ( Erix14 ) 
;/                  Windows XP SP2 - PureBasic 3.94 - jaPBe 2.5.4.22
;/                                   28/08/2005 
;/ 
Enumeration
     #Window_0
EndEnumeration
Enumeration
     #Editor_0
     #String_0
     #Button_0
     #Button_1
     #Text_0
EndEnumeration

Global FontID1,FontID2
FontID1 = LoadFont(1, "Times New Roman", 12, #PB_Font_Bold)
FontID2 = LoadFont(2, "Verdana", 10)

Procedure GenKey()
     Key.s = ""
     For t=0 To 19
          Char = Random(35)
          If Char < 10
               Key + Chr(48+Char)
          Else
               Key + Chr(55+Char)
          EndIf
     Next
     SetGadgetText(#String_0,Key) 
EndProcedure
Procedure AfficheMemoire(*Char.BYTE,Longueur)
     Texte.s = ""
     For t=0 To Longueur Step 16
          Texte + RSet(Hex(t),4,"0") + Chr(9) + ":"
          For r=0 To 15
               Texte + Chr(9) + RSet(Hex(*Char\b & $FF),2,"0")
               *Char + 1
          Next
          Texte + Chr(13)
     Next
     SetGadgetText(#Editor_0,Texte)
EndProcedure
Procedure Crypter(*Char.BYTE,Longueur,Key.s)
     Debut = *Char
     Fin = Debut + Longueur
     ; Première passe
     *CharKey1.BYTE = @Key
     pKeyRec = 0
     For t=0 To 3
          pKeyRec + ((*CharKey1\b - 48) & $F)
          pKeyRec << 4
          *CharKey1 + 1
     Next
     Debug Hex(pKeyRec)
     IndB.w = 1
     While *Char <= Fin
          *CharKey1 = @Key
          For r=0 To 11
               MOV al,*Char\b
               XOR al,*CharKey1\b
               ROL al,4
               MOV *Char\b,al
               *Char + 1
               *CharKey1 + 1
          Next
          If pKeyRec & IndB
               *Char + 1
          EndIf
          ROL IndB,1
     Wend
     ; Seconde passe
     *Char = Debut
     *CharKey2.BYTE = @Key + 12
     pKeyRec = 0
     For t=0 To 3
          pKeyRec + ((*CharKey2\b - 48) & $F)
          pKeyRec << 4
          *CharKey2 + 1
     Next
     Debug Hex(pKeyRec)
     IndB.w = 1
     While *Char <= Fin
          *CharKey2 = @Key + 12
          For r=0 To 7
               MOV al,*Char\b
               XOR al,*CharKey2\b
               MOV *Char\b,al
               *Char + 1
               *CharKey2 + 1
          Next
          If pKeyRec & IndB
               *Char + 1
          EndIf
          ROL IndB,1
     Wend
EndProcedure
Procedure Decrypter(*Char.BYTE,Longueur,Key.s)
     Debut = *Char
     Fin = Debut + Longueur
     ; Première passe
     *CharKey2.BYTE = @Key + 12
     pKeyRec = 0
     For t=0 To 3
          pKeyRec + ((*CharKey2\b - 48) & $F)
          pKeyRec << 4
          *CharKey2 + 1
     Next
     Debug Hex(pKeyRec)
     IndB.w = 1
     While *Char <= Fin
          *CharKey2 = @Key + 12
          For r=0 To 7
               MOV al,*Char\b
               XOR al,*CharKey2\b
               MOV *Char\b,al
               *Char + 1
               *CharKey2 + 1
          Next
          If pKeyRec & IndB
               *Char + 1
          EndIf
          ROL IndB,1
     Wend
     ; Seconde passe
     *Char = Debut
     *CharKey1.BYTE = @Key
     pKeyRec = 0
     For t=0 To 3
          pKeyRec + ((*CharKey1\b - 48) & $F)
          pKeyRec << 4
          *CharKey1 + 1
     Next
     Debug Hex(pKeyRec)
     IndB.w = 1
     While *Char <= Fin
          *CharKey1 = @Key
          For r=0 To 11
               MOV al,*Char\b
               ROR al,4
               XOR al,*CharKey1\b
               MOV *Char\b,al
               *Char + 1
               *CharKey1 + 1
          Next
          If pKeyRec & IndB
               *Char + 1
          EndIf
          ROL IndB,1
     Wend
EndProcedure

Dim Tab.l(17)
Tab(0) = 36
For t=1 To 16
     Tab(t) = 25 + t * 24
Next
     
Style = #PB_Window_SystemMenu|#PB_Window_Invisible|#PB_Window_ScreenCentered
If OpenWindow(#Window_0, 319, 171, 600, 600, Style, "crypte & décrypte")
     If CreateGadgetList(WindowID())
          EditorGadget(#Editor_0, 10, 40, 580, 550)
          SendMessage_(GadgetID(#Editor_0),#EM_SETBKGNDCOLOR,#Null,RGB(100,150,200))
          SendMessage_(GadgetID(#Editor_0),#EM_SETTABSTOPS,17,@Tab(0))
          SetGadgetFont(#Editor_0, FontID2)
          StringGadget(#String_0, 180, 10, 200, 20, "", #PB_String_UpperCase)
          SendMessage_(GadgetID(#String_0), #EM_LIMITTEXT, 16, 0)
          ButtonGadget(#Button_0, 400, 10, 90, 20, "KeyGen")
          ButtonGadget(#Button_1, 500, 10, 90, 20, "Crypter")
          TextGadget(#Text_0, 10, 10, 160, 20, "Clés de cryptage :", #PB_Text_Center)
          SetGadgetFont(#Text_0, FontID1)
     EndIf
     HideWindow(#Window_0,0)
EndIf
Memoire = AllocateMemory($FFF)
FillMemory_(Memoire,$1000,$00)
AfficheMemoire(Memoire,$FFF)
GenKey()

Repeat
     Event = WaitWindowEvent()
     WindowID = EventWindowID()
     GadgetID = EventGadgetID()
     EventType = EventType()
     If Event = #PB_EventGadget
          If GadgetID = #Editor_0
          ElseIf GadgetID = #String_0
          ElseIf GadgetID = #Button_0
               GenKey()
          ElseIf GadgetID = #Button_1
               If GetGadgetText(#Button_1) = "Crypter"
                    Crypter(Memoire,$FFF,GetGadgetText(#String_0))
                    AfficheMemoire(Memoire,$FFF)
                    SetGadgetText(#Button_1,"Décrypter")
               Else
                    Decrypter(Memoire,$FFF,GetGadgetText(#String_0))
                    AfficheMemoire(Memoire,$FFF)
                    SetGadgetText(#Button_1,"Crypter")
               EndIf
          EndIf
     EndIf
Until Event = #PB_Event_CloseWindow
End
erix14
Messages : 480
Inscription : sam. 27/mars/2004 16:44
Contact :

Message par erix14 »

Passons maintenant aux choses sérieuses :D
Voici mon CrackMe :
http://home.tele2.fr/erix14/CrackMe_Erix14.exe
Si vous réussissez à le cracker, vous allez pouvoir me donner le code inscrit sur la page protégée, cela prouvera votre réussite...
Si personne ne réussit dans plusieurs semaines, je donnerai la clé de mon CrackMe.
J'ai passé mon CrackMe à l'antivirus BitDefender v8, pour lui c'est un Exe comme les autres.
Amusez-vous bien :wink:
julien
Messages : 846
Inscription : ven. 30/janv./2004 15:06
Contact :

Message par julien »

@AYBABTU
@zorglub

une semaine après le post de mon crack-me v3, ou en êtes vous ?


@Erix14, j'ai regardé le tiens, superbe graphisme ! :)
scaraber
Messages : 362
Inscription : ven. 15/juil./2005 17:32

Message par scaraber »

l'algo de criptage ne marche pas...
erix14
Messages : 480
Inscription : sam. 27/mars/2004 16:44
Contact :

Message par erix14 »

scaraber a écrit :l'algo de criptage ne marche pas...
erix14 a écrit :N'oubliez pas d'activer l'assembleur en ligne
scaraber
Messages : 362
Inscription : ven. 15/juil./2005 17:32

Message par scaraber »

comment on lactive ne ligne ?
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message par Anonyme2 »

scaraber a écrit :comment on lactive ne ligne ?
Menu compilateur/option de compilation et tu coches la ligne ensuite valide avec le bouton Ok
Répondre