2Fermer4
WarptenLe 20/11/2018 à 22:32
Tu as la main sur les applis mere et fille, ou c'est de l'espionnage pur et dur? grin
A ma connaissance, il n'y a pas d'API (publiquement disponible en tout cas grin) 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 cheeky

./2 T'en as meme pas besoin en pratique, tu peux specifier les HANDLE des entrees et sorties std/err dans StartupInfo:

_STARTUPINFOAdocs.microsoft.com


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 detaillegrin

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 grin


----------

[EDIT] Bon ca devient interessant, le PEB est lisible en dehors du processus grin (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 (grin). Enfin d'abord essaie de savoir si ta cible utilise des pipes, ou juste les consoles.

tin ca me donne des idees ca grin