Rieccoci qua con una nuova storiella (per la gioia di Digger
)
Dunque, giorni fa postai un tool per estrarre il product key di windows, e forte del successo che ha ottenuto quel tool oggi ve ne presento un altro...
Ma andiamo per gradi...
Rispondendo alla domanda di uno di voi che mi chiedeva dove fosse memorizzato il PKey gli risposi che stava qui -> HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\Windows NT\\CurrentVersion, ed è la chiave: "DigitalProductID".
Ma dando un'occhiata a quell'indirizzo, vedrete qualcosa del genere:
Si si lo so che state pensando: "OMG e che sono tutti quei numeri??"
Non preoccupatevi, a sinistra trovate i nomi, che sono abbastanza intuitivi
Come vedere il 90% delle informazioni su un SO sono la, cavolo ecco come fanno programmi come CCleaner e Speccy a sapere tutto sul vostro pc....disgraziati invasoriiiii
Ebbene adesso vedremo come estrarre uno di quei valori, in particolare quelli di tipo stringa (REG_SZ), nel mio tutorial estrarremo la BuildGUID ma basterà cambiare 2 paroline nel source per estrarre un qualunque altro valore di quelli, fermo restando che siano REG_SZ
Dunque cominciamo dal source:
C++ Programming
#include <Windows.h>
#include <iostream>
using namespace std;
int main()
{
HKEY hRegistryKey; //Ci servirà per accedere al registro
BYTE *Extracted = 0; //Dove salvare il valore estratto
DWORD DataLength; //Lunghezza chiave da estrarre
char buffer[164]; //Variabile finale che conterrà il valore, utilizzabile in tutto il programma
const char NT_CURRENT[] = "SOFTWARE\\MICROSOFT\\Windows NT\\CurrentVersion";
if( RegOpenKeyEx(HKEY_LOCAL_MACHINE, NT_CURRENT,
REG_OPTION_NON_VOLATILE, KEY_QUERY_VALUE | 0x0100,
&hRegistryKey) == ERROR_SUCCESS )
{
DataLength = 164;
//Allochiamo memoria
Extracted = new byte[DataLength];
//Inizializziamo la memoria
memset(Extracted, 0, DataLength);
//Estraiamo il valore della chiave
RegQueryValueEx(hRegistryKey, "BuildGUID",NULL, NULL, Extracted, &DataLength);
//lo copiamo in un buffer
memcpy(buffer,Extracted,164);
}
cout <<"BuildGUID: " << buffer << endl;
system("pause");
return 0;
}
Allora, gli "include" credo che lo sappiate a che servano, a includere nel progetto i file contenenti le API (particolari funzioni) utilizzate nel progetto;
Nella prima parte dichiariamo e inizializziamo tutte le variabili che ci serviranno e poi andiamo alla parte interessante:
C++ Programming
RegOpenKeyEx(HKEY_LOCAL_MACHINE, NT_CURRENT,
REG_OPTION_NON_VOLATILE, KEY_QUERY_VALUE | 0x0100,
&hRegistryKey)
Apriamo il registro posizionandoci su HKEY_LOCAL_MACHINE e alla subkey NT_CURRENT che abbiamo definito come:
C++ Programming
const char NT_CURRENT[] = "SOFTWARE\\MICROSOFT\\Windows NT\\CurrentVersion";
Cavolo quello è proprio il percorso della nostra chiave, deduciamo quindi che quando vogliamo estrarre un qualsiasi valore da una qualsiasi posizione dobbiamo ricordarci di settare il percorso nella subey e nella chiave primaria (il primo parametro) se dobbiamo andare a cercare in "HKEY_CLASS_ROOT, HKEY_CURRENT_USER",HKEY_LOCAL_MACHINE" ecc...
Proseguiamo...
Se l'apertura del registro e della subkey è andata a buon fine:
C++ Programming
DataLength = 164;
//Allochiamo memoria
Extracted = new byte[DataLength];
//Inizializziamo la memoria
memset(Extracted, 0, DataLength);
//Estraiamo il valore della chiave
RegQueryValueEx(hRegistryKey, "BuildGUID",NULL, NULL, Extracted, &DataLength);
//lo copiamo in un buffer
memcpy(buffer,Extracted,164);
Beh non c'è molto da dire, è abbastanza commentato
E il programma finisce con:
C++ Programming
cout <<"BuildGUID: " << buffer << endl;
system("pause");
return 0;
La prima riga stampa il valore del buffer contenente il valore della chiave estratta...
La seconda è una funzione carina di "windows.h" che scrive "Premi un tasto per continuare...", alla pressione di un qualunque tasto prosegue trovando return...
Bene così abbiamo estratto la BuildGUID..
Ma non ho detto ancora cos'è!!
Ebbene è un valore univoco che cambia da pc a pc...
oooooo myyyyyy goddddddd
come un numero di matricola?!?!? Esattooooo
100 punti a chi di voi lo ha pensatoo
Vi siete chiesti a cosa potrebbe servire??
Beh vi siete chiesti come fanno quelli che rilasciano gli hack vip a pagamento a farli funzionare su uno e un solo pc??
Con la guid, braviiiiii
Vi ricordate quando vi ho detto che bastava cambiare un paio di paroline per estrarre un altro valore anzichè la guid?
Smemorati, ve lo eravate già dimenticati -.-
Comunque, ammettiamo che non vogliamo la guid ma quel ProductID...
E mo come famoo?? Oddio mi sento in crisii, non ci riuscirò maiiii
E no belli, qua casca l'asino
Basta modificare:
C++ Programming
RegQueryValueEx(hRegistryKey, "BuildGUID",NULL, NULL, Extracted, &DataLength);
In:
C++ Programming
RegQueryValueEx(hRegistryKey, "ProductID",NULL, NULL, Extracted, &DataLength);
ed è fatta, poi se vogliamo fare le cose per bene cambiamo pure:
C++ Programming
cout <<"BuildGUID: " << buffer << endl;
in:
C++ Programming
cout <<"ProductID: " << buffer << endl;
cosi vi apparirà sullo schermo:
Codice:
ProductID: [il vostro product id]
Premi un tasto per continuare...
Beh che dire, direi che come storiella è abbastanza soddisfacente, almeno per voi, ma non per me...sapete che faccio???
No no, non chiudo senza postare... ci avete provato eh?
Invece vi posto tutto il source, in vc++ 2010, ma vi basta fare un nuovo progetto console vuoto ed aggiungere il file main.cpp del mio progetto
Download:
[Per vedere i link devi REGISTRARTI.]
Dopo una storiella del genere (cavolo è da un ora che scrivo
) ci vogliono dei commenti altrettanto validi
Vi aspetto numerosi
Alla prossima,
Zio Skyline