Salve a tutti!

Oggi, volevo guidarvi nel setup dev dell’esempio UAC ByPass.

Se uno vuole solo esplorare le possibilità che questo dimostra, basta che vada nel folder Setup\SetupUAC\Release ed esegua Setup.exe.

Il programma di setup è un normalissimo programma di installazione di Visual Studio, con una custom action finale, che è un vbscript che serve ad avviare il servizio una volta che questo è stato installato.

Fatto quello, riceverete un messaggio relativo al fatto che il servizio è stato avviato e vi troverete l’icona di UAC ByPass sul desktop.

Doppio click sull’icona e siete arrivati.. Buona esplorazione.

 

Setup Dev.

La parte più interessante, in quanto sviluppatori è poter debuggare l’esempio, sia il servizio che l’applicazione User Mode. Vediamo quindi ora passo passo come installare le due parti dell’applicazione e configurarle per poter eseguire il debug di entrambe.

Ci concentreremo sulla configurazione di Debug.

Per sicurezza e per rigenerare i file dei simboli, prima di tutti questi passi, è meglio aprire il progetto e ricompilarlo in versione Debug.

Il setup del servizio va fatto in questo modo:

-aprite un Command Prompt “as Administrator”

-andate nella cartella del .Net Framework della bitness della vostra macchina, ad esempio “C:\Windows\Microsoft.NET\Framework64\v2.0.50727”

-qui useremo InstallUtil passandogli come parametro il percorso del servizio in versione debug.

RegService

 

Il sevrizio ora è installato, ma va avviato manualmente. Potete aprire la console dei Servizi, ed avviarlo premendo il pulsante Start una volta selezionato il Servizio UAC Bypass Command Server,

startsvcd 

Oppure dal command prompt ancora aperto, digitare “net start cmdsrv”.

Riceverete a questo punto due messaggi dal servizio: Il servizio sta partendo..

startingsvs

e il gestori eventi WTS è stato avviato.

StartEVT

A questo punto, non ci resta che avviare VS 2008 “as Administrator”, perchè dobbiamo “attaccare” (attach) il debugger ad un processo, che sta in un altra sessione e gira come Local System, quindi solo un Administrator ha i necessari privilegi per fare quell’operazione.

Avviate VS “as Administrator” quindi, aprite il progetto "C:\MultiSessionClientServer\Service\CmdSrv\CmdSrv.sln" e aprite il file pipeserver.vb.

Il servizio è già avviato, per cui saremo fermi sulla pipe del thread principale, in attesa che un client si connetta. Diciamo che questa parte non ci interessa, e che vogliamo vedere l’esecuzione dei vari comandi. Mettiamo quindi un breakpoint prima del “Select Case” nella sub SpecificClientThread.

breakpoint

Dal menu Debug, selezioniamo “Attach To Process”.

attach

E nella dialog seguente, ricordiamoci di selezionare “Show Processes from all Users” e “Show Processes in all Sessions” e premiamo Refresh se non vediamo il nostro sevrizio.

attachtoprocess

A questo punto, il servizio è sotto debug e il breakpoint impostato.

Non ci resta che aprire un altra istanza di VS 2008, questa volta normalmente, e caricare il progetto del client, da "C:\MultiSessionClientServer\UsrMode\ClientApp\ClientApp.sln".

Qui possiamo aprire la form principale e mettere un breakpoint sul codice del pulsante “Execute” se ci interessa debuggare anche il client, o possiamo semplicemente mandare i comandi al servizio e debuggare quello.

La routine principale, è la Sub PipeHandler. Questo è il thread che gestisce la comunicazione sulla pipe aperta col servizio, e da qui passiamo quando mandiamo i comandi al servizio. La form altro non è che un collettore di opzioni.

 

Conclusioni.

Ci saranno sicuramente dei bug in giro qui e là e il codice l’ho scritto facendo parecchi copia e incolla, quindi non vogliatemente se non è scritto secondo standard qualitativi elevati, ma sembra più che altro un minestrone.. è fatto apposta così potete sbizzarrirvi a correggerlo!Open-mouthed

Ciò che mi premeva mostrarvi era l’utilizzo delle API WTS insieme a SetTokenInformation e CreateProcessAsUser, per aiutarvi a diventare compliant con le nuove regole di sviluppo per Windows 7, specialmente a riguardo della UAC.

In ogni caso, buon debug …

 

Alla prossima!

Mario Raccagni
Senior Support Engineer
Platform Development Support Team