Tutoriel sur le cracking .NET (débutants)

Mettez à disposition vos propres cours de cracking ou des cours que vous trouvez intéressant.

Tutoriel sur le cracking .NET (débutants)

Messagepar Martinooooo » 05 Mars 2012, 18:48

/!\ Avant tout ! Ceci est un tuto à but éducatif pour analyser un système de protection, il n'a aucune visée commerciale. Il n'est en aucun cas fait pour inciter à la violation des droits d'auteur /!\

Bonjour ! Un jour je me suis dit que si j'avais eu un tuto plus clair sur comment cracker du .NET plus tôt, j'aurais certainement gagné beaucoup plus de temps. Tous les autres tutos actuels étants en anglais/vieux/peu compréhensibles, j'ai décidé d'essayer de faire un tuto au plus clair. Il a la vocation de montrer différentes voies de crackage, différents outils utiles, des manières usuelles de faire (même si vous ne comptez pas trouver de serial ou faire de keygen, jetez un coup d'oeil à ces parties puisque cela présente également des outils/manières de faire).

Ce tutoriel n'est théoriquement pas dûr et est de la rigolade comparé à du crackage de programmes qui n'ont pas été faits en .NET (donc votre cerveau n'a pas besoin de mobiliser des capacités surhumaines, et ça ne demande pas de grosses compétences).
Pour ce tutoriel, il n'est pas nécessaire d'avoir de grandes connaissances. Il peut être utile de connaître des bases de C# ou de Basic, mais pas strictement nécessaire; par contre savoir se débrouiller un peu tout seul peut rester un +.

Merci de me dire s'il y a un soucis/incompréhension ou si je suis allé trop vite, je veux ce tutoriel le plus accessible et le plus clair possible.

Je montrerai comment :
1) faire un crack (2 manières)
2) trouver le serial
3) faire un keygen (préférable pour ce logiciel)

Outils nécessaires :
- .Net Framework 3.5 ou 4
- Protection ID : hxxp://pid.gamecopyworld.com/
- Reflector : hxxp://www.reflector.net/download/latest/
- M*ar%é*e!s : hxxp://www.mediafire.com/?3692uyclkdisizm ou hxxp://www.navilog.com/include/scripts/ ... gement.php

Pour un crack :
- Reflexil : hxxp://sourceforge.net/projects/reflexi ... urce=files

Pour le serial :
- Microsoft Visual Studio 2010

Pour un keygen :
- Microsoft Visual Studio 2010 est l'idéal, sinon Visual Studio C# 2010 Express ou Microsoft Visual Basic 2010 express (selon votre langage de programmation préféré entre le C# et le Basic)

Petite présentation des outils:
- Reflector est un decompiler : il permet d'observer d'une certaine manière le code source d'un programme/une DLL écrit en .NET et donc de chercher/analyser les protections. Reflector permet de voir le code source d'origine notamment en C# et en Basic (des bases en C# ou en Basic seront utiles mais pas forcément nécessaires pour des petits programmes tels que celui-là). Il est possible de changer la vision du langage en haut à droite, moi j'analyserai en C# mais vous pourrez le faire en Basic.
- Reflexil est un add-on à Reflector et permet de modifier le programme décompilé.
- Protection ID est un programme qui permet de détecter les protections des programmes (s'ils ont été "cryptés", et par quoi) et le langage d'origine de programmation (et pleins d'autres choses).

Alors tout d'abord, commençons par inspecter le programme M*ar%é*e!s : on ouvre Protection ID et on scanne le fichier (bouton Scan en bas à gauche -> Single File) et on voit :
Image

Chic ! Ce programme n'a pas de protection (=n'a pas été packé, c'est à dire que le programme n'a pas été compressé/crypté par un packer... et donc est plus simple à analyser directement), et a été fait en .NET ce qui veut dire qu'on peut décompiler le programme avec Reflector : on va pouvoir voir d'une certaine manière le code source du programme et donc chercher la protection. En plus, Protection ID semble avoir trouvé quelque chose qui correspond à une protection dans le programme du type serial (-> serialNumber)

Image

Alors là, plusieurs méthodes s'offrent à nous pour trouver la partie de code qui s'occupe de vérifier la licence.
1) On utilise le système de recherche de Reflector (Tools -> Search ou F3) pour chercher quelque chose qui s'apparent au module de protection (ici, le bouton est appelé Licence, donc on peut chercher des mots tels que serial, Verification, Licence... Finalement avec Licence, on arrive sur "FLicence".
2) On navigue dans le programme et on cherche des trucs qui ressemblent à une fonction qui demande le serial. Ici, il n'y a pas besoin d'ouvrir trop de zones puisqu'on voit rapidement le beau "FLicence".

