Un poil plus haut dans cette page.Envoyé par hegros
Debian Sarge x86.
Un poil plus haut dans cette page.Envoyé par hegros
Debian Sarge x86.
Oui...mais le code a été modifié depuisEnvoyé par Skyrunner
et avec un typedef cela peut passer effectivement.
Je vais essayer sous VC+
Oui mais je ne sais pas si cela a vraiment une incidence.Envoyé par Emmanuel Delahaye
Je vais essayer tout de même
> Y'a du boulot...
C et C++ sont 2 langages différents. <iostream>, c'est pas du C.
Ha ca j'ai jamais di le contraire. J'ai jamais vraiment eu l'occasion de me mettre au C. J'ai des connaissances dans d'autres domaines mais je prétend pas en avoir en C. Du moins très très vaguement.
> C'est stupide comme code tu essaie de faire pointer un traitement informatique vers des données !
C'est digne de la taverne !
Un conseil : achetes un bon livre sur l'assembleur x86 tu pigeras sans doute mieux.
Bon doucement stp. Non j'essaye pas juste de faire pointer un traitement informatique vers des données, j'essaye de les faire pointer vers des instructions machines. Et si tu veux savoir, ce morceau de code provient déjà d'un livre. Et ici mon problème vient pas de la compréhension de l'interprétation côté machine, mais plutôt du bidouillage en C. Pour ca que j'ai posté dans un forum traitant du C...
Sinon merci pour toutes vos réponses, j'en attendais pas autant.
Aussi le (void (*)(void))&shellcode permet d'éviter les erreurs à la compilation mais en vérifiant bien j'obtiens &opcode != &shellcode. En clair, rien ne bouge.
Enfin bon, jvoulais juste faire mes ptites bidouilles en C parceque c'est toujours plus sympa à faire qu'en ASM. Ce qui m'agace c'est que j'ai simplement repris le code d'un bouquin, et de plus, lorsque j'ai fais mes ptites recherches sur les pointeurs de fonctions, le code était semblable. Alors pourquoi tout déconne ? aucune idée.
Aussi je reprécise que ce bout de code n'est pas fait pour être beau/efficace. Je simule manuellement le déroulement d'un buffer overflow pour étudier le sujet.
Normal, c'est opcode tout court qui doit être égal à &shellcode...mais en vérifiant bien j'obtiens &opcode != &shellcode
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.
"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone. -- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
> Normal, c'est opcode tout court qui doit être égal à &shellcode...
Heuu opcode il va bien retourner le résultat de la fonction ? C'est pas le retour qui doit être égale à &shellcode ici, mais plutot l'adresse vers laquelle opcode pointe, no?
Enfin bref, opcode = (void (*)(void))(&shellcode); ne fait rien et tout ca continue à m'agacer. Jdirais bien, "pff jvais rester au développement web moi", mais ca serait trop facil. Tantôt le code fonctionne sur dev-cpp, tantot c'est sur visual c++, j'ai beau reprendre les codes des bouquins ou de site ayant l'air sérieu, ca ne fonctionne pas, et la total, maintenant j'ai cette erreur "'cout' : identificateur non déclaré" sur visual c++. Si je peux même plus faire un cout...
Je sais que je vais en exaspérer certains avec mon inexpériencemais je vous rassure je m'en doute déjà. M'enfin faut avouer qu'à chaque approche, jressort un peu dégouté du C et de ses règles qui s'appliquent un peu quand elles veulent.
Breff zut, y a bien moyen de faire pointer une fonction vers une adresse mémoire bien précise ? Je l'auraiset c'est comme ca que j'apprendrais .... :/
Normalement, après la ligne opcode = (void (*)(void))(&shellcode);, le pointeur de fonction opcode contient l'adresse de ton tableau d'octets qu'il prend pour du code exécutable.
Il te suffit ensuite de l'exécuter:
Code : Sélectionner tout - Visualiser dans une fenêtre à part opcode();
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.
"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone. -- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
Le code que j'ai donné fonctionne, après c'est à toi de changer le shellcode et de mettre ce que tu veux dedans.
rapport au code d'origine, j'aurais effectué une légère correction du type :
(char *)opcode = &shellcode[0];
Avec tous les risques que cela comporte, c'est à dire que "shellcode" ne soit pas bien aligné en mémoire !
![]()
Partager