Kleidp
Messages postés124Date d'inscriptionjeudi 5 juin 2003StatutMembreDernière intervention10 février 2008
-
4 sept. 2006 à 12:41
dodo7263
Messages postés616Date d'inscriptionmercredi 10 septembre 2008StatutMembreDernière intervention 9 février 2017
-
29 avril 2011 à 21:09
Bonjour a tous,
Je suis en train de coder une application que j'aimerais sécuriser un minimum, pour au moins décourager les hacker du dimanche.
Pour commencer, j'ai un login / Mot de passe a entrer que je compare à un hash de SHA256, bon pas de quoi casser des briques ...
Maintenant il faudrait que je me protège plus ou moins efficacement contre le désassemblage et le tracing.
Contre le désassemblage que pensez vous d'une obfuscation et d'une compression upx, en gros est ce que ça tiendra plus de quelques heures (en espérant que le nuisible se décourage vite :) ?
Le point le plus difficile apparemment est d'empêcher qu'un debuggeur s'exécute, voici ce que j'ai trouvé :
En effet un programme peut effacer lui-même les Drx (debug registers ;
registres hardware de debugging) de son propre CONTEXT (cf. structure
CONTEXT de Get/SetThreadContext). La structure CONTEXT est directement
atteignable au travers du SEH.
Mais le problème reste le même, le SEH peut être ou non pris en charge
par le debuggeur, le mieux est encore d'alterner des SEH qui ne font
rien de spécial, et des SEH qui vont s'occuper de tester si l'on est
effectivement débuggé.
Pour un "anti-tracing" (empêcher un débugger de tracer le code de son
application) on peut manipuler le registre EFLAGS (toujours dans un
SEH) en mettant le drapeau TF (trap flag) à 1 dans un SEH. Le trap flag
une fois armé déclenche une exception de type "trap" et les debuggeurs
sont incapables de continuer à tracer...
Le mieux est encore de coupler tout ca avec des méthodes anti-analyse
(junk code, VM, crypto) + une détection de breakpoint (en cherchant
l'opcode 0xCC qui correspond à une INT3) + un CRC pour vérifier
l'intégrité de son propre code : on commence à tenir une protection qui
tient la route :!:
Outch pas facile à voir comment réaliser ça en C#, mais est ce seulement réalisable (puisqu'on ne peut utiliser l'asm) ?
Y a t'il un autre moyen d'empêcher un debuggeur de s'éxecuter, de poser des breakpoints sur notre code en mémoire ?
Voila, j'en ai fini avec mes questions, merci pour vos futur (et intéressante) réponses.
sebmafate
Messages postés4936Date d'inscriptionlundi 17 février 2003StatutMembreDernière intervention14 février 201436 5 sept. 2006 à 14:33
mouaip... tout en sachant que pour "cracker" ton prog il suffit de le désassembler (ildasm)... avec un peu d'entrainement la modification ne prend que quelques minutes...
donc les protections anti debuggeur... ne servent à rien.
Kleidp
Messages postés124Date d'inscriptionjeudi 5 juin 2003StatutMembreDernière intervention10 février 2008 6 sept. 2006 à 18:39
Bizarrement je n'arrive pas a trouver de documents (en français) sur le sujet !
Je sens que je vais devoir plutot regarder du coté des sites obscures :)
Vous n’avez pas trouvé la réponse que vous recherchez ?
afihamza34
Messages postés3Date d'inscriptionmercredi 5 août 2009StatutMembreDernière intervention29 avril 2011 29 avril 2011 à 17:45
pour la sécurisation il faut faire une astuce qui permet a votre application de marcher a sens unique;
par exemple faire une test au démarrage au l'@ mac de pc qui utilise votre application.