RtlRemoteCall

février 14th, 2007 at 01:11 admin

Alex Ionescu nous fait découvrir sur son blog un jolie petite API, RtlRemoteCall, je cite :
« Basically, it hijacks any thread of your choice into any process that you have access to, and sends the thread to a new “CallSite” by updating its EIP there. It also allocates a new ESP, and pushes up to 4 parameters at most »
Mr Totoscu nous promet le code dans pas longtemps, par curiositée je lance mon IDA et jette un coup d’oeil rapide sur RtlRemoteCall.
Le prototype de la fonction est le suivant :

NTSTATUS
NTAPI
RtlRemoteCall(
IN HANDLE Process,
IN HANDLE Thread,
IN PVOID CallSite,
IN ULONG ArgumentCount,
IN PULONG Arguments,
IN BOOLEAN PassContext,
IN BOOLEAN AlreadySuspended
);

Le fonctionnement est assez intuitif :

1. Appel sur NtSuspendThread pour stoper le thread passé en param.
2. NtGetContextThread récupère une structure CONTEXT sur le thread, celle ci contient l’état de tout les registres du thread mit en pause.
3. Si PassContext est vrai, alors on copie (avec NtWriteVirtualMemory) dans la stack du thread distant son CONTEXT pour pouvoir l’utiliser en tant qu’argument.
4. Copie les arguments dans la pile à partir de ESP.
5. Redéfinit l’ESP et l’EIP de la structure CONTEXT puis met a jour le context avec NtSetContextThread.
6. Relance le thread avec NtResumeThread qui va continuer sur le nouvel EIP et sa nouvelle stack.

Par contre si après avoir lancé notre nouvelle fonction celle ci ne se débrouille pas pour reprendre l’exécution du thread ou il avait été stoppé, le programme plante. Avec le paramètre PassContext mit à vrai, on peu récup le CONTEXT du thread et demander à notre fonction de relancer l’exécution, sweet :}

Autrement aller voir sur mon blog le post « Thread Hijacking » vous trouverez la même chose faite à partir d’API documentées. Si j’avais su l’existence ce cette fonction je ne me serais pas fait chier à la recoder mais bon c’est la magie « windows » :]

Le post d’Alex : http://www.alex-ionescu.com/?p=28

Entry Filed under: Non classé


Calendar

mars 2024
L Ma Me J V S D
« fév    
 123
45678910
11121314151617
18192021222324
25262728293031

Most Recent Posts