Page 4 sur 8

Publié : dim. 21/août/2005 0:35
par AYBABTU
Lapin a écrit :AYBABTU : faut arrêter de de sentir attaquer de partout... Image
Ah mais moi je prefere faire l'amour que la guerre, c'est sûr, malgrès mon pseudo :) Mais là on peut pas dire que le Monsieur il a pas été mechant avec moi quand même :) Et pis d'abord, c'est lui qui dit que je l'ai agressé en premier, et toc :p et c'est celui qui dit qui est :P
Lapin a écrit : d'accord, mais un cracker n'est pas un pirate ni un carder.
si tu diffuses juste une démo bridée sur ton site, le cracker ne pourra pas faire grand chose...
tu peux aussi watermarker les fichiers de la version complète, histoire de décourager les petits malins.
yeap je suis d'accord :)
Et je rajoute (je prefere prendre mes precautions maintenant ^^, ceci n'est pas une critique du conseil donné plus haut) que dans le 0d (la cours où il y a la grande competition, et les grandes teams) ça ne dérange personne que la release vienne d'un truc cardé ou non. (voir PureBasic :p)
Y'a des histoires de hacking qui se rajoutent au cracking maintenant, pour recuperer des informations si par exemple il existe sur le site de l'auteur un script pour generer une licence qui sera envoyée automatiquement a l'achat. Bref, blindez aussi vos sites si c'est le cas :) Et pensez a supprimer les licences envoyées de vos mails. Dites le aussi a ceux a qui vous les envoyez. On peut en faire de choses, parfois, a partir d'un seul serial ...
Lapin a écrit : Mon conseil:
éviter les name/serial, c'est beaucoup trop classic... toujours les mêmes api... la routine (sans jeux de mot bidon :lol: )
faites un truc avec des couleurs, des flèches, des checkbox, bouger des éléments pour s'enregistrer ect...
Joli jeux de mot ;) Ouais c'est bien plus marrant les trucs comme ça, je suis d'accord :) Ca sort de la routine en effet :) Parfois on prend un vrai plaisir a dejouer les protections faites maisons, quand elles sont originales.

Ah oui tiens un dernier conseil. Quand vous vous faites cracker votre application avec un serial, voir un keygen, les blacklist ca ne sert a rien pour la version suivante. C'est juste interessant pour les serials volés ou cardés. Et donc, si vous vous decouvrez un crack et que vous avez la possibilité de parler au crackeur, évitez de l'insulter betement :) Sachez que là ou je suis, si un auteur nous demande de ne plus cracker ses programmes, on ne le fait plus. Un petit message dans le binaire pour demander de le contacter ça coûte rien. Voir on lui dit comment ca a été fait et comment corriger ca. Julien ici présent peut en temoigner :)

Publié : dim. 21/août/2005 0:41
par LeCyb
AYBABTU, je sais pas d'où tu sors mais je viens pas ici pour me faire harceler.
Alors ton petit jeu de citations tu le fais avec qqun d'autre mais moi je répondrai plus et je ne lirai plus non plus tes messages (donc ne te fatigue pas à reciter ce message sauf si tu veux de nouveau faire ton malin devant tout le monde).


Pour moi c'est clos et je m'excuse auprès de tous les autres si j'ai choqué/dérangé mais j'ai pas l'habitude de fréquenter des gens qui m'agressent.

Publié : dim. 21/août/2005 0:43
par AYBABTU
LeCyb a écrit :je répondrai plus et je ne lirai plus non plus tes messages (donc ne te fatigue pas à reciter ce message sauf si tu veux de nouveau faire ton malin devant tout le monde).
Ok, je suis ravis de cette decision alors. Merci.

Publié : dim. 21/août/2005 7:40
par erix14
Voici un petit code à cacher judicieusement plusieurs fois dans votre programme pour savoir si il est espionné et prendre ainsi les mesures nécessaires pour dérouter l'espion. :D

Code : Tout sélectionner

Structure LL 
     Low.l 
     High.l 
EndStructure 
Global Debut.LL,Fin.LL,CyclesHorloge.l
CyclesHorloge = 999999999
!RDTSC 
MOV Debut\Low,eax
MOV Debut\High,edx
!RDTSC 
MOV Fin\Low,eax
MOV Fin\High,edx
!fild qword [v_Fin]
!fild qword [v_Debut]
!fsubp
!fistp dword[v_CyclesHorloge]

