logo Homepage
+  NewbieContest
Username:
Password:
  Voir les messages
Pages: [1] 2 3 ... 7
1  Général / Proposition de tutoriaux / Cracking: Memory et Hardware Breakpoint le: 13 Juillet 2015 à 20:16:38
Memory et Hardware Breakpoint

Pour ça on prend un crackme que j'ai codé en VB6:
https://www.dropbox.com/s/u64y765zl7vhudv/crackme.exe

Nos 3 techniques pour retrouver la vérification:
-Pause + mater la pile
-Text strings
-Breakpoint sur fonctions

En voilà une quatrième
On ouvre le prog dans OllyDBG.
Pas de text strings ni de fonctions intéressante.
On va déjà tester le programme pour voir.
On lance avec F9

On entre un truc dedans, on appuie sur Go, ça se transforme en petit points avec le message Bad.

On va donc essayer de mettre un breakpoint en mémoire.
Mettons LOLlLOL pour tester:
http://image.noelshack.com/fichiers/2012/33/1344955132-1.png

On appuie pas sur Go, et on va dans OllyDBG.
On clique sur le bouton M bleu
Ca affiche tous la mémoire adressée au processus.

On clique droit tout en haut et on met Search:
http://image.noelshack.com/fichiers/2012/33/1344955481-2.png
On met alors LOLlLOL dans le champs ASCII
On recherche.

Il va s'arrêter quelque part sur LOLlLOL.
On fait clic droit dessus > Breakpoint > Memory, on write:
http://image.noelshack.com/fichiers/2012/33/1344955597-3.png
Cela veut dire que quand le programme va écrire à cet endroit de la mémoire, le programme va s'arrêter !

On appuie sur Go
Quand LOLlLOL est remplacé par des points, le programme s'arrête.
On va voir dans la pile.
On descend jusqu'à retrouver un retour vers crackme.exe
On fait clic droit dessus > Follow in disassembler:
http://image.noelshack.com/fichiers/2012/33/1344955667-4.png

Cela nous permet d'arriver un peu après la vérif.
On va supprimer le memory breakpoint vu qu'on a trouvé le bon endroit.
Sur le dump hexa en bas à gauche, Clic droit > Breakpoint > Remove memory breakpoint:
http://image.noelshack.com/fichiers/2012/33/1344955839-5.png

Un peu au dessus on voit un CMP et un JNZ.
On pose un breakpoint sur le CMP pour voir ce qu'il compare.
Ca a l'air d'être des nombres, donc on va mettre "12345" et appuyer sur Go
Ca s'arrête là:
http://image.noelshack.com/fichiers/2012/33/1344956000-6.png
Il compare 3039 à 7AFD.
3039 = 12345 en hexa
7AFD = 31485 en hexa

Le pass est donc 31485, il nous met Not Bad
http://image.noelshack.com/fichiers/2012/33/1344956186-7.png