Donc une fois qu'on a trouvé FLicence, on le déplie. Et en fouillant un peu au hasard des fonctions on tombe sur celle avec les messages d'erreur de vérification du sérial (quand on rentre un mauvais sérial on obtient le message "Pas de correspondance..." qu'on retrouve ici) :
Image

De plus on observe un if(match), ce qui correspond à "si cela correspond au vrai serial" qui amène, si le serial correspond, à "Bravo !" puis décoince le mode Trial du logiciel (FPrincipale.VERSION_DEMO = false;) ou si le serial ne correspond pas à "Pas de correspondance entre le numéro utilisateur et le code".


Alors maintenant qu'on a trouvé la classe où était la vérification (FLicence) et même la fonction de vérification (, on va passer à l'embranchement sur crack ou keygen :
-------------------------------------------
1) Faire un crack
--------
a) Patcher la vérification à l'entrée du serial (pour ce logiciel non fonctionnel, mais ça peut toujours servir pour d'autres :), ne sautez pas si vous voulez mieux connaitre !)

Tout d'abord il est nécessaire d'installer l'add-in Reflexil (il faut décompresser les .dll de Reflexil, aller dans Tools de Reflector -> Add-Ins -> Add -> ajouter Reflexil.Reflector.dll. Ensuite il faut lancer la fenêtre Reflexil : Tools -> Reflexil

