Pour en savoir un peu plus sur les systèmes FreeBSD et * nix en général, je commence à regarder les binaires du jeu DEFCON 17 Capture The Flag. En ce moment, je suis en train d'inverser le binaire tucod. Voici quelques informations éventuellement utiles sur tucod:gdb n'atteint pas de points d'arrêt
tucod: ELF 32-bit LSB executable, Intel 80386, version 1 (FreeBSD), for FreeBSD 7.2, dynamically linked (uses shared libs), FreeBSD-style, stripped
Quelques autres peut-être des informations utiles tirés de certaines brève analyse statique est que tucod lie sur le port 0xDEAD (mignon, hein?) Et si vous lui donnez un mot de passe spécifique ("HANGEMHIGH ! ") il jouera une partie de hang-man avec vous.
Le problème que je rencontre est que je ne frappe pas mes points d'arrêt dans gdb. Plus précisément, le point d'arrêt que j'essaie d'atteindre se trouve dans le code qui gère la connexion client. Sans points d'arrêt, le code s'exécute comme prévu. Lorsque je définis un point d'arrêt sur ce code, l'enfant quitte (au lieu d'entrer dans gdb, comme prévu). Si je mets des points d'arrêt avant que le serveur ne torde l'enfant, je peux les toucher mais, après avoir appuyé sur "continuer", l'enfant ne continue pas à traiter ma connexion (il ne me demandera pas de mot de passe).
Depuis les fourches du démon quand il reçoit une nouvelle connexion, j'essaie de dire GDB de suivre l'enfant avec cette commande:
(gdb) set follow-fork-mode child
Mais après un seul pas à pas les instructions après la fourche, il semble que cette ne fonctionne pas.
J'ai essayé de chercher des appels à signal
, en pensant qu'ils ont implémenté un gestionnaire SIGINT personnalisé (ou similaire), mais le seul appel à signal
que je peux voir gère SIGCHLD.
Mon point d'arrêt dans gdb ressemble actuellement à ceci:
(gdb) info breakpoints
Num Type Disp Enb Address What
1 breakpoint keep y 0x080497d0
Et 0x080497d0
est l'adresse que je veux rompre dans le code de traitement du client.
Je suis un peu nouveau dans l'analyse de logiciels sur les systèmes * nix et je pourrais utiliser des pointeurs. Sinon, comment devrais-je résoudre les problèmes pour lesquels GDB n'atteindra pas mes points d'arrêt? Ou est-ce qu'il y a quelque chose de majeur que je suis en train de négliger?
Il y a un torrent disponible avec tous les binaires de jeu pour ceux qui sont intéressés à voir le binaire de première main.
Merci! Le travail que j'ai employé pour cela consistait simplement à patcher le binaire et à faire exécuter par le parent la partie de l'enfant. Pour moi, c'est plus simple que d'essayer d'ajouter un appel pour dormir, puisque je suis sans source. Mais une explication de ce qui se passait était ce que je cherchais vraiment. Merci encore. – mrduclaw
@Nikolai lien brisé – nouveau