Les hardware breakpoints sont similaires, sauf que:
-On a 4 hardware breakpoints
-Ils sont plus rapides (Car ils sont gérés directement par le CPU, d'où leur nom)
-Parfois il y a des protections contre certains breakpoints

Ici on à utilisé un breakpoint à l'écriture, il y a aussi des breakpoints à l'acces (Lecture) qui peuvent être utiles.
2  Général / Proposition de tutoriaux / Cracking: Breakpoint sur fonction le: 13 Juillet 2015 à 19:59:58
Les 2 techniques les plus basiques pour cracker un programme sont:
-Regarder les text strings
-Mater les appels dans la pile

Je vous en propose une troisième: Mettre des breakpoint sur des fonctions spécifiques
Le prog, un crackme que je vous ai codé (code source à la fin) :
https://www.dropbox.com/s/u64y765zl7vhudv/crackme.exe

C'est du 100% ligne de commande, il prend le mot de passe en argument dans la ligne de commande.
Donc soit vous ouvrez avec cmd.exe etc, soit vous créez un .bat à coté avec dedans:
Code:
crackme.exe password
pause

Donc, on ouvre dans ollydbg, on va lui mettre un argument avec ce menu, on met 123456789 pour tester:
http://image.noelshack.com/fichiers/2012/33/1344872852-0.png

Une fois que c'est fait, il faut relancer avec le bouton ou CTRL+F2

Pour tenter l'approche classique, on cherche les text strings et... Fail:
http://image.noelshack.com/fichiers/2012/33/1344872989-00.png

Il va falloir trouver une autre solution.
Cette solution sera de s'arrêter sur des fonctions qu'on suspecte de jouer un rôle dans la vérif du serial.

Donc on va aller cliquer sur le bouton E bleu
On voit les modules chargés, on fait clic droit sur crackme > View names

Ca nous affiche toutes les fonctions utilisées par le programme:
http://image.noelshack.com/fichiers/2012/33/1344873096-1.png

Rien de très flagrant, à part memcmp, qui pourrait servir à comparer des données en mémoire.
On fait donc clic droit dessus, set breakpoint on every reference

Le programme va s'arrêter à l'appel de memcmp, ce qui nous permettra d'analyser ce qui se passe.
Donc on lance avec F9, et on regarde la pile quand ça s'arrête:
http://image.noelshack.com/fichiers/2012/33/1344873219-2.png

Voilà les paramètres de memcmp.
s1, s2 et n.
n c'est le nombre de caractères à comparer, ici 10.
s1 et s2 ce sont les chaines comparées.

On fait clic droit sur s1 > Follow in dump:
http://image.noelshack.com/fichiers/2012/33/1344873557-3.png
Ca nous permet de voir les données brutes de s1.
"01 02 03 04 05 06 07 08 09"...Tiens, c'est le 123456789 qu'on a entré

On fait clic droit sur s2 > Follow in dump:
http://image.noelshack.com/fichiers/2012/33/1344873664-4.png
01 07 05 04 06 03 02 09 08 08
Donc en fait le pass est 1754632988
...
http://image.noelshack.com/fichiers/2012/33/1344873765-7.png
Voilà !

Le code source du programme était:
Code:
#include <stdio.h>
#include <stdlib.h>

void pc(int c)
{
    putc(c^0xCC,stdout);
}

int main(int argc,char* argv[])
{
    char password[]={1,7,5,4,6,3,2,9,8,8,0};
    unsigned char msg[]={'B'^0xCC,'a'^0xCC,'d'^0xCC,0xCC};
    unsigned char msg2[]={'G'^0xCC,'o'^0xCC,'o'^0xCC,'d'^0xCC,0xCC};
    char* buf=argv[1];
    if(argc==1) buf=main;
    int i;
    for(i=0;buf[i]!=0;i++)
        buf[i]-=0x30;
    if(memcmp(buf,password,10)==0)
        for(i=0;msg2[i]!=0xCC;i++)
            pc(msg2[i]);
    else
        for(i=0;msg[i]!=0xCC;i++)
            pc(msg[i]);
}
On peut voir que j'ai appliqué un XOR au texte pour qu'on puisse pas le trouver
3  Général / Proposition de tutoriaux / Re : Cracking level 4 : Nag winrar le: 13 Juillet 2015 à 19:11:43
Salut
Ouais en effet comme j'ai expliqué sur l'autre topic ces premiers tutos sont expliqués assez rapidement.
Les tutos suivant sont beaucoup mieux expliqués t'inquiète pas

Concernant le 2ème soucis, ouais, c'est un problème, la moitié de mes tutos utilisent des softs commerciaux.
J'vais tenter d'envoyer un mail à ceux qui font le tetris, on sait jamais
Et si le tutos concerne une modification par reverse engineering et pas le cracking du programme, c'est toléré ?

Les tutos suivants utilisent des progs fait maison donc ce sera mieux
4  Général / Proposition de tutoriaux / Re : Re : Cracking level 1 le: 13 Juillet 2015 à 18:41:33
Salut,
Je viens de lire ce premier message que tu as posté.
Ma première question va être : L'exécutable que tu proposes de télécharger, il sort d'où ? Est-ce toi qui l'a codé ?
Ensuite, je trouve que l'initiative est bonne, cependant je trouve que tu essaies d'aller très très vite droit au but, sans expliquer grand chose. Quand je parle "d'expliquer", je ne parle pas des raccourcis d'olly, mais plutôt expliquer la logique de résolution d'un crackme. Par exemple, pourquoi chercher les referenced string (Et d'ailleurs, c'est quoi exactement une referenced string ?)

En tout cas merci pour ces contributions, je vais lire les autres propositions de tutos 

Salut
L'executable posté, ouais, c'est moi qui l'ai codé.
C'est juste un petit programme en C d'une dizaine de lignes qui du texte avec scanf, le compare au serial avec strcmp et printf pour le résultat.
En effet j'vais rapidement au but, parce que c'est un tuto relativement basique, et pour moi c'est un peu difficile de me remettre dans la peau d'un newbie et donc je passe rapidement les choses qui paraissent évidentes, j'ai fait d'autres tutos plus compliqués et là j'explique un peu mieux le truc, mais j'me sentais obligé de commencer par des trucs simples quitte à passer ça sans trop de détails.
Après tous les tutos supposent que la personne a préalablement lu et bien compris la partie Théorie & Tools, donc certaines choses ne sont plus expliquées ici.
Mais au final le tuto explique la démarche à suivre et il convient à chacun d'essayer de comprendre par soi même ce qu'il est en train de faire et en quoi ça peut aider à la résolution du problème
5  Général / Proposition de tutoriaux / Re : Cracking: Théorie & Tools 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.
6  Général / Proposition de tutoriaux / Cracking level 4 : Nag winrar le: 12 Juillet 2015 à 21:04:19
Pour ce level 4, on va cracker WinRAR v4.01:
https://www.dropbox.com/s/kl9e65oxfv5c9u2/wrar401fr.exe

Enfin, je suppose que vous avez déjà WinRAR, si la version est pas trop ancienne ou trop nouvelle par rapport à celle là, ça doit être pareil.

Y'a deux problèmes dans WinRAR:
http://image.noelshack.com/fichiers/2012/31/1343842129-0.png

Le (Version d'évaluation) dans le titre, et la méchante fenêtre (ça s'appelle un NAG) qui s'ouvre à chaque fois qu'on le lance.

Commençons par le titre, c'est simple.
Ou ouvre winrar.lng qui se trouve dans le dossier où est installé WinRAR, avec Notepad++.
A la ligne 313 il y a:
b6b8cc7d="Version d'évaluation"
On va juste écrire
b6b8cc7d="Cracked By Echo"
ou ce que vous voulez d'autres, c'pour le fun

Ensuite, on passe aux choses sérieuses.
On ouvre WinRAR dans OllyDBG, comme toujours.
On lance avec F9

Quand la fenêtre apparait, on lance avec F9.
Une fois que la fenêtre Nag apparait on va voir dans la pile d'OllyDBG
On clic dessus et on appuie sur * pour nous mettre à la position actuelle.
On descend juste un peu, et on voit REMINDER
(Et parfois direct le RETURN to WinRAR, là y'a juste 498F27)
http://image.noelshack.com/fichiers/2012/31/1343843554-1.png

Remind en anglais, ça veut dire "Rappeler", donc c'est sûrement ce qu'on cherche.

On fait clic droit sur le code Search for > All referenced text strings
On cherche "REMINDER".
Il est là deux fois. C'est celui près de "rarkey" qui nous intéresse.
On arrive là:
http://image.noelshack.com/fichiers/2012/31/1343844191-2.png

On voit que le truc DialogBoxParamW est le truc qui fout le nag.
On voit aussi le JE qui contourne le DialogBoxParamW.
On le remplace donc par un JMP pour que ça contourne tout le temps (JMP = saut incontionnel, ça saute toujours)
Ca donne ça:
http://image.noelshack.com/fichiers/2012/31/1343844429-3.png

On enregistre avec clic droit > Copy to executable > all modifications.
On l'enregistre direct dans WinRAR.exe

On relance et ... pas de fenêtre + Cracked !
http://image.noelshack.com/fichiers/2012/31/1343844600-4.png
7  Général / Proposition de tutoriaux / Cracking: Théorie & Tools 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
8  Général / Proposition de tutoriaux / [Suppr] Cracking: Théorie le: 12 Juillet 2015 à 20:46:44
A supprimer, topic fusionné avec le topic des tools: https://www.newbiecontest.org/forums/index.php?topic=4347.0
9  Général / Proposition de tutoriaux / Cracking level 3 : Cracker un prog + keygen le: 12 Juillet 2015 à 20:40:04
Suite du Level 2 avec toujours le même programme tetris, qui est donc déjà unpacké.

Donc, on l'ouvre dans OllyDBG, on lance avec F9.
Pour le nom de Registration, on met par exemple Echo, et pass=loIilol
On met "Register now" et le message d'erreur apparait:
http://image.noelshack.com/fichiers/2012/31/1343831399-0.png

On ne le ferme pas, et on va mettre pause dans OllyDBG (un bouton en haut à gauche)

La on va aller voir dans la pile (en bas à droite) les appels qui ont été fait.
On descend pas mal, jusqu'à retrouver Echo et loIilol
http://image.noelshack.com/fichiers/2012/31/1343831569-1.png
Là on voit deux choses:
0012F400  |00AAE8A4  ASCII "loIilol"
0012F404  |00AB12A8  ASCII "Echo"
0012F408  |00AB12BC  ASCII "4563686F"


"4563686F" ça a bien la gueule d'un serial ça, mais vous verrez qu'il manque un truc, va falloir chercher plus loin !

Et aussi:
0012F3C4  |004872B0  RETURN to Tetris2.004872B0 from <JMP.&User32.MessageBoxA>

Ca doit revenir à l'adresse 004872B0 après l'appel à la MessageBox qui nous dis que le serial est invalide.
Donc on fait clic droit dessus > Follow in disassembler
On arrive donc à côté du invalid registration, on remonte un peu dans le code, et on voit..."Registration Success!"
http://image.noelshack.com/fichiers/2012/31/1343831923-2.png
Juste au dessus on voit un JE, qui mène au Invalid registration
C'est donc là qu'est la vérification du programme.

Pour voir un peu ce qui se passe, on pose un breakpoint sur le CALL en 4870B5 juste avant le JE, ça doit être la fonction de vérification.
Une fois le breakpoint posé, on relance le programme avec F9, et on remet Echo et loIilol, on essaye de Register.
Ca s'arrête là:
http://image.noelshack.com/fichiers/2012/31/1343832712-3.png

Les paramètres de la fonction sont placés dans EAX et EDX
EAX = CTW303337-4563686F
EDX = loIilol

Donc de toute évidence, le sérial pour Echo est CTW303337-4563686F
Notez que le truc est simple, 4563686F c'est juste "Echo" en hexadecimal.

Pour le patcher pour qu'il mette OK pour n'importe quel serial, il suffit de remplacer le JE par JNZ ou NOP, et d'enregistrer avec Clic droit > copy to executable

Petit bonus, on va transformer le programme en Keygen, c'est déjà un peu plus compliqué
Il ne faut pas avoir modifié le JE, donc prenez une version vierge ou n'y touchez pas.
On regarde là où y'avait notre breakpoint.
Le serial correct est mis dans EAX avec
004870B2    8B45 EC         MOV EAX,DWORD PTR SS:[EBP-14]
Donc le serial est à l'adresse SS:[EBP-14]
(SS veut dire Stack Segment)
On regarde juste avant le message Invalid:
http://image.noelshack.com/fichiers/2012/31/1343833600-4.png

En fait le serial est supprimé de la mémoire direct après pour qu'on puisse pas le retrouver !
Donc tout à fait à l'arrache, on va mettre NOP à la place des 4 CALLs qui suppriment le serial
Et à la place de :
0048729D    68 24754800     PUSH Tetris2.00487524
Qui met "Please make sure the registration...", on double clique dessus et on met:
PUSH DWORD PTR SS:[EBP-14]
Ce qui devrait donner ça:
http://image.noelshack.com/fichiers/2012/31/1343835237-5.png
On laisse comme ça et on enregistre avec Copy to executable, Tetris3.exe

Maintenant, en entrant un nom et en mettant n'importe quoi comme serial, au lieu de nous dire "Please make sure..." quand le serial n'est pas bon, il fait le keygen et nous donne le bon serial:
http://image.noelshack.com/fichiers/2012/31/1343835275-6.png

Bon, je pense qu'on a assez maltraité Tetris pour cette fois
10  Général / Proposition de tutoriaux / Cracking level 2 : Unpacking UPX le: 12 Juillet 2015 à 20:31:36
Pour ce deuxième tuto, on s'attaque à un petit shareware, un jeu tetris:
https://www.dropbox.com/s/j1gpuu76rakbknb/classical-block_1_6988.exe

On installe et tout.
Quand on lance le prog, on tombe sur ça:
http://image.noelshack.com/fichiers/2012/31/1343823419-0.png

Donc là on ouvre dans OllyDBG, il nous met un message
"Bla bla bla compressed or encrypted"

Pour voir avec quoi c'est compresser, on va utiliser PEiD
https://www.dropbox.com/s/np35alddhsbv7rp/PEiD-0.95-20081103.rar

On ouvre donc Tetris.exe avec PEiD, et il montre ça:
http://image.noelshack.com/fichiers/2012/31/1343823794-1.png
C'est compressé avec UPX, un packer très connu et simple.
PEiD possède un Generic Unpacker intégré, mais pour le fun on va faire avec OllyDBG.

On aura besoin du plugin OllyDump pour OllyDBG:
https://www.dropbox.com/s/63s65qo4vsrbipu/OllyDump.dll
Il faut le placer dans le dossier d'OllyDBG, sauf si vous avez précisé un autre dossier pour les plugins.

Donc, on relance avec OllyDBG.
Ca commence sur un PUSHAD.
Ca sauvegarde les registre sur la pile, avant de decompresser le programme.
On va donc descendre plus bas et trouver le POPAD, qui lui, reprend les registres dans la pile quand il a fini de decompresser.
Le voilà un peu plus bas:
http://image.noelshack.com/fichiers/2012/31/1343824377-2.png
On voit le JMP en bas.
C'est lui qui, une fois que le programme est décompressé, mène à l'OEP (Original Entry Point, bref, le début du programme)

On met un breakpoint dessus avec F2.
On lance avec F9.
Quand il bloque, on appuie une fois sur F8 pour sauter, et on arrive à l'OEP:
http://image.noelshack.com/fichiers/2012/31/1343824569-3.png
Donc à ce stade, le programme est décompressé en mémoire.
On va dans le menu Plugins > OllyDump > Dump Debugged Process
http://image.noelshack.com/fichiers/2012/31/1343824926-4.png
On vérifie que Rebuild Imports etc est bien coché avec Method 2, la 1 marche pas dans ce cas ci, on clique sur Dump et on enregistre, Tetris2.exe

On a donc Tetris2.exe, qui est unpacké et fonctionnel.
Ensuite, il faut le cracker... Ce sera dans un autre tuto
11  Général / Proposition de tutoriaux / Cracking level 1 le: 12 Juillet 2015 à 20:22:47
Premier tuto de cracking basique

Il faut d'abord télécharger OllyDBG: http://www.ollydbg.de/odbg110.zip
Et le fichier cible: https://www.dropbox.com/s/cvo6rcci4uv4j2d/crack1.exe

Ensuite, on ouvre crack1.exe avec OllyDBG.
Y'a plein d'infos dans la fenêtre que j'expliquerai quand il faut.
En haut à gauche: le code
En haut à droite: les régistres
En bas à gauche: les données hexa
En bas à droite: la pile

Appuyez sur CTRL+A sur le code pour affiner l'analyse du programme.
Vous devriez avoir ça:
http://image.noelshack.com/fichiers/2012/31/1343815664-0.png
Si vous avez pas la coloration, allez dans Options > Appearance > Defaults
Et mettez Default Syntax Highlighting: Christmas tree, et relancez le programme si nécessaire.

Bref, faut trouver où se trouve la vérification.
Faites clic droit sur le code, Search for > All referenced text strings

Vous aurez alors tous les chaines de caractères du programme.
http://image.noelshack.com/fichiers/2012/31/1343815686-1.png
On repère "Bon pass", on clique dessus.

On arrive à ça: http://image.noelshack.com/fichiers/2012/31/1343815759-2.png
On voit clairement le fonctionnement du programme.
Les CALL sont comme leur nom l'indique des appels de fonctions.

printf affiche "Entrez le pass"
scanf lit le pass entré
Ensuite la fonction strcmp va comparer le pass entré avec le bon pass.
Ensuite, il y a TEST et JNZ
JNZ c'est Jump if Not Zero.
Donc ça saute dans le code si le résultat est différent de 0.
(Strcmp renvoie 0 quand les deux chaines sont identiques)
Donc quand ça saute, c'est que c'est le mauvais pass, et ça va afficher "Mauvais pass"

Maintenant, comment le cracker ?
2 possibilités
1) Patcher le programme pour qu'il affiche "Bon pass"
2) Trouver le mot de passe