Plusieurs méthodes s'offrent à nous. La première consiste à chercher les instructions (les commandes) qui disent "si oui on fait ça, sinon on fait ça". Donc, en ouvrant Reflexil on obtient le code en (C)IL/MSIL (Common Intermediate Language (MSIL)) qui correspond à la partie de code de la fonction que vous avez ouvert. Donc nous allons étudier rapidement (je n'aime pas tellement ce langage, je ne vais pas approfondir ou faire un cours, surtout que ce n'est pas un langage indispensable). Tout d'abord, il faut savoir que les instructions traduites en ce langage sont dans le même ordre que celles en C# vues, vous pouvez donc essayer de vous repérer avec les appels de fonction/les messages.
Nous obtenons ce code en mettant le langage en IL en haut à droite, qui correspond à celui de Reflexil (mais plus clair à analyser via Reflector que via Reflexil, donc tant qu'on ne modifie rien on reste dans Reflector) : http://pastebin.com/Zz0Yq3jP
Déjà, on cherche la comparaison, donc le match et on voit que c'est :
Code: Tout sélectionner
    L_000c: call bool M*ar%é*e!s.FLicence::match(string)

Donc, normalement le renvoi au bon message/activation se décide juste après, et on voit bien juste après un système de comparaison (avec true/false)
Code: Tout sélectionner
    L_0016: brtrue.s L_004f

On constate bien dans la description de brtrue.s que si la valeur est =1 (true), on saute jusqu'au message d'erreur de vérification du sérial. (ça saute jusqu'à 4f qui correspond en hexadécimal à 79, donc aux lignes dans Reflexil qui vont avec "Pas de correspondance"). Il faut donc inverser ce système (on ne va pas se casser la tête).
On va dans Reflexil, on fait donc un clic droit sur brtrue.s, on fait Edit et on trouve facilement que l'inverse c'est brfalse.s, on change donc brtrue.s en brfalse.s, puis on clique sur Update :
Image
Ensuite, on fait un clic droit sur M*ar%é*e!s.exe et on clique sur Reflexil -> Save as... et on sauvegarde dans le dossier de M*ar%é*e!s, puis on lance l'application en mode admin sur 7, et quand on rentre une licence au hasard, magie ça donne Bravo et quand vous fermez le "A Propos" et que vous réouvrez , la licence est enregistrée.

Malheureusement on remarque assez vite que la licence est stockée clairement avec les autres préférences dans un fichier qui se situe dans ce dossier (.dta si je me souviens bien) et vérifiée à chaque démarrage : le mode du logiciel se remet en démo à chaque démarrage et il est nécessaire à chaque fois de rentrer une licence bidon (ça fait perdre 5 secondes à chaque lancement, ça peut se garder mais on peut faire plus propre).
C'est pourquoi il est mieux de faire un serial (peut-être même plus simple parfois) ou un keygen (mais légèrement moins simple et plus long).

Pour pallier à ça vous pouvez aussi modifier d'autres choses : forcer la valeur de la variable booléenne (en gros qui ne peut qu'être vraie ou fausse) VERSION_DEMO à FALSE (ou 0, c'est pareil) (dans ce cas l'application n'est plus en démo) ou supprimer les limitations de la démo ainsi que les messages "non enregistré" dans le a propos et même changer la manière de vérification.
Et vous trouverez pleins d'autres méthodes surement, il suffit d'avoir un peu d'imagination et de creuser, prenez des initiatives et fouillez avec Google. Nous allons voir la méthode suivante qui ici est une méthode de patching fonctionnelle (pas besoin de serial/keygen !) :
--------
b) Patcher l'initialisation de la config du logiciel (fonctionnel ici, peut être aussi très utile comme technique)
En écriture//
Tout d'abord nous avons vu précédemment que le logiciel est mis en version démo avec FPrincipale.VERSION_DEMO = false;. Nous avons vu que l'activation permet de le passer en true et donc d'enlever les limitations de demo; et que la licence est stockée et revérifiée à chaque début avec une autre procédure, d'où le fait qu'il soit nécessaire de réeffectuer la manipulation d'activation à chaque lancement.
Alors pourquoi ne pas simplement trouver la procédure qui vérifie la licence à l'initialisation ?
Pour cela on fait un clic droit sur VERSION_DEMO et on clique sur "Analyze".
On cherche à savoir quelles procédures définissent ce booléen, nous cliquons donc sur 'Assigned by' ('Used by' sert à savoir quelles procédures récupèrent la valeur de ce booléen, vous pouvez donc choisir de patcher toutes les fonctions de 'Used by' ou de patcher les procédures qui définissent VERSION_DEMO).
Nous reconnaissons la procédure btnOK_Click qui correspond au bouton d'entrée de licence, puis deux autres fonctions : .cctor et .ctor. Ce sont des fonctions qui se lancent tout au début de l'initialisation d'une classe quand elle est appelée (pour faire simple). Ils s'initialisent tous les deux avec la fenêtre principale (FPrincipale). Regardons .cctor (clic droit, go to member).
Image
qui amène à
Image
Magie ! Au démarrage, VERSION_DEMO est mis à "true", ce qui active le fait que le logiciel soit en démonstration [si vous voulez aller plus loin, vous pourrez voir que dans .ctor il est passé à ="false" avec if ((VERSION_DEMO && (this.varGlobales.strCodeUtilisateur != "")) && FLicence.match(this.varGlobales.strCodeUtilisateur))].

Il suffit donc de patcher ça !
Sachant que le code IL est structuré de la même manière et dans le même ordre que la transcription en C# ou VB.NET que vous lisez, comme VERSION_DEMO = true; est la première instruction C# c'est donc la première instruction IL.
Nous pouvons voir un appel en IL à VERSION_DEMO avec stsfld et en lisant la description de stsfld (clic droit, edit dessus) : Replaces the value of a static field with a value from the evaluation stack. Cela prend donc la valeur en haut de la pile, et comme il n'y a qu'une instruction au-dessus : ldc.i4.1 avec description : Pushes the integer value of 1 onto the evaluation stack as an int32.. (rappel : 0=FALSE / 1=TRUE).
Nous avons donc ldc.id4.1 qui mets "1" (donc TRUE) en haut de la pile et stsfld qui prend la valeur en haut de la pile (donc TRUE) et la définit VERSION_DEMO avec. Il faut donc remplacer ldc.id4.1 pour que la valeur en haut de la pile soit 0 et donc false. En toute logique si ldc.id4.1 met 1, ldc.id4.0 met 0. Cette manière de définir un booléen est très courant dans toutes les applications retenez au moins ça :D

Image
On fait donc Edit sur ldc.id4.1 et on met à la place ldc.id4.0 puis on clique sur Update. On sauvegarde de la même manière que pour le a).
On ouvre le fichier patché et oh magie "Version intégrale" ! On a donc réussi à mettre le logiciel en version intégrale en ne faisant que patcher, sans trouver un serial ou faire un keygen !

Juste pour conclure la section patch : c'est rare qu'il soit impossible de patcher un logiciel, il y a toujours une méthode. Pleins de voies s'offrent à vous !

-------------------------------------------
2) Trouver le serial
Tout d'abord il est nécessaire de mettre Reflector en add-in à Visual Studio 2010 : initialisez Visual Studio jusqu'à atteindre l'écran de création de projets, ensuite ouvrez Reflector, allez dans Tools -> Visual Studio and Windows Explorer integration et cocher votre Visual Studio puis validez.
Image