If OpenWindow(0,0,0,230,60,#PB_Window_SystemMenu|#PB_Window_WindowCentered,"Cherche espion",hwnd)
     CreateGadgetList(WindowID())
     If CyclesHorloge > 150
          TextGadget(1,10,10,210,50,"ATTENTION, ce programme est espionné!")
     Else
          TextGadget(1,10,10,210,50,"O.K., c'est tranquille pas d'espions en vue !")
     EndIf
     SetGadgetFont(1,LoadFont(0,"Verdana",12))
     Repeat 
          Select WaitWindowEvent() 
               Case #PB_EventCloseWindow
                    quit = #True
          EndSelect 
     Until quit
EndIf
     
N'oubliez pas d'activer l'assembleur en ligne :D

Publié : dim. 21/août/2005 8:33
par julien
AYBABTU a écrit :Julien ici présent peut en temoigner :)
Tout à fait, en plus on apprend plein de chose, et l'acceuil de la team à été très chaleureuse !
Le plus difficile étant de les contacter

Publié : dim. 21/août/2005 8:45
par Dr. Dri
super ton code rx, pour ceux qui n'auraient pas compris comment le tester, activer/désactiver le debugger pour se rendre compte de l'efficacité 8O

par contre je comprend rien à ce code et je suis pas contre une explication...

Dri :10:

Publié : dim. 21/août/2005 10:07
par djes
C'est pourtant simple, l'instruction RDTSC renvoie le nombre de cycles d'horloges depuis le démarrage de l'ordinateur. Erix14 y fait deux fois appel, en fait la soustraction, et si la différence est largement supérieure à ce que les quelques instructions qu'il a utilisé devraient prendre, c'est que le code a été "tracé", c'est à dire que le processeur a perdu du temps ailleurs.

Publié : dim. 21/août/2005 10:20
par AYBABTU
Dr. Dri a écrit : par contre je comprend rien à ce code et je suis pas contre une explication...
Héhé le trick du RDTSC. Un anti-debuggeur classique mais efficace :) Petite parenthese, si vous utilisez un antidebuggeur, evitez la simple messagebox "Desactive ton debuggeur !". Changez plutot des variables, qui feront crasher votre programme bien plus tard. Ou alors changer des valeurs pour la generation du serial. Bref, des p'tits trucs discrets. Mais là c'etait pour l'exemple, c'est nickel :)

Pour l'explication, RDTSC (ReaD Time Stamp Counter) retourne dans eax et edx (ca émule donc un nombre 64 bits) le nombre de cycles processseurs depuis que le PC est allumé. Si la difference entre 2 RDTSC consecutif est importante, c'est que l'application est debuggée, puisqu'il faut un certain temps au debugger pour faire ce qu'il a a faire.

EDIT: grillé par djes :)