__________________________________

1) Il faut jouer sur l'instruction JNZ.
On peut double cliquer sur JNZ <adresse>, et on écrit alors JE <adresse> à la place.
C'est l'inverse de JNZ, c'est Jump if Equal Zero.
On peut aussi mettre NOP à la place.
Ca veut dire "No OPeration". En gros, ça fait rien, et ça ira sur "Bon pass"
NOP c'est mieux, car avec JE, ça marchera avec tous les pass sauf le bon.
http://image.noelshack.com/fichiers/2012/31/1343815800-3.png
Voilà, le programme est cracké !
Pour l'enregistrer: Clic droit, Copy to executable > All modifications
Save file. Voilà

2) Pour trouver le pass, on met ce qu'on appelle un breakpoint sur le strcmp.
On clic dessus et on appuie sur F2, la ligne va devenir rouge.
http://image.noelshack.com/fichiers/2012/31/1343815840-4.png
Pour expliquer les commandes vites fait, F2 pose un breakpoint, F9 lance le programme.
F8 execute une instruction. F7 pareil, sauf qu'il rentre dans les CALL.
Donc on lance avec F9, ça va tourner et vous entrez un pass dans la console.
On arrive alors là:
http://image.noelshack.com/fichiers/2012/31/1343815862-5.png
On voit dans la pile qu'il compare ce qu'on a entré loIilol avec 0&1;))_

Donc le pass est 0&1;))_
12  Challenges / Aide Programmation / Re : Prog - Site Ne Marche Plus ! le: 17 Juillet 2014 à 14:03:41
Bonjour !

Petit conseil aux autres, pour éviter de faire le truc et ensuite se dire "Ok, le truc me renvoie true, et après ?", quand vous arrêtez le méchant processus, assurez-vous que la commande que vous utilisez renvoie autre chose que simplement "true" si c'est OK ou "false" si c'est pas OK, je savais pas quoi faire pendant une demie heure à cause de ça ...
Comme quoi, PHP est pas toujours mon ami.
Sinon très sympathique comme épreuve !
13  Challenges / Aide Crackme / Re : Crackme - I Love Binary le: 02 Août 2012 à 14:39:31
Non
Ce que tu crois être bon ne l'est probablement pas, comme je l'avais cru. (Relis mon message d'avant)
Bonne chance
14  Challenges / Aide Crackme / Re : Crackme - I Love Binary le: 01 Août 2012 à 19:38:01
Peut-être que t'as raté un détail très important comme moi  
15  Divers / Cracking / Re : Problème de sécurité dans mon programme le: 30 Juillet 2012 à 12:05:53
http://www.codeproject.com/Articles/30815/An-Anti-Reverse-Engineering-Guide

Enfin, j'espère que tu songes pas sérieusement à protéger un tel programme, je suppose que c'était juste pour l'exemple.
Pages: [1] 2 3 ... 7