Ensuite relancez Visual Studio (n'oubliez pas de le lancer en mode administrateur, c'est plus simple pour la suite) : vous avez un nouvel onglet ".NET Reflector". Vous cliquez donc dessus -> Choose assembly to debug -> bouton browse et sélectionnez votre fichier M*ar%é*e!s.exe et validez. Ensuite .NET Reflector -> Explore decompiled assembly -> vous développez tout et double-cliquez sur "FLicence" : tout le code décompilé de FLicence est chargé dans Visual Studio.

Maintenant il est nécessaire de mettre un "breakpoint" sur la fin de la routine de création de sérial, c'est à dire au moment où le serial est retourné. Un breakpoint est une sorte de pause du programme à la ligne où il a été mis, et permet d'analyser ce que le programme a en mémoire à ce moment-là.
On sait que la routine est code(string numeroUtilisateur), on voit que le serial est renvoyé à la ligne
Code: Tout sélectionner
return str;

Nous mettons donc un breakpoint sur cette ligne : on la sélectionne, on fait clic droit -> Point d'arrêt -> Insérer un point d'arrêt :
Image

Il est maintenant nécessaire de lancer le programme. On ouvre donc normalement M*ar%é*e!s.exe, puis une fois ouvert on retourne dans notre fenêtre de Visual Studio -> Déboguer -> Attacher un processus
Image

Nous avons donc le processus lié à Visual Studio et le breakpoint mis sur le retour de la fonction de création du serial. Maintenant il ne nous reste plus qu'à activer cette fonction en rentrant un mauvais serial dans le programme que nous avons lancé. Nous allons donc dans A Propos -> Licence et on rentre un serial bidon puis on valide.
Et là, bam magie, le programme s'arrête, Visual Studio se met en avant et montre les variables au moment du breakpoint, c'est à dire qu'on voit le numeroUtilisateur et le str qui correspond au serial ! Vous avez donc récupéré votre serial !
Image

Et comme vous pourrez voir
Image


-------------------------------------------
3) Faire un keygen
Il n'est pas forcément nécessaire de connaître le C# ou le Basic, mais ça reste un + pour cette partie aussi.
Nous allons utiliser le langage C# dans Reflector et Visual C# 2010 Express, mais vous pourrez faire la même manipulation avec du VB avec Visual Basic 2010 Express.

Donc vous ouvrez Visual C# et vous créez un nouveau projet Windows Form. Vous insérez un bouton et une zone de texte avec l'utilitaire. Le bouton devrai s'appeler button1 et la zone de texte textBox1. Ensuite double-cliquez sur le bouton pour paramétrer ce qu'il faut faire quand on clique dessus. On obtient le code suivant : http://pastebin.com/1UBryaTt

Image