Publié : dim. 21/août/2005 10:41
par Le psychopathe
ton programme plante. J'ai pure basic 3.94
il me dit :
debut is not valid operator
:(

Publié : dim. 21/août/2005 10:43
par Le psychopathe
c'est bon, j'avais oublié de mettre en assembleur ligne par ligne.
@++

Publié : dim. 21/août/2005 12:13
par Dr. Dri
eh bah je m'en souviendrais de ca ^^ Un tracer sur mon programme ? tous les pointeurs deviennent nuls :P

d'ailleurs après avoir compris les grandes lignes de ce snippet jme suis attardé sur les utilisations de nombres réels... et j'ai pas compris pourquoi tu fais pas l'opération directement avec les 64bits.
chui nul en assembleur donc j'ai pas réussi à faire ca mieux qu'en 32bits et apres avoir testé 20 fois avec le debugger puis 20 fois sans le debugger, j'obtiens le même résultat.

Code : Tout sélectionner

Global debut.l, fin.l

!RDTSC
MOV debut, eax
!RDTSC
MOV fin,   eax

CyclesHorloge = fin - debut

If OpenWindow(0,0,0,230,60,#PB_Window_SystemMenu|#PB_Window_WindowCentered,"Cherche espion",hwnd)
     CreateGadgetList(WindowID())
     If CyclesHorloge > 150
          TextGadget(1,10,10,210,50,"ATTENTION, ce programme est espionné!")
     Else
          TextGadget(1,10,10,210,50,"O.K., c'est tranquille pas d'espions en vue !")
     EndIf
     SetGadgetFont(1,LoadFont(0,"Verdana",12))
     Repeat : Until WaitWindowEvent() = #PB_EventCloseWindow
EndIf
Dri

Publié : dim. 21/août/2005 13:57
par erix14
Il vaut mieux utiliser les nombres 64bits, car après $FFFFFFFF ça recommence à 0. Imagine, ton début est à $FFFFFFF0 et ta fin à 20 !
Il faut pallier à toute éventualité... Pour ne pas trouver un espion là ou il n'y en a pas :D

Publié : dim. 21/août/2005 14:13
par Dr. Dri
d'accord ^^
mais comment je fais une soustraction sur 64bits ?

je suis un gros gros débutant en assembleur et j'y connais pas grand chose...
(je vais aller voir si on a ca sur le forum ASM sinon je serais pas contre un tuto ASM sur les 64 ^^)

Dri

Publié : dim. 21/août/2005 15:06
par erix14
Et maintenant voici le même programme, mais avec les instructions RDTSC complètement camouflées :D
Comme cela, plus moyen de trouver le code $0F31 de l'instruction RDTSC.
Je n'ai pas été trop vicieux, c'est un exemple :D

Code : Tout sélectionner

Structure LL 
     Low.l 
     High.l 
EndStructure 
Global Debut.LL,Fin.LL,CyclesHorloge.l
Var1 = 14
CyclesHorloge = 999999999 
Var2 = 49
Var3 = 40
#PROCESS_ALL_ACCESS = $1F0FFF 
hID = GetCurrentProcessId_() 
hProcessID = OpenProcess_(#PROCESS_ALL_ACCESS,#True,hID) 
; J'enlève la protection en écriture de mon exécutable.
VirtualProtectEx_(hProcessID,?Debut1_ASM,?Fin_ASM-?Debut1_ASM,#PAGE_EXECUTE_READWRITE,@oldProtect) 
Var1 + 1
*pByte1.BYTE = ?Debut1_ASM
*pByte1\b = Var1
Var3 + 9
*pByte2.BYTE = ?Debut2_ASM
*pByte2\b = Var1
*pByte1 + 1
*pByte1\b = Var2
*pByte2 + 1
*pByte2\b = Var3
Debut1_ASM:
!XOR eax,eax
MOV Debut\Low,eax
MOV Debut\High,edx
Debut2_ASM:
!XOR eax,eax
Fin_ASM:
MOV Fin\Low,eax 
MOV Fin\High,edx 
!fild qword [v_Fin] 
!fild qword [v_Debut] 
!fsubp 
!fistp dword[v_CyclesHorloge] 
If OpenWindow(0,0,0,230,60,#PB_Window_SystemMenu|#PB_Window_WindowCentered,"Cherche espion",hwnd) 
     CreateGadgetList(WindowID()) 
     If CyclesHorloge > 150 
          TextGadget(1,10,10,210,50,"ATTENTION, ce programme est espionné!") 
     Else 
          TextGadget(1,10,10,210,50,"O.K., c'est tranquille pas d'espions en vue !") 
     EndIf 
     SetGadgetFont(1,LoadFont(0,"Verdana",12)) 
     Repeat 
          Select WaitWindowEvent() 
               Case #PB_EventCloseWindow 
                    quit = #True 
          EndSelect 
     Until quit 
EndIf
@Dri
fild qword [v_Fin] Cette fonction charge la variable Fin 64bits(qword) sur la pile du coprocesseur.
fild qword [v_Debut] Cette fonction charge la variable Debut 64bits(qword) sur la pile du coprocesseur.
fsubp Soustraction
fistp dword[v_CyclesHorloge] On retire le résultat pour le mettre dans la variable CyclesHorloge 32bits(dword)

Publié : dim. 21/août/2005 15:10
par julien
@AYBABTU
@zorglub
et à tous les autres

J'ai fais un petit Crack-me, si vous voulez essayer
(Pas de danger le code est 100% propre)

Le but est de trouver le bon code, ou mieux si vous pouvez :D
Je ne pense pas qu'il soit très difficile


http://julien.heisspiter.no-ip.com/Pure ... ckme03.zip