Titre: Cracking: Théorie & Tools Posté par: Lascazas le 12 Juillet 2015 à 20:54:11 Ce topic regroupe toutes les infos théoriques importantes et les choses à savoir pour le cracking, et également la plupart des outils utiles pour s'adonner à ce loisir =D
Vous devez pas tout connaitre par coeur, je sais que c'est casse-couilles, mais ça aide, donc venez voir cette page si vous avez un souci de compréhension =) Commençons par expliquer l'assembleur et OllyDBG. Les registres principaux EAX : Souvent utilisé pour passer des paramètres à une fonction. La valeur de retour d'une fonction est en général dans EAX ECX : Souvent utilisé comme compteur EDX, EBX EBP : Souvent utilisé avec des adresse de la pile ESP : Adresse courante de la pile ESI,EDI EIP, c'est le Instruction Pointer, l'adresse de la prochaine instruction à executer, on ne peut pas le modifier directement comme les autress. Tous les registres font 32 bits, donc 4 octets (= un "int" en C) Ils sont en haut à droite dans OllyDBG http://image.noelshack.com/fichiers/2012/31/1343992685-0.png (http://image.noelshack.com/fichiers/2012/31/1343992685-0.png) Les conventions d'appel de fonctions Les fonctions sont appelée avec CALL adresse Je vais expliquer les deux conventions principales. stdcall : Tous les paramètres de la fonctions sont mis sur la pile avec l'instruction PUSH, dans l'ordre de droite à gauche. Exemple, pour appeler fonction(param1,param2), c'est Code: PUSH param2 fastcall : Les premiers paramètres sont mis dans EAX, ECX et EDX, et s'il y en a plus, ils sont mis sur la pile. La pile En bas à droite dans OllyDBG: http://image.noelshack.com/fichiers/2012/31/1343993151-1.png (http://image.noelshack.com/fichiers/2012/31/1343993151-1.png) C'est comme une pile d'assiettes PUSH rajoute une assiette par dessus. POP enlève celle qui est au dessus. C'est tout ce qu'on peut faire. Ca sert principalement à: -Sauvegarder des registres pour les récup après: Code: PUSH EDX Les instructions principales Commençons par les jumps. JMP : Saut inconditionnel JE : Jump if Equal zero (Saute si le résultat est 0) JNZ : Jump if Not equal Zero (Si différent de 0) JL : Jump if Less (Saute si plus petit, en tenant compte du signe) JL_E: Jump if Less or Equal JB : Jump if Below (Saute si plus petit, sans tenir compte du signe) JBE : Jump if Below or Equal JG : Jump if Greater (Saute si plus grand, en tenant compte du signe) JGE : Jump if Greater or Equal JA : Jump if Above (Saute si plus grand, sans tenir compte du signe) JAE : Jump if Above or Equal JP : Jump if Parity (Saute si c'est pair) JS : Jump if Signed (Saut si negatif) Avant les jumps, il y a une instruction de test Les principales sont: TEST et CMP Il peut aussi y avoir le résultat d'un calcul ou d'une opération binaire. L'instruction MOV déplace des données Exemple: Code: MOV EAX,1 : Met 1 dans EAX Après, on peut combiner avec les adresse etc. LEA met une adresse dans un registre Exemple : Code: LEA EAX DWORD PTR DS:[ECX+2] REP permet de déplacer des données dans la mémoire PUSHAD: Met tous les registres sur la pile POPAD: Les récupère Les calculs: ADD : Addition MUL : Multiplication SUB : Soustraction DIV : Division Y'a aussi d'autres variantes. SAR ou SHR : Shift Right (décale les bits à droite) SAL ou SHL : Shift Left (à gauche) AND : Operation binaire AND (010101 AND 111110 = 010100) OR : Operation binaire OR (010101 OR 111110 = 111111) XOR : Operation binaire XOR (010101 XOR 111110 = 101011) NOP : Ne fait rien. Il y a aussi les instructions LOOP, qui sont des boucles qui décrémentent ECX à chaque passage et stoppent à 0. Il y en a encore d'autres, voir : http://en.wikipedia.org/wiki/X86_instruction_listings Ce tableau résume bien la plupart des instruction utiles: https://www.dropbox.com/s/f9w12vr2m39ytvw/IntelCodeTable.pdf Voilà pour l'assembleur. Plus d'infos sur OllyDBG OllyDBG c'est un debugger et désassembleur de progs PE 32 bits, c'est à dire les .exe et les .dll Ca fonctionne pour tous les langages compilés en natif, donc, entre autres, C, C++, Objective C, Pascal/Delphi, Visual Basic 6, Basic et dérivés, Go et un tas d'autres langages moins connus. En gros, tout sauf: -Les langages interpretés (Genre PHP, python, suffit de lire le code source là) -Les langages avec machine virtuelle (Java et C#, VB.NET, eux on peut les décompiler) Les commandes: F2 : Pose un Breakpoint (Le programme s'arrête là à l'execution) F7 : Avance pas à pas en entrant dans les CALLs F8 : Avance pas à pas sans entrer dans les CALLs F9 : Lance le programme F12 : Pause Autres trucs utiles * nous place à la position actuelle dans le code Clic droit > Search for > All referenced text strings : Recherche toutes les chaines de caractères présentes dans le programme Clic droit > Copy to executable > All modifications : Enregistre le programme patché On reconnait facilement les boucles, elles sont comme ça: http://image.noelshack.com/fichiers/2012/31/1344012246-2.png (http://image.noelshack.com/fichiers/2012/31/1344012246-2.png) Les fonctions connues aussi: http://image.noelshack.com/fichiers/2012/31/1344012549-3.png (http://image.noelshack.com/fichiers/2012/31/1344012549-3.png) Je vais expliquer les boutons-menus: http://image.noelshack.com/fichiers/2012/31/1344012684-4.png (http://image.noelshack.com/fichiers/2012/31/1344012684-4.png) L: Des logs, pas très intéressant E: Affiche les executables et DLL chargés et permet de voir les fonctions importées M: Permet de voir toute la mémoire liée au processus, et faire des recherches dedans T: Affiche les threads du processus W: Affiche les éléments de l'interface graphique du processus H: Affiche les handles (fichiers, socket, registre windows) C: Affiche le code, pas important /: Affiche ce qu'on a modifié K: Affiche le Call Stack, la pile des appels B: Affiche les breakpoints posés R: Affiche les résultats de la dernière recherche ...: Pour tracer, pas très important là S: Source. Mais on l'a pas Bouton d'après: Ouvre les options de debugging Bouton palette de couleur: Ouvre les options de l'apparence Ne pas oublié d'y configurer la coloration syntaxique Christmas Tree Petites infos sur le cracking en général Le cracking, ça consiste a modifier le fonctionnement d'un programme pour lui faire faire ce qu'on veut. Pour celà, il y a deux aspects: Patcher le programme Ca consiste à modifier la façon dont le programme se comporte directement en le patchant, principalement en modifiant des sauts et des appels de fonctions. Comprendre son fonctionnement (Reverse engineering) Ca consiste à analyser le programme et comprendre son fonctionnement, ce qu'il fait, comment il le fait, comment faire des keygen et comprendre les algorithmes etc Y'a aussi d'autres trucs tels que le hooking, l'unpacking, les shellcodes, buffer overflow. J'vais essayer d'expliquer ces trucs plus tard. Je vais aussi vous présenter quelques outils utiles pour le cracking: OllyDBG: http://www.ollydbg.de/odbg110.zip C'est le prog principal, qui permet de désassembler et de débugger de nombreux programmes. Plugins utiles pour OllyDBG: OllyDump: http://www.openrce.org/downloads/details/108/OllyDump Ce plugin permet de Dump des programmes pour les unpacker, c'est à dire qu'il récupère l'image du processus en mémoire. OllyAdvanced: Permet de corriger des bugs d'Ollydbg, améliorer certains comportements, des protections contre les antidebugs etc, bref, c'est un plugin très utile à avoir. http://image.noelshack.com/fichiers/2012/32/1344542923-0.png (http://image.noelshack.com/fichiers/2012/32/1344542923-0.png) http://www.openrce.org/downloads/details/241/Olly_Advanced PEiD: Permet d'obtenir des infos sur les programmes, voir s'ils sont packés etc https://www.dropbox.com/s/np35alddhsbv7rp/PEiD-0.95-20081103.rar http://image.noelshack.com/fichiers/2012/31/1343823794-1.png (http://image.noelshack.com/fichiers/2012/31/1343823794-1.png) ImpREC: Import reconstructor Ce tool permet de récupérer les imports de fonctions des programmes quand on unpack des trucs complexes. Ca fixe les progs dumpés pour leur remettre les fonctions, sans quoi ils buggeraient. http://image.noelshack.com/fichiers/2012/32/1344543510-1.png (http://image.noelshack.com/fichiers/2012/32/1344543510-1.png) http://www.woodmann.com/collaborative/tools/index.php/ImpREC LordPE: Permet d'éditer les .exe et .dll avec plein d'options avancées, et permet de dump des processus http://image.noelshack.com/fichiers/2012/32/1344543722-2.png (http://image.noelshack.com/fichiers/2012/32/1344543722-2.png) http://www.woodmann.com/collaborative/tools/index.php/LordPE RDG packer detector: Ca fait un peu la même chose que PEiD, avec d'autres options sympas http://image.noelshack.com/fichiers/2012/32/1344592866-3.png (http://image.noelshack.com/fichiers/2012/32/1344592866-3.png) https://www.dropbox.com/s/szizuh1abtzdirc/RDG%20Packer%20Detector%20v0.6.7%202011%20Vx-Edition.rar Site officiel: http://rdgsoft.net/ StudPE: Ca fait un peu la même chose que LordPE/PEiD/ResHacker, avec d'autres infos et fonctions http://image.noelshack.com/fichiers/2012/32/1344593134-4.png (http://image.noelshack.com/fichiers/2012/32/1344593134-4.png) http://www.cgsoftlabs.ro/zip/Stud_PE.zip ResHacker: Permet de voir et de modifier les ressources d'un prog (Les images, les boutons, les scripts etc) http://image.noelshack.com/fichiers/2012/32/1344595390-5.png (http://image.noelshack.com/fichiers/2012/32/1344595390-5.png) http://www.angusj.com/resourcehacker/ RegMon: Observe le registre windows pour voir les accès des programmes en cours http://image.noelshack.com/fichiers/2012/32/1344595784-6.png (http://image.noelshack.com/fichiers/2012/32/1344595784-6.png) https://www.dropbox.com/s/erqx4ir9782roi2/Regmon.exe Site officiel: https://technet.microsoft.com/en-us/sysinternals/bb896652.aspx Ressource tuner: Comme ResHacker, mais avec des fonctionnalités plus poussées. http://image.noelshack.com/fichiers/2012/32/1344597278-7.png (http://image.noelshack.com/fichiers/2012/32/1344597278-7.png) http://www.restuner.com/download.htm (Version d'évaluation de 30 jours) DeDe Delphi decompiler: Decompile les programmes en delphi (Ca décompile que l'inteface et certaines actions, mais c'est utile parfois) http://image.noelshack.com/fichiers/2012/32/1344599071-10.png (http://image.noelshack.com/fichiers/2012/32/1344599071-10.png) http://www.woodmann.com/collaborative/tools/index.php/Category:Delphi_Decompilers SmartCheck: Prog de debug des programmes en Visual Basic 6 http://image.noelshack.com/fichiers/2012/32/1344598316-8.png (http://image.noelshack.com/fichiers/2012/32/1344598316-8.png) https://www.dropbox.com/s/7ie8zjua25kzr95/SmartCheck%206.2.1286RC2.rar Note: SmartCheck n'est pas gratuit donc vous devrez l'acheter ;) VB decompiler Lite: Decompile les programmes en VB (Seulement interface et certaines actions, mais utile) http://image.noelshack.com/fichiers/2012/32/1344598839-9.png (http://image.noelshack.com/fichiers/2012/32/1344598839-9.png) https://www.vb-decompiler.org/download.htm REA Unpacking: La bible de l'unpacking. Comme vous avez vu dans mon tuto numéro 2, il existe toutes sortes de packers pour les .exe, dont UPX. Ce livre explique comment en unpacker des centaines différents. Au total, plus de 2000 pages Ca a été traduit depuis le vietnamien en anglais, c'est assez moyen comme traduction mais c'est compréhensible http://image.noelshack.com/fichiers/2012/32/1344600140-11.png (http://image.noelshack.com/fichiers/2012/32/1344600140-11.png) https://www.dropbox.com/s/nurdcir4q2vgewj/REA%20Unpacking%20eBook%20%5BTranslated%20by%20LithiumLi%5D%20UnProtected.pdf Si vous êtes courageux, vous pouvez mater leur site super intéressant: http://reaonline.net/ Voilà, je pense que vous disposez de toutes les armes nécessaires. Ne pas oublier un éditeur hexadécimal, et son cerveau, ça peut servir =) Titre: Re : Cracking: Tools Posté par: the lsd le 13 Juillet 2015 à 13:32:06 Hello Lascazas,
Pour les tools, je préférerais les liens originaux plutot que du dropbox Et il faudrait faire un effort sur la forme imho, ça fait juste copier coller de notepad là ^^ Enjoy The lsd Titre: Re : Cracking: Théorie & Tools Posté par: Lascazas le 13 Juillet 2015 à 18:17:06 Salut
J'ai fusionné les parties théorie et tools, ça permet de donner un air moins copier coller de notepad à la partie tools, vu que c'est assez difficile de rendre "vivant" une suite de liens. Comme ça toutes ces infos sont ensemble, ça me parait déjà beaucoup mieux au niveau de la forme Ah et j'ai modifié pour mettre les liens officiels quand c'était possible, mais beaucoup n'existent plus malheureusement. |