[C] le truc du dimanche qui sert à rien
|
23-12-2012, 20h33
(Modification du message : 23-12-2012, 20h35 par gruik.)
Message : #1
|
|
gruik
![]() gouteur de savon ![]() Messages : 757 Sujets : 44 Points: 482 Inscription : Oct 2012 |
[C] le truc du dimanche qui sert à rien
un petit code qui ne sert absolument à rien en soit, à part être un peu didactique, sur la façon de simuler un try/except et capter un signal levé avec les fonctions sigsetjmp()/siglongjmp(), sur l'utilisation de la lib officielle de désassemblage sous linux et parfaitement sous-documentée : libopcodes, et sur une instruction assembleur aussi peu connue que peu utile : ud2
miroir du code ici pour plus de kawaïness Code C :
le fonctionnement global est le suivant, on déclare notre structure sa et on lui indique que la fonction de callback pour gerer les interruptions de type SIGILL est pouet(), la fonction sigaction remonte le tout au kernel on tombe ensuite sur un if qui dépend du retour de sigsetjmp(), cette fonction sert en gros à faire une image de l'état du programme au moment où on invoque la fonction (ça sauvegarde le contexte de pile, l'env et les signaux concrètement) la fonction retourne 0 si elle est invoquée directement et un nombre non nul si elle revient à travers un siglongjmp(), donc première fois qu'on tombe dessus, on rentre dans le if là on cherche simplement à exécuter une instruction assembleur inline ud2, cette instruction ne sert qu'à une chose : feindre un opcode invalide, ce qui aura pour effet de lever une exception notez le trick kawaï du extern char *addr en début de programme et du "addr: ud2" qui nous permet de référencer proprement l'adresse de notre instruction dans le binaire une exception est donc levée et comme prévu c'est donc pouet() qui la récupère, on vérifie juste qu'elle correspond bien à celle que l'on attendait (signal SIGILL, type ILL_ILLOPN, à l'adresse addr), et le cas échéant on la désassemble et on affiche un kiki rigolo (ou pas mais on s'en fout) alors vous me direz ça à l'air bien pénible d'utiliser la libopcodes et je vous répondrais qu'effectivement elle est aussi complète (elle permet de désassembler un grand nombre d'architectures) que peu documentée et pénible à utiliser, néanmoins elle a l'avantage d'être présente chez à peu près tout le monde (livrée via binutils, gdb et objdump reposent dessus typiquement) et l'exemple fourni ici pourra donc facilement être compilé et testé ![]() Code BASH :
enfin, siglongjmp() nous ramène sur notre if (sigsetjmp()) qui cette fois-ci, revenant à travers siglongjmp(), ne sera pas pris et ainsi le programme finira de mourir paisiblement sans les haut-le-coeur qu'eut pu lui occasionner une instruction spécialement vouée à l'empoisonner tel le vitriol dans la gamelle du chien... je m'égare surement. en espérant que ça en ait intéressé certains parmi vous ![]() |
|
23-12-2012, 22h46
Message : #2
|
|
Kiwazaru
![]() Padawan d'un super escargot ![]() Messages : 284 Sujets : 26 Points: 139 Inscription : Mar 2012 |
RE: [C] le truc du dimanche qui sert à rien
Useless.
*Ok je sors.*
Toucher au Kernel, c'est un peut comme se shooter au LSD, on pense pouvoir tout faire mais ça finit souvent mal.
|
|
23-12-2012, 23h15
Message : #3
|
|
Dobry
![]() Tueur de lamouz ![]() Messages : 206 Sujets : 25 Points: 73 Inscription : Aug 2011 |
RE: [C] le truc du dimanche qui sert à rien
Je suis pas d'accord, c'est très interessant, et je dois dire que je ne connaissais pas l'existence de plus de la moitié des instructions que tu utilises, je dois dire que je n'ai pas eu le courage de lire la doc sur chaque précisement mais je vais regarder plus en détails dès que j'aurais quelques minutes de libres.
Aestuārium Erudītiōnis
There are only two hard things in Computer Science: cache invalidation, naming things, and off-by-one errors.
|
|
23-12-2012, 23h21
Message : #4
|
|
sakiir
![]() [sakiir@Ubuntu]:~$ ./ExploitMe ShellC0de ![]() Messages : 411 Sujets : 51 Points: 34 Inscription : Sep 2012 |
RE: [C] le truc du dimanche qui sert à rien
J'aimerais comprendre ... :')
|
|
24-12-2012, 01h26
Message : #5
|
|
ark
![]() Psyckomodo! ![]() ![]() ![]() ![]() ![]() Messages : 1,033 Sujets : 48 Points: 317 Inscription : Sep 2011 |
RE: [C] le truc du dimanche qui sert à rien
Sympa comme article :)
C'est vrai que le contexte est vraiment inutile, mais ça permet de voir pas mal de trucs, merci ! |
|
24-12-2012, 01h30
Message : #6
|
|
notfound
![]() #!/usr/bin/env bash ![]() Messages : 687 Sujets : 47 Points: 271 Inscription : Sep 2012 |
RE: [C] le truc du dimanche qui sert à rien
Comme on dit : Inutile donc indispensable.
Ça permet d'apprendre des choses ![]() |
|
24-12-2012, 02h45
Message : #7
|
|
sakiir
![]() [sakiir@Ubuntu]:~$ ./ExploitMe ShellC0de ![]() Messages : 411 Sujets : 51 Points: 34 Inscription : Sep 2012 |
RE: [C] le truc du dimanche qui sert à rien
Comme tes canard ??? :p
|
|
24-12-2012, 02h55
Message : #8
|
|
notfound
![]() #!/usr/bin/env bash ![]() Messages : 687 Sujets : 47 Points: 271 Inscription : Sep 2012 |
RE: [C] le truc du dimanche qui sert à rien
On touche pas à mon beau canard !
|
|
24-12-2012, 11h11
Message : #9
|
|
sakiir
![]() [sakiir@Ubuntu]:~$ ./ExploitMe ShellC0de ![]() Messages : 411 Sujets : 51 Points: 34 Inscription : Sep 2012 |
RE: [C] le truc du dimanche qui sert à rien
:') ahah
|
|
« Sujet précédent | Sujet suivant »
|
Utilisateur(s) parcourant ce sujet : 1 visiteur(s)