Hacker une commande
Le
Zobinette
Bonjour,
Je suis en plein débogage sur OS X et j'ai besoin de connaitre les paramètres
passés à un programme : /usr/sbin/ncutil
J'ai d'abord pensé à faire un petit script shell nommé /usr/sbin/ncutil qui
log les paramètres et appelle le vrai prog juste après (renommé
/usr/sbin/ncutil.bin).
###
echo "$1" >> /tmp/ncutil.log
/usr/sbin/ncutil.bin $1
###
Malheureusement, ça ne marche pas, ncutil étant appelé par du code objective
C en mode privilégié (j'ai une erreur "Invalid argument").
J'ai donc eu l'idée de remplacer mon script shell par un petit prog en C qui
ferait la meme chose, c'est à dire qui me loguerait argv et qui ferait un
system call du vrai ncutil avec les bons paramètres. Sauf que là je sèche un
peu (le C n'est pas trop mon domaine).
Si quelqu'un pourrait m'aider, ça serait super. Notez que OS X accepte très
bien du posix de base et que je compile avec gcc.
Je suis en plein débogage sur OS X et j'ai besoin de connaitre les paramètres
passés à un programme : /usr/sbin/ncutil
J'ai d'abord pensé à faire un petit script shell nommé /usr/sbin/ncutil qui
log les paramètres et appelle le vrai prog juste après (renommé
/usr/sbin/ncutil.bin).
###
echo "$1" >> /tmp/ncutil.log
/usr/sbin/ncutil.bin $1
###
Malheureusement, ça ne marche pas, ncutil étant appelé par du code objective
C en mode privilégié (j'ai une erreur "Invalid argument").
J'ai donc eu l'idée de remplacer mon script shell par un petit prog en C qui
ferait la meme chose, c'est à dire qui me loguerait argv et qui ferait un
system call du vrai ncutil avec les bons paramètres. Sauf que là je sèche un
peu (le C n'est pas trop mon domaine).
Si quelqu'un pourrait m'aider, ça serait super. Notez que OS X accepte très
bien du posix de base et que je compile avec gcc.

Poser une question


#include
int main(int argc, char **argv)
{
int i;
FILE * pFile;
pFile = fopen ("/tmp/ncutil.log","a");
for (i = 0; i < argc; i++)
{
fprintf (pFile, "%s ", argv[i]);
}
fprintf (pFile, "n");
fclose (pFile);
char paf[21] = "/usr/sbin/ncutil.bin";
paf[20] = ' ';
argv[0] = paf;
return execv(paf, argv);
}
Vu tes talents de scripteur, c'est pas tres etonnant....
#! /bin/sh
echo "$@" >>/tmp/ncutil.log
exec /usr/sbin/ncutil.bin "$@"
a deja plus de chance de fonctionner.
Si tu es sur MacOSX, ca a des chances d'etre faisable a coups de dtrace
egalement, sans avoir a rien developper...
Il est sur iOS, car l'OP dit être sur OS X qui est l'ancien nom de iOS.
Mais comme beaucoup confondent OS X et Mac OS X, il y a aussi une
possibilité qu'il soit sur Mac OS X.
Ce genre de script ne marche heureusement pas sur unix car les scripts
ne gèrent pas les bits de modification de privilège, contrairement aux
binaires purs.
--
Éric Lévénez -- Unix is not only an OS, it's a way of life.
Euh, non, ca ca depend des Unix. Et essentiellement, ca peut marcher
si le systeme et le "shell" savent lire du script sans passer par son
nom. Globalement, s'il y a support pour /dev/fd/*
Mac OS X supporte /dev/fd/*, comme tous les GNU/Linux je pense, mais je
ne vois pas en quoi ce support bouche le trou de sécurité des shells
avec bits s.
--
Éric Lévénez -- Unix is not only an OS, it's a way of life.