logo Homepage
+  NewbieContest
|-+  Général» Proposition de tutoriaux» Cracking: Théorie & Tools
Username:
Password:
Pages: [1]
  Imprimer  
Auteur Fil de discussion: Cracking: Théorie & Tools  (Lu 4936 fois)
Lascazas

Profil challenge

Classement : 141/54272

Membre Junior
**
Hors ligne Hors ligne
Messages: 94

//


Voir le profil
« 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 
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

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
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 pile
En bas à droite dans OllyDBG:
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
(Fonction)
POP EDX
-Passer des paramètres aux fonctions

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
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 :
Code:
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_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

Les fonctions connues aussi:
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

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://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

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://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://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
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://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://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
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://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://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
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
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
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
« Dernière édition: 13 Juillet 2015 à 18:14:31 par Lascazas » Journalisée
the lsd
Administrateur

Profil challenge

Classement : 190/54272

Membre Héroïque
*****
Hors ligne Hors ligne
Messages: 3096

poulping for fun & profit


Voir le profil WWW
« #1 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
Journalisée

Newbie Contest Staff :
The lsd - Th3_l5D (IRC)
Statut :
Administrateur
Citation :
Cartésien désabusé : je pense, donc je suis, mais je m'en fous !
Lascazas

Profil challenge

Classement : 141/54272

Membre Junior
**
Hors ligne Hors ligne
Messages: 94

//


Voir le profil
« #2 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.
« Dernière édition: 13 Juillet 2015 à 19:08:12 par Lascazas » Journalisée
Pages: [1]
  Imprimer  
 
Aller à: