[C] Patcher son premier crackme linux (for loob && level -- )
|
03-05-2013, 18h09
(Modification du message : 04-05-2013, 13h31 par InstinctHack.)
Message : #1
|
|
InstinctHack
Posting Freak Messages : 1,366 Sujets : 184 Points: 299 Inscription : Dec 2011 |
[C] Patcher son premier crackme linux (for loob && level -- )
Salut,
(Ce thread s'est transformé de demande d'aide en nano mini tuto) Je vous propose de programmer un très simple crackme. Voilà la source : Code C :
compilez le ainsi : Code : gcc crackme.c il nous faudras deux softs : objdump et hexedit, installez-les si nécessaire. Comme le fichier en sortie (il se nomme généralement a.out) est en binaire, il n'est pas possible de l'ouvrir avec un éditeur de texte. Et comme c'est un éxécutable, on peux le déssambler pour afficher le code assembleur avec objdump. Ce que l'on fait ainsi : Code : objdump -d a.out vous devriez obtenir une sortie similaire à celle-ci : Code : a.out: file format elf64-x86-64 Bon là , il faut connaitre un peu les bases en assembleur pour y comprendre quelque chose... mais si vous faites attention, vous verrez quelques lignes intéressantes : Code : ... et bien pour : la première vous reconnaitrez surement votre affichage de message, la deuxième étant la récupération du code envoyé par l'utilisateur, la troisième c'est l'opération de comparaison la quatrième est la "fonction assembleur" qui se charge de faire "vraiment" l'opération (@gourous, insulter moi au besoin ) la cinquième est un saut qui se produise si la condition n'est pas respecté (la condition étant que les passes soient différents, si le saut se produit c'est qu'on as le bon password) et on vas venir "patcher" (cad modifier) notre crackme pour qu'il valide n'importe quel password, et pour ça on vas jouer sur la dernière instruction : le jump. il faut savoir qu'il existe (au moins ) trois sauts : (c'est ceux que je connait :p ) Code : JE adr 74 2 Saut à l'adresse indiquée si égalité Donc pour edit le binaire, on use hexedit ainsi : Code : hexedit --color a.out Mais maintenant faut savoir quoi modifier... Et bien reprenons les lignes intéressantes 3 et 5 : Code : 400749: e8 02 fe ff ff callq 400550 <strcmp@plt> Enregistrer votre crackme avec Ctrl+W et appuyez sur [S]. Lancer le Code : ./a.out J'espère que ce tuto fait par un loob en aideras d'autre à commencer dans le RE. Citation :un jour en cours de java j'ai attrapé les seins d'une fille mais elle m'a frappé en disant "c'est privé !!" |
|
04-05-2013, 09h33
(Modification du message : 04-05-2013, 09h35 par notfound.)
Message : #2
|
|
notfound
#!/usr/bin/env bash Messages : 687 Sujets : 47 Points: 271 Inscription : Sep 2012 |
RE: [C] Patcher son premier crackme linux (for loob && level -- )
Sympa ce mini tuto, but :
InstinctHack a écrit :Bon là , il faut connaitre un peu les bases en assembleur pour y comprendre quelque chose... Même sans trop comprendre l'assembleur, et c'est comme ça que j'ai réussi mes premiers crackme (les plus faciles aussi ...) mais on peut voir : Code : <puts@plt> // Affichage à l'écran (printf?) Recherche Google si on est pas sûr : Code : JE adr 74 2 Saut à l'adresse indiquée si égalité Maintenant qu'on est sûr, on sait que la partie qui nous intéresse est celle qui va comparer les 2 strings (strcmp), on a donc (l'adresse en ROUGE) : 400749: e8 02 fe ff ff callq 400550 <strcmp@plt> Ceci étant dit, c'est évidement mieux de connaître l'assembleur pour ce genre d'exercice, j'en conviens ! |
|
04-05-2013, 13h28
Message : #3
|
|
Kiwazaru
Padawan d'un super escargot Messages : 284 Sujets : 26 Points: 139 Inscription : Mar 2012 |
RE: [C] Patcher son premier crackme linux (for loob && level -- )
"-le je (celui de base) qui se produit quand la condition est FALSE ( \x74 )
-le jne qui se produit quand la condition est TRUE ( \x75 ) -le jmp qui se produit toujours ( \xEB )" Dire que c'est celui de base est maladroit j'pense , sinon pareil, ce n'est pas tout le temps FALSE ou TRUE, le post de NotFound l'explique bien: " JE adr 74 2 Saut à l'adresse indiquée si égalité JG adr 7F 2 Saut à l'adresse indiquée si supérieur JLE adr 7E 2 Saut à l'adresse indiquée si inférieur JNE adr 75 2 Saut à l'adresse indiquée si non-égalité" et il y en a encore , du genre JNZ (Jump if not zero) , JZ (Jump if Zero), JA, JB (+ || -) etc... Et si je dis pas de connerie, les JMP sont des jump inconditionnel & les J?? sont des jumps conditionnels, et les jumps conditionnels utilisent des indicateurs (FLAG) genre CF, ZF, SF et OF, et c'est pour ça qu'avec un logiciel de disass type OllyDBG on peu modifier en live les indicateurs afin de patcher les jumps.
Toucher au Kernel, c'est un peut comme se shooter au LSD, on pense pouvoir tout faire mais ça finit souvent mal.
|
|
04-05-2013, 14h58
Message : #4
|
|
gruik
gouteur de savon Messages : 757 Sujets : 44 Points: 482 Inscription : Oct 2012 |
RE: [C] Patcher son premier crackme linux (for loob && level -- )
|
|
04-05-2013, 19h25
Message : #5
|
|
Kiwazaru
Padawan d'un super escargot Messages : 284 Sujets : 26 Points: 139 Inscription : Mar 2012 |
RE: [C] Patcher son premier crackme linux (for loob && level -- )
gruik: Thx, je travaille pas sous linux pour gdb mais c'est toujours bon à savoir
Toucher au Kernel, c'est un peut comme se shooter au LSD, on pense pouvoir tout faire mais ça finit souvent mal.
|
|
05-05-2013, 09h50
Message : #6
|
|
supersnail
Éleveur d'ornithorynques Messages : 1,609 Sujets : 71 Points: 465 Inscription : Jan 2012 |
RE: [C] Patcher son premier crackme linux (for loob && level -- )
Sinon pour les réfractaires à gdb, y'a edb sous linux qu'est un ollydbg-like (pas mal instable par contre, même si j'ai pas testé la version sur googlecode).
Mon blog
Code : push esp ; dec eax ; inc ebp ; and [edi+0x41],al ; dec ebp ; inc ebp "VIM est merveilleux" © supersnail |
|
05-05-2013, 16h47
Message : #7
|
|
fr0g
NTEuNDI2MzcsLTEuNzc4NDg4 Messages : 348 Sujets : 22 Points: 56 Inscription : Aug 2011 |
RE: [C] Patcher son premier crackme linux (for loob && level -- )
(05-05-2013, 09h50)supersnail a écrit : Sinon pour les réfractaires à gdb, y'a edb sous linux qu'est un ollydbg-like (pas mal instable par contre, même si j'ai pas testé la version sur googlecode). Je confirme, perso je reste à GDB & IDA sous Linux , le principe de edb est pas mal, mais bon à part une interface graphique il y a rien d'exceptionnel, et la stabilité laisse effectivement à désirer . |
|
Sujets apparemment similaires… | |||||
Sujet | Auteur | Réponses | Affichages | Dernier message | |
[Ebook-PDF]Programmation Avancée C linux | thxer | 3 | 253 |
29-05-2013, 07h37 Dernier message: thxer |
|
[ring0 linux]espionnez ce que fait un utilisateur sur votre pc [Ã ne pas faire] | Creepy_p0ney | 5 | 391 |
07-04-2013, 20h24 Dernier message: Kiwazaru |
|
[C] The advanced linux programming | Junky | 2 | 257 |
26-03-2013, 18h29 Dernier message: sakiir |
|
[NASM] Création d'un thread sous Linux uniquement avec les syscalls | supersnail | 2 | 232 |
04-03-2013, 23h36 Dernier message: Dobry |
|
[C-Question] Memory Editing Sous linux ? | sakiir | 4 | 244 |
24-02-2013, 00h58 Dernier message: sakiir |
|
[C++] Spammeur linux | Dobry | 0 | 133 |
24-02-2012, 19h48 Dernier message: Dobry |
Utilisateur(s) parcourant ce sujet : 1 visiteur(s)