Tu as la main sur les applis mere et fille, ou c'est de l'espionnage pur et dur?
A ma connaissance, il n'y a pas d'API (publiquement disponible en tout cas
) permettant d'obtenir un handle de stdin/out/err d'un processus quelconque autre que celui en cours d'execution. Par contre je peux tout a fait aller voir ce que font
GetStdHandle sous le voile
./2 T'en as meme pas besoin en pratique, tu peux specifier les
HANDLE des entrees et sorties std/err dans
StartupInfo:
Faut juste un peu de gymnastique en plus pour empecher l'enfant de tuer les
HANDLE du parent (donc on les duplique avec
DuplicateHandle)
EDIT: Ah ben c'est ce qu'il font dans l'exemple que t'as link, c'est juste un poil plus detaille
Si c'est un pipe meme anonyme il est parfaitement possible de savoir qui l'a cree et qui s'en sert, donc ca doit etre traceable...
---
Pour voir un peu les appels d'API je peux te conseiller API Monitor (
http://www.rohitab.com/apimonitor), c'est tres bien foutu (et gratuit!). Avec un peu de chance ca te donnera des pistes, mais la la question est un chouilla vague pour le moment
----------
[EDIT] Bon ca devient interessant, le PEB est lisible en dehors du processus
(
NtQueryInformationProcess)
HANDLE __stdcall kernelbase_GetStdHandle(int handle)
{
HANDLE v1; // esi
if ( handle == STD_OUTPUT_HANDLE )
{
if ( !(NtCurrentPeb()->ProcessParameters->WindowFlags & 0x400) )
{
v1 = NtCurrentPeb()->ProcessParameters->StandardOutput;
goto LABEL_9;
}
return 0;
}
if ( handle == STD_ERROR_HANDLE )
{
v1 = NtCurrentPeb()->ProcessParameters->StandardError;
goto LABEL_9;
}
if ( handle != STD_INPUT_HANDLE )
{
v1 = (HANDLE)INVALID_HANDLE_VALUE;
goto LABEL_13;
}
if ( NtCurrentPeb()->ProcessParameters->WindowFlags & 0x200 )
return 0;
v1 = NtCurrentPeb()->ProcessParameters->StandardInput;
LABEL_9:
if ( v1 == (HANDLE)-1 )
LABEL_13:
((void (__thiscall *)(unsigned int))unk_74954520)(0xC0000008);
return v1;
}
(
NtCurrentPeb() =
__readfsdword(0x30))
Du coup tu peux recuperer les HANDLE des consoles de n'importe quel processus, et tu dois meme pouvoir les modifier (
). Enfin d'abord essaie de savoir si ta cible utilise des pipes, ou juste les consoles.
tin ca me donne des idees ca