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

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 principauxEAX : 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,EDIEIP, 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.pngLes conventions d'appel de fonctionsLes fonctions sont appelée avec
CALL adresseJe 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
PUSH param2
PUSH param1
CALL fonction
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 pileEn bas à droite dans OllyDBG:
http://image.noelshack.com/fichiers/2012/31/1343993151-1.pngC'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:
PUSH EDX
(Fonction)
POP EDX
-Passer des paramètres aux fonctions
Les instructions principalesCommenç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
CMPIl 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:
MOV EAX,1 : Met 1 dans EAX
MOV BYTE PTR DS:[400040], BB : Met la valeur 0xBB à l'adresse 400040
(BYTE=un octet, WORD= 2 octets, DWORD= 4 octets)
Après, on peut combiner avec les adresse etc.
LEA met une adresse dans un registre
Exemple :
LEA EAX DWORD PTR DS:[ECX+2]
(Ca met ECX+2 dans EAX)
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_listingsCe tableau résume bien la plupart des instruction utiles:
https://www.dropbox.com/s/f9w12vr2m39ytvw/IntelCodeTable.pdfVoilà pour l'assembleur.
Plus d'infos sur OllyDBGOllyDBG 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.pngLes fonctions connues aussi:
http://image.noelshack.com/fichiers/2012/31/1344012549-3.pngJe vais expliquer les boutons-menus:
http://image.noelshack.com/fichiers/2012/31/1344012684-4.pngL: 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éralLe 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 programmeCa 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.zipC'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/OllyDumpCe 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.pnghttp://www.openrce.org/downloads/details/241/Olly_AdvancedPEiD: 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.rarhttp://image.noelshack.com/fichiers/2012/31/1343823794-1.pngImpREC: 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.pnghttp://www.woodmann.com/collaborative/tools/index.php/ImpRECLordPE: 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.pnghttp://www.woodmann.com/collaborative/tools/index.php/LordPERDG 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.pnghttps://www.dropbox.com/s/szizuh1abtzdirc/RDG%20Packer%20Detector%20v0.6.7%202011%20Vx-Edition.rarSite 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.pnghttp://www.cgsoftlabs.ro/zip/Stud_PE.zipResHacker: 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.pnghttp://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.pnghttps://www.dropbox.com/s/erqx4ir9782roi2/Regmon.exeSite officiel:
https://technet.microsoft.com/en-us/sysinternals/bb896652.aspxRessource tuner: Comme ResHacker, mais avec des fonctionnalités plus poussées.
http://image.noelshack.com/fichiers/2012/32/1344597278-7.pnghttp://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.pnghttp://www.woodmann.com/collaborative/tools/index.php/Category:Delphi_DecompilersSmartCheck: Prog de debug des programmes en Visual Basic 6
http://image.noelshack.com/fichiers/2012/32/1344598316-8.pnghttps://www.dropbox.com/s/7ie8zjua25kzr95/SmartCheck%206.2.1286RC2.rarNote: 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.pnghttps://www.vb-decompiler.org/download.htmREA 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.pnghttps://www.dropbox.com/s/nurdcir4q2vgewj/REA%20Unpacking%20eBook%20%5BTranslated%20by%20LithiumLi%5D%20UnProtected.pdfSi 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