Maintenant il faut découvrir la routine de création du serial : on voit en fouillant encore, que c'est la fonction "code(String)". On rajoute donc cette fonction à la classe dans la zone de code obtenue en double-cliquant sur le bouton dans Visual C# : http://pastebin.com/jqc79nHQ
Cependant, on remarque qu'il est nécessaire d'avoir une fonction numeroUtilisateur() (qui correspond à votre numéro d'ordinateur affiché dans Licence du logiciel). On rajoute donc aussi cette fonction : http://pastebin.com/F2Y0CCrz
Ensuite Visual C# dit qu'il manque aussi des informations sur GetVolumeInformation, on clique donc sur ce nom dans Reflector et on copie encore les infos dans notre code : http://pastebin.com/9He20vz6
Visual C# ensuite nous dit qu'il ne connait pas Dllimport : c'est normal il n'a pas été appelé, on rajoute donc le module qui lui correspond, soit tout en haut du code
Code: Tout sélectionner
using System.Runtime.InteropServices;
: http://pastebin.com/wdxN5bb8

Maintenant il faut lier la routine de création (code(string numeroUtilisateur)) au clic sur le bouton pour pouvoir afficher le serial dans la zone de texte. Il faut d'abord dire que le serial obtenu à la fin de l'exécution de code(...) sera un string (je définirai ça vaguement comme étant une chaine de caractères). Ce que je vais mettre en // est un commentaire de la ligne :
Code: Tout sélectionner
            string numuti; //on définit "numuti" comme étant une chaine de caractères (vous l'appelez comme vous le voulez)
            numuti = numeroUtilisateur(); //on dit que "numuti" est le résultat de l'exécution de la fonction numeroUtilisateur(), soit le numéro donné par le logiciel pour identifier votre ordinateur
            textBox1.Text = code(numuti); //on met dans la textBox1 le texte correspondant à l'exécution de la fonction code depuis la valeur de votre numéro d'ordinateur, qui est numuti


On met tout ça dans la fonction private void button1_Click(object sender, EventArgs e) créée automatiquement par Visual C# pour être exécutée lorsque le bouton est cliqué : http://pastebin.com/chK4q0sB (ceci est le code final).
On clique sur Déboguer->Démarrer le débogage et on constate que le programme marche bien.
Image

Vous pouvez ensuite cliquer sur "Enregistrer tout" pour enregistrer le code source, puis Déboguer->Générer la solution pour créer le .exe que vous trouverez dans le dossier bin de votre projet (là où vous avez "enregistré tout"). Vous pouvez également paramétrer la couleur de la fenêtre, le nom des objets......
Et voilà vous avez un keygen fonctionnel (testez sur une version toute neuve de M*ar%é*e!s et vous verrez - vous pourrez aussi constater avec bloc-notes que le sérial entré est mis à la fin du fichier .dta dans le dossier de M*ar%é*e!s).



PS: N'oubliez pas que fouiller reste le principal : il faut toujours essayer, chercher, creuser...

De plus la méthode de vérification du sérial ne sera pas toujours de cette manière, il est possible qu'on parte du sérial que vous avez rentré, qu'on fasse des opérations dessus et qu'ensuite on vérifie après les opérations. Dans ce cas il est nécessaire d'avoir quelques connaissances de programmation pour arriver à coder un keygen qui arrive à créer un serial qui vérifie à la fin des opérations la comparaison. Le patching est généralement plus fréquent à bas niveau (plus simple et pas forcément moins bien).

Vous pourrez également rencontrer des codes obfusqués (une certaine forme de cryptage pour mieux éviter qu'on cracke le programme) ou des appels à des DLL de vérification de sérial qui n'ont pas été codées en .NET pour éviter aussi qu'on cracke aussi facilement, mais on ne traitera pas ce sujet maintenant.
Si le code est obfusqué, je vous renvoie aux outils de deobfuscation : de4dot.
Si il y a un renvoi à une DLL (vous pouvez voir les renvois à des DLL dans par exemple M*ar%é*e!s.exe -> References) qui n'a pas été faite en .NET, il faudra faire du cracking basique avec le bon vieux OllyDBG et un cerveau.

Vous pouvez également rechercher des messages qui apparaissent en utilisant la fonction loupe puis en cliquant sur le 3eme bouton (bouton pour rechercher dans les string) [très utile]

Si vous désirez aller plus profondément sur le cracking (RE, reverse engineering), notamment sur les applications non codées en .NET, de multiples tutos sont disponibles mais nécessitent un peu plus d'apprentissage et de cerveau (vous allez baver de l'ASM clairement). Ils sont évidemment plus dûrs que ce tuto-là puisque les applications non codées en .NET ne sont pas décompilables directement (enfin hxxp://www.hex-rays.com/products/decompiler/index.shtml c'est plus compliqué que ça mais théoriquement impossible). Les sites de tutos les plus connus :
* hxxp://deamonftp.free.fr/deamoncrack/
* hxxp://kibaaaa.free.fr/Jobs/APPcrack/Co ... acking.htm


------- Bonus 1 : utiliser la fonction recherche de Reflector -------
Comme certains (comme moi au début) croient que la fonction rechercher est peu puissante, mais c'est qu'il y a différentes options !
Imaginons que l'on veuille savoir où se trouve "heure d'hiver" de la fenêtre Annuaires. Il y a quelques années j'aurais appuyé sur l'icône de la loupe, j'aurais tapé "heure d'hiver" dans le champ, mais rien ne serait apparu et j'aurais dit "mais c'est de la merde ce système de recherche".
Mais non il faut appuyer sur le 3eme bouton, puis attendre un peu (quelques secondes voire minutes) :

Image


------- Bonus 2 : utiliser le "replace all with code" -------
[Pour ceux qui connaissent un minimum de C#/VB] [exemple sur un autre logiciel]
Imaginons qu'une procédure retourne dans une boîte par exemple le nom de la personne enregistrée, mais que vous avez patchée donc qu'il n'y en a pas. Exemple :
Image
On aimerait que cette fonction affiche "mArTi" : clic droit, replace all with code
Image
Le seul problème de cette fonction est qu'on ne peut pas appeler de fonctions situées dans d'autres classes :oops:
On va donc se contenter de faire une petite fonction qui retourne tout le temps mArTi.
Image
On sauvegarde et zou ! Ca retourne bien mArTi
(Il est possible qu'il y ait des erreurs avec des appels dans les methods stubs/fields stubs, dans ce cas-là supprimer toutes les méthodes/champs qui embêtent le compilo)

------- Bonus 3 : retirer l'avertissement au début -------
Sachant qu'il est au début, il vaut mieux voir directement le début du programme (et puis ça permet d'introduire une autre fonctionnalité de Reflector :mrgreen: ).
Clic droit sur M/a*r-é%e/s puis Go to Entry Point
Image
On voit que la fonction d'initialisation exécute Application.Run(new FPrincipale());, soit FPrincipale. On clique sur FPrincipale de cette ligne et on tombe sur le .ctor de FPrincipale. On cherche donc une référence à l'avertissement : new FAvertissement(this).ShowDialog();
On regarde donc avec Reflexil tout ce qui a référence a ça, on sélectionne, clic droit et delete :
Image
On sauvegarde, on lance et hop y'a plus l'avertissement de démarrage. Si cela n'a pas marché c'est que vous avez supprimé une/des instruction en trop ou en moins, réessayez !

--Indic n°1--
Avec un nag au chargement, regardez l'entry point et changez-le vers la fenêtre principale.
Dernière édition par Martinooooo le 14 Juin 2014, 14:33, édité 7 fois.
Acme::Don't
Acme::Bleach
Acme::Pony
Lingua::Romana::Perligata
The Lingua::Romana::Perligata makes it makes it possible to write Perl programs in Latin. (If you have to ask "Why?", then the answer probably won't make any sense to you either.)
Avatar de l’utilisateur
Martinooooo
Maître des ténèbres
Maître des ténèbres
 
Messages: 575
Inscription: 19 Août 2008, 08:20
Localisation: DR8, le + utile DRx

Re: Tutoriel sur le cracking .NET (débutants)

Messagepar Bango » 05 Mars 2012, 19:57

Merci martinooooo pour ce tutoriel :D

Ça va faire plaisir aux amateurs de .NET (et aux autres aussi sûrement)
Très complet, bien expliqué, et bien écrit ;)

Merki!
\ô/
Avatar de l’utilisateur
Bango
Modérateur
Modérateur
 
Messages: 1527
Inscription: 23 Juillet 2007, 15:33
Localisation: Gotham city

Re: Tutoriel sur le cracking .NET (débutants)

Messagepar Todd » 05 Mars 2012, 20:03

:bravo: Martinooooo. :wink:
La cible est comme trop souvent dépourvue de protection :(, mais ton approche est intéressante ! :)
On ne voit pas souvent d'utilisation de débogueur pour DotNet et encore moins celui de Visual Studio, alors c'est un beau tutoriel. :wink:

Je doute que cela fonctionne avec un programme protégé, mais c'est une très bonne introduction au cracking .Net ! 8)

Todd
Avatar de l’utilisateur
Todd
Modérateur
Modérateur
 
Messages: 1795
Inscription: 19 Avril 2009, 12:11

Re: Tutoriel sur le cracking .NET (débutants)

Messagepar Martinooooo » 05 Mars 2012, 20:16

Merci pour le retour PaPa :)

Todd a écrit::bravo: Martinooooo. :wink:
La cible est comme trop souvent dépourvue de protection :(, mais ton approche est intéressante ! :)
On ne voit pas souvent d'utilisation de débogueur pour DotNet et encore moins celui de Visual Studio, alors c'est un beau tutoriel. :wink:

Je doute que cela fonctionne avec un programme protégé, mais c'est une très bonne introduction au cracking .Net ! 8)

Todd


Le but de cet tutorial était d'expliquer pleins de méthodes et de trucs/astuces que j'ai trouvés au fur et à mesure de mon utilisation de Reflector-Reflexil (et que j'utilise le plus). J'aurais eu ces astuces avant ça m'aurais fait gagné des dizaines d'heures :mrgreen:
Un programme protégé / un programme en .NET ? Honnêtement, la moyenne des programmes a des protections similaires, ils couvrent juste avec un petit coup d'obfuscator mais pour ça y'a de4dot et c'est reparti comme en 40. En général la moyenne des .NET c'est du 0 skill, 100% rigolade et fouille (à part les trucs sur-organisés chiants comme EBP, mais on s'en tire relativement facilement).

Peut-être la seule facilité extrême là est le fait qu'un seul serial est disponible et qu'il est comparé à la valeur rentrée (mais très souvent l'activation c'est un bool et puis c'est tout).

EDIT: j'ai rajouté quelques bonus pour les fonctions que je n'avais pas montrées dans ce tutoriel
Acme::Don't
Acme::Bleach
Acme::Pony
Lingua::Romana::Perligata
The Lingua::Romana::Perligata makes it makes it possible to write Perl programs in Latin. (If you have to ask "Why?", then the answer probably won't make any sense to you either.)
Avatar de l’utilisateur
Martinooooo
Maître des ténèbres
Maître des ténèbres
 
Messages: 575
Inscription: 19 Août 2008, 08:20
Localisation: DR8, le + utile DRx

Re: Tutoriel sur le cracking .NET (débutants)

Messagepar Z4ck » 12 Mars 2012, 17:01

Merci !
ça m'a aidé à cracker un logiciel dont je ne trouvais le crack null part ! :) (j'ai utilisé la méthode du brfalse)
Z4ck
Visiteur
Visiteur
 
Messages: 11
Inscription: 15 Février 2012, 17:01

Re: Tutoriel sur le cracking .NET (débutants)

Messagepar D!oXyDe2k » 29 Mars 2012, 16:01

Très bon tuto merci,
j'ai bien aimé la manière dont tu détailles chaque action et tes screenshots. En effet pour débutant c'est très bien et pour ceux qui comme moi ne codent pas c'est très enrichissant d'avoir eu une démo.
Maintenant reflexil pour tester son intuition, je dis OUI mais après c'est hors de question d'utiliser des exécutables manipulés par Reflexil. Trop de bytes sont changés et le risque de plantages au cours de l'utilisation de l'application augmente.
Une fois sûr du patch à patch à appliquer perso j'utilise ILDasm pour récupérer la RVA de la fonction et je patch avec mon éditeur hexadécimal préféré... pour autant que le fichier ne soit pas signé. Enfin j'ai appris comme ça et je ne sais pas si maintenant y'a d'autres solutions mais patcher 5-6 bytes me semble plus sobre que quelques dizaines en utilisant Reflexil...
Qqun a-t'il un avis là-dessus ? En tout cas bravo très bon boulot c'est bien là le principal :D :D :D
M4Y4N PR0PH3CY T34M
cr4cking th3 c0d3... 4 fun!

Image
Avatar de l’utilisateur
D!oXyDe2k
 
Messages: 2
Inscription: 28 Mars 2012, 13:47

Re: Tutoriel sur le cracking .NET (débutants)

Messagepar Todd » 30 Mars 2012, 19:36

D!oXyDe2k a écrit:je ne sais pas si maintenant y'a d'autres solutions mais patcher 5-6 bytes me semble plus sobre que quelques dizaines en utilisant Reflexil... Qqun a-t'il un avis là-dessus ?
Il faudrait que tu précises ta question ! :roll:

Todd
Avatar de l’utilisateur
Todd
Modérateur
Modérateur
 
Messages: 1795
Inscription: 19 Avril 2009, 12:11

Re: Tutoriel sur le cracking .NET (débutants)

Messagepar gta126 » 31 Juillet 2012, 22:41

Super tuto bien réalisé et couvrant un large évantail de technique pour pouvoir cracker du .Net. Ce tuto mériterais de se retrouver sur le site de tuto de deamon :)

Sinon une petite remarque vers le début du tuto il y a un truc qui ma frapper c'est que tu dit que le langage IL signifie C Intermediate Language alors que ici pour le .Net il me semble que c'est le MSIL (MicroSoft Intermediate Language). Je me trompe peut être mais j'en suis casi certain.

Sinon continue comme ça super ;)
gta126
Débutant
Débutant
 
Messages: 29
Inscription: 06 Septembre 2006, 20:44
Localisation: Belgium

Re: Tutoriel sur le cracking .NET (débutants)

Messagepar Todd » 02 Août 2012, 21:48

gta126 a écrit:il me semble que c'est le MSIL (MicroSoft Intermediate Language)
Oui c'est exact ! :wink:

Todd
Avatar de l’utilisateur
Todd
Modérateur
Modérateur
 
Messages: 1795
Inscription: 19 Avril 2009, 12:11

Re: Tutoriel sur le cracking .NET (débutants)

Messagepar Martinooooo » 17 Août 2012, 08:50

gta126 a écrit:Super tuto bien réalisé et couvrant un large évantail de technique pour pouvoir cracker du .Net. Ce tuto mériterais de se retrouver sur le site de tuto de deamon :)

Sinon une petite remarque vers le début du tuto il y a un truc qui ma frapper c'est que tu dit que le langage IL signifie C Intermediate Language alors que ici pour le .Net il me semble que c'est le MSIL (MicroSoft Intermediate Language). Je me trompe peut être mais j'en suis casi certain.

Sinon continue comme ça super ;)


Mea Culpa je me suis gourré de titre et d'URL de wikipedia :P J'ai rectifié ça :)
En fait le langage s'appelle vraiment CIL mais Common Intermediate Language (et pas C tout court :P)... même si on l'appelle tous MSIL ou IL :lol:

Wikipedia a écrit:Le CIL était initialement connu sous le nom de Microsoft Intermediate Language ou MSIL durant les béta du langage .NET. Après la standarisation du C sharp et de la CLI, le bytecode fut officiellement référencé sous le nom de CIL. Les utilisateurs précoces de la technologie continuent néanmoins à se référer au terme MSIL.


Merci pour ton avis qui fait toujours plaisir et donne envie d'en faire d'autres et merci pour la rectification pour pouvoir rendre le tuto plus... NET :mrgreen:
Acme::Don't
Acme::Bleach
Acme::Pony
Lingua::Romana::Perligata
The Lingua::Romana::Perligata makes it makes it possible to write Perl programs in Latin. (If you have to ask "Why?", then the answer probably won't make any sense to you either.)
Avatar de l’utilisateur
Martinooooo
Maître des ténèbres
Maître des ténèbres
 
Messages: 575
Inscription: 19 Août 2008, 08:20
Localisation: DR8, le + utile DRx

Re: Tutoriel sur le cracking .NET (débutants)

Messagepar _solo » 18 Août 2012, 14:51

Reflector est devenu payant ????
Image
Avatar de l’utilisateur
_solo
Maître des ténèbres
Maître des ténèbres
 
Messages: 590
Inscription: 13 Février 2006, 11:28
Localisation: dans un cambrousse loin loin

Re: Tutoriel sur le cracking .NET (débutants)

Messagepar Jiwan » 18 Août 2012, 15:38

Malheureusement oui. ILSpy est une bonne alternative (un plugin équivalent a reflexil existe?).
Jiwan
Visiteur
Visiteur
 
Messages: 10
Inscription: 13 Août 2012, 12:35

Re: Tutoriel sur le cracking .NET (débutants)

Messagepar Martinooooo » 19 Août 2012, 12:07

_solo a écrit:Reflector est devenu payant ????


Depuis longtemps... je ne commenterai pas la légalité de ma version :mrgreen:
Acme::Don't
Acme::Bleach
Acme::Pony
Lingua::Romana::Perligata
The Lingua::Romana::Perligata makes it makes it possible to write Perl programs in Latin. (If you have to ask "Why?", then the answer probably won't make any sense to you either.)
Avatar de l’utilisateur
Martinooooo
Maître des ténèbres
Maître des ténèbres
 
Messages: 575
Inscription: 19 Août 2008, 08:20
Localisation: DR8, le + utile DRx

Re: Tutoriel sur le cracking .NET (débutants)

Messagepar Todd » 29 Août 2012, 08:45

Jiwan a écrit:un plugin équivalent à reflexil existe?
Je ne crois pas, mais à la base, Reflector, ILSpy ou DotPeek sont des outils d'analyse et non de modification. :roll: Après avoir compris le fonctionnement d'un programme, l'idéal est d'utiliser IDA pour cibler la modification et d'utiliser un éditeur hexa pour appliquer les changements. :wink:
Reflexil n'est pas toujours efficace surtout en cas de protection du code. :?

Todd
Avatar de l’utilisateur
Todd
Modérateur
Modérateur
 
Messages: 1795
Inscription: 19 Avril 2009, 12:11

Re: Tutoriel sur le cracking .NET (débutants)

Messagepar _solo » 05 Septembre 2012, 00:31

Depuis longtemps...
j'ai du dormir un bout de temps :aie: :aie:
ca sera donc justdecompile et dotpeek pour moi :) crève Lutz Roeder, je te cule
Image
Avatar de l’utilisateur
_solo
Maître des ténèbres
Maître des ténèbres
 
Messages: 590
Inscription: 13 Février 2006, 11:28
Localisation: dans un cambrousse loin loin

Suivante

Retourner vers Tutoriels

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 2 invités

cron