WMi Delphi Code Creator da w8 hdd serino var XP YOK

C, C++ ve C++ Builder ile ilgili konuları buraya yazabilirsiniz.
theSinan

WMi Delphi Code Creator da w8 hdd serino var XP YOK

Mesaj gönderen theSinan »

WMI hakkında Biraz Bilgi Sahibi Olmaya Çalışıyorum
sütten ağzı yanan yoğurtu üfleyerek misali
Windows işletim Sistemlerinde Hdd yada CPU serino gibi bilgileri alıp Lisanlama da kullanmak istiyorum
Windows işletim sistemlerinde ortak olarak alabileceğim donanım seri nolarına bakıyorum

WMI ile Hdd seri nosunu Wİndows8 aldım gayet güzel
ancak aynı kodu XP çalıştırdım
serinosu boş geliyor



WMi Delphi Code Creator da oluşturulan kodu aşağıda
nasıl bir yol izlemem gerekiyor

Kod: Tümünü seç


#pragma hdrstop
#include <iostream>
using namespace std;
#include <wbemcli.h>
#include <comdef.h>
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
	: TForm(Owner)
{
}


#define CRED_MAX_USERNAME_LENGTH            513
#define CRED_MAX_CREDENTIAL_BLOB_SIZE       512
#define CREDUI_MAX_USERNAME_LENGTH CRED_MAX_USERNAME_LENGTH
#define CREDUI_MAX_PASSWORD_LENGTH (CRED_MAX_CREDENTIAL_BLOB_SIZE / 2)



#pragma argsused


String Harddisk_SeriNoAl()
{
	wchar_t pszName[CREDUI_MAX_USERNAME_LENGTH+1] = L"user";
	wchar_t pszPwd[CREDUI_MAX_PASSWORD_LENGTH+1]  = L"password";
	BSTR strNetworkResource;
	//To use a WMI remote connection set localconn to false and configure the values of the pszName, pszPwd and the name of the remote machine in strNetworkResource
	bool localconn = true;
	strNetworkResource = localconn ?  L"\\\\.\\root\\CIMV2" : L"\\\\remote--machine\\root\\CIMV2";

	COAUTHIDENTITY *userAcct =  NULL ;
	COAUTHIDENTITY authIdent;

	// Initialize COM. ------------------------------------------

	HRESULT hres;
	hres =  CoInitializeEx(0, COINIT_MULTITHREADED);
	if (FAILED(hres))
	{
		ShowMessage( "Failed to initialize COM library. Error code = 0x");//+ hex + hres );
		//cout << _com_error(hres).ErrorMessage() << endl;
		//cout << "press enter to exit" << endl;
		//cin.get();
		//return 1;                  // Program has failed.
	}

	// Set general COM security levels --------------------------

	if (localconn)
		hres =  CoInitializeSecurity(
			NULL,
			-1,                          // COM authentication
			NULL,                        // Authentication services
			NULL,                        // Reserved
			RPC_C_AUTHN_LEVEL_DEFAULT,   // Default authentication
			RPC_C_IMP_LEVEL_IMPERSONATE, // Default Impersonation
			NULL,                        // Authentication info
			EOAC_NONE,                   // Additional capabilities
			NULL                         // Reserved
			);
	else
		hres =  CoInitializeSecurity(
			NULL,
			-1,                          // COM authentication
			NULL,                        // Authentication services
			NULL,                        // Reserved
			RPC_C_AUTHN_LEVEL_DEFAULT,   // Default authentication
			RPC_C_IMP_LEVEL_IDENTIFY,    // Default Impersonation
			NULL,                        // Authentication info
			EOAC_NONE,                   // Additional capabilities
			NULL                         // Reserved
			);

	if (FAILED(hres))
	{
		cout << "Failed to initialize security. Error code = 0x" << hex << hres << endl;
		//cout << _com_error(hres).ErrorMessage() << endl;
		CoUninitialize();
		//cout << "press enter to exit" << endl;
		//cin.get();
		//return 1;                    // Program has failed.
	}



	IWbemLocator *pLoc = NULL;
	hres = CoCreateInstance(CLSID_WbemLocator, 0, CLSCTX_INPROC_SERVER, IID_IWbemLocator, (LPVOID *) &pLoc);

	if (FAILED(hres))
	{
		cout << "Failed to create IWbemLocator object."	<< " Err code = 0x" << hex << hres << endl;
	   // cout << _com_error(hres).ErrorMessage() << endl;
		//CoUninitialize();
		//cout << "press enter to exit" << endl;
		//cin.get();
		//return 1;                 // Program has failed.
	}

	// Connect to WMI through the IWbemLocator::ConnectServer method

	IWbemServices *pSvc = NULL;

	if (localconn)
		hres = pLoc->ConnectServer(
			 strNetworkResource,      // Object path of WMI namespace
			 NULL,                    // User name. NULL = current user
			 NULL,                    // User password. NULL = current
			 0,                       // Locale. NULL indicates current
			 NULL,                    // Security flags.
			 0,                       // Authority (e.g. Kerberos)
			 0,                       // Context object
			 &pSvc                    // pointer to IWbemServices proxy
			 );
	else
		hres = pLoc->ConnectServer(
			strNetworkResource,  // Object path of WMI namespace
			pszName,             // User name
			pszPwd,              // User password
			NULL,                // Locale
			NULL,                // Security flags
			NULL,				 // Authority
			NULL,                // Context object
			&pSvc                // IWbemServices proxy
			);

	if (FAILED(hres))
	{
		cout << "Could not connect. Error code = 0x" << hex << hres << endl;
		//cout << _com_error(hres).ErrorMessage() << endl;
		//pLoc->Release();
		//CoUninitialize();
	   // cout << "press enter to exit" << endl;
		//cin.get();
		//return 1;                // Program has failed.
	}

	//ShowMessage( "Connected to root\\CIMV2 WMI namespace" );

    // Set security levels on the proxy -------------------------
	if (localconn)
		hres = CoSetProxyBlanket(
		   pSvc,                        // Indicates the proxy to set
		   RPC_C_AUTHN_WINNT,           // RPC_C_AUTHN_xxx
		   RPC_C_AUTHZ_NONE,            // RPC_C_AUTHZ_xxx
		   NULL,                        // Server principal name
		   RPC_C_AUTHN_LEVEL_CALL,      // RPC_C_AUTHN_LEVEL_xxx
		   RPC_C_IMP_LEVEL_IMPERSONATE, // RPC_C_IMP_LEVEL_xxx
		   NULL,                        // client identity
		   EOAC_NONE                    // proxy capabilities
		);
	else
	{
		// Create COAUTHIDENTITY that can be used for setting security on proxy
		memset(&authIdent, 0, sizeof(COAUTHIDENTITY));
		authIdent.PasswordLength = wcslen (pszPwd);
		authIdent.Password = (USHORT*)pszPwd;
		authIdent.User = (USHORT*)pszName;
		authIdent.UserLength = wcslen(pszName);
		authIdent.Domain = 0;
		authIdent.DomainLength = 0;
		authIdent.Flags = SEC_WINNT_AUTH_IDENTITY_UNICODE;
		userAcct = &authIdent;

		hres = CoSetProxyBlanket(
		   pSvc,                           // Indicates the proxy to set
		   RPC_C_AUTHN_DEFAULT,            // RPC_C_AUTHN_xxx
		   RPC_C_AUTHZ_DEFAULT,            // RPC_C_AUTHZ_xxx
		   COLE_DEFAULT_PRINCIPAL,         // Server principal name
		   RPC_C_AUTHN_LEVEL_PKT_PRIVACY,  // RPC_C_AUTHN_LEVEL_xxx
		   RPC_C_IMP_LEVEL_IMPERSONATE,    // RPC_C_IMP_LEVEL_xxx
		   userAcct,                       // client identity
		   EOAC_NONE                       // proxy capabilities
		);
	}

	if (FAILED(hres))
	{
	   // cout << "Could not set proxy blanket. Error code = 0x" << hex << hres << endl;
		//cout << _com_error(hres).ErrorMessage() << endl;
		pSvc->Release();
		pLoc->Release();
		CoUninitialize();
		//cout << "press enter to exit" << endl;
	   //	cin.get();
		//return 1;               // Program has failed.
	}

	// Use the IWbemServices pointer to make requests of WMI ----

	IEnumWbemClassObject* pEnumerator = NULL;
	hres = pSvc->ExecQuery(	L"WQL",	L"SELECT * FROM Win32_DiskDrive",
	WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY, NULL, &pEnumerator);

	if (FAILED(hres))
	{
		cout << "ExecQuery failed" << " Error code = 0x"	<< hex << hres << endl;
		//cout << _com_error(hres).ErrorMessage() << endl;
		pSvc->Release();
		pLoc->Release();
		CoUninitialize();
		//cout << "press enter to exit" << endl;
	   //	cin.get();
		//return 1;               // Program has failed.
	}

	// Secure the enumerator proxy
	if (!localconn)
	{

		hres = CoSetProxyBlanket(
			pEnumerator,                    // Indicates the proxy to set
			RPC_C_AUTHN_DEFAULT,            // RPC_C_AUTHN_xxx
			RPC_C_AUTHZ_DEFAULT,            // RPC_C_AUTHZ_xxx
			COLE_DEFAULT_PRINCIPAL,         // Server principal name
			RPC_C_AUTHN_LEVEL_PKT_PRIVACY,  // RPC_C_AUTHN_LEVEL_xxx
			RPC_C_IMP_LEVEL_IMPERSONATE,    // RPC_C_IMP_LEVEL_xxx
			userAcct,                       // client identity
			EOAC_NONE                       // proxy capabilities
			);

		if (FAILED(hres))
		{
			cout << "Could not set proxy blanket on enumerator. Error code = 0x" << hex << hres << endl;
		   //	cout << _com_error(hres).ErrorMessage() << endl;
			pEnumerator->Release();
			pSvc->Release();
			pLoc->Release();
			CoUninitialize();
		   //	cout << "press enter to exit" << endl;
		   //	cin.get();
		   //	return 1;               // Program has failed.
		}
	}

	// Get the data from the WQL sentence
	IWbemClassObject *pclsObj = NULL;
	ULONG uReturn = 0;

	while (pEnumerator)
	{
		HRESULT hr = pEnumerator->Next(WBEM_INFINITE, 1, &pclsObj, &uReturn);

		if(0 == uReturn || FAILED(hr))
		  break;

		VARIANT vtProp;

                hr = pclsObj->Get(L"SerialNumber", 0, &vtProp, 0, 0);// String
                if (!FAILED(hr))
                {
                  if ((vtProp.vt==VT_NULL) || (vtProp.vt==VT_EMPTY))
				   //	ShowMessage( "SerialNumber : " + ((vtProp.vt==VT_NULL) ? "NULL" : "EMPTY") );
						Form1->Memo1->Text = "SerialNumber" ;
				  else
				  if ((vtProp.vt & VT_ARRAY))
					Form1->Memo1->Text = "SerialNumber : Array types not supported (yet)" ;
				  else
					Form1->Memo1->Text = vtProp.bstrVal;
                }
                VariantClear(&vtProp);


		pclsObj->Release();
		pclsObj=NULL;
	}

	// Cleanup

	pSvc->Release();
	pLoc->Release();
	pEnumerator->Release();
	if (pclsObj!=NULL)
	 pclsObj->Release();

	CoUninitialize();
	//cout << "press enter to exit" << endl;
	//cin.get();
	//return 0;   // Program successfully completed.
}
Kullanıcı avatarı
SimaWB
Üye
Mesajlar: 1316
Kayıt: 07 May 2009 10:42
Konum: İstanbul
İletişim:

Re: WMi Delphi Code Creator da w8 hdd serino var XP YOK

Mesaj gönderen SimaWB »

Win32_DiskDrive class'ının SerialNumber özelliğini kullanıyorsunuz. Fakat burada şöyle yazıyor : "Windows Server 2003 and Windows XP: This property is not available". Dolayısıyla XP kullanacaksanız başka bir özelliği denemelisiniz. Signature'u tavsiye ederim. Yine aynı sayfada "This property has been added for Windows XP" yazıyor. Ama yanlış bilmiyorsam SP3 istiyor.
There's no place like 127.0.0.1
theSinan

Re: WMi Delphi Code Creator da w8 hdd serino var XP YOK

Mesaj gönderen theSinan »

hocam allah razı olsun
signature tam istedğim gibi sonuç veriyor

kaç gündür her pc de donanım özelliklerine bağlı nasıl benzersiz id alırım diye uğraşıyordum
işlemcinin Processor id sine bakıyordum
iki pcde denediğim sonuç yazayım
1. işlemci İntel Pentium III Xeon İşlemci
processor Id = BFEBFBFF000106A7

2. işlemci intel R Core TM 2 Quard CPU Q8200 2.33 ghz
processor Id = BFEBFBFF000106A7
her iki işlemcinin
processor Id si nasıl aynı oluyor :)




signature işimi görüyor
32 bit 64 bitte sorun yaşarmıyım

ben lisanslamayı söyle yapıyorum

önce aldığım benzersiz id 1 ila 10 sayısı arasında bir sayı uzunluğunda
boşluk ile ayırıyorum
ayırdığım rakamları for döngüsü içinde ascıı karşılıklarını alıyorum
ascıı karakterleri ters çeviyorum sonra birleştirip kullanıcıya gösteriyorum
ve karşılığını girmesini istiyorum

başka nasıl bir yöntem uygulayabilirim acaba
Kullanıcı avatarı
SimaWB
Üye
Mesajlar: 1316
Kayıt: 07 May 2009 10:42
Konum: İstanbul
İletişim:

Re: WMi Delphi Code Creator da w8 hdd serino var XP YOK

Mesaj gönderen SimaWB »

WMI ile PC için benzersiz ID oluşturma burada Delphi ile yapılmış. Kodu C++'a dönüştürmek pek zor olmaz sanırım. Yada en azından hangi WMI sınıflarını kullanmış onlara bakabilirsiniz. Gönderdiğim linkte birçok hardware bileşenine bağlı ID oluşturuluyor. İsterseniz siz bunlardan istemediklerinizi çıkartabilirsiniz.
There's no place like 127.0.0.1
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4740
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: WMi Delphi Code Creator da w8 hdd serino var XP YOK

Mesaj gönderen mrmarman »

SimaWB yazdı:WMI ile PC için benzersiz ID oluşturma burada Delphi ile yapılmış. Kodu C++'a dönüştürmek pek zor olmaz sanırım. Yada en azından hangi WMI sınıflarını kullanmış onlara bakabilirsiniz. Gönderdiğim linkte birçok hardware bileşenine bağlı ID oluşturuluyor. İsterseniz siz bunlardan istemediklerinizi çıkartabilirsiniz.
- Linki verilen başlıktaki işlemin benzerini daha önce ben de bulup daha kolay kullanayım diye bir fonksiyona dönüştürmüştüm...
- Sanırım kaynaklar benzer, SET, zamanlama vs. bir çoğu aynı çıktı... :)
- Aslında mantık basit, WMI ile elde edebilidiğin ve de edemediğin herşeyi arka arkaya koyup HEX'e dönüştürüyorsun.
- Bulamadıkların "bulamadım" (N/A şeklinde gösterilenler onlar) şeklinde kalsın, o da bir değerdir. Yani başka bir cihazda bulursa bununla çelişeceğinden yine senin işini görecektir. :idea:

- Arşivimden buldum aşağıdaki gibidir.

Kullanımı :

Kod: Tümünü seç

procedure TForm1.BitBtn1Click(Sender: TObject);
var
  dt       : TDateTime;
  strSonuc : String;
begin
 try
   dt := Now;
   strSonuc := GenerateHardwareId( [Mb_SerialNumber,Mb_Manufacturer,Mb_Product,Mb_Model]
                                 , [Os_BuildNumber,Os_BuildType,Os_Manufacturer,Os_Name,Os_SerialNumber,Os_Version]
                                 , [Bs_BIOSVersion,Bs_BuildNumber,Bs_Description,Bs_Manufacturer,Bs_Name,Bs_SerialNumber,Bs_Version]
                                 , [Pr_Description,Pr_Manufacturer,Pr_Name,Pr_ProcessorId,Pr_UniqueId]
                                 );
   dt := now - dt;
   Memo1.Lines.Clear;
   Memo1.Lines.Add('----------------------------------------------------------');
   Memo1.Lines.Add(Format('İşlem Süresi : %s',[FormatDateTime('hh:mm:nn.zzz',dt)]));
   Memo1.Lines.Add('----------------------------------------------------------');
   Memo1.Lines.Add(Format('%s %s',['Buffer ', strSonuc]));
   Memo1.Lines.Add('');
   Memo1.Lines.Add(Format('%s %s',['Hex  ',GetHardwareIdHex(strSonuc) ]));
 except
    on E:Exception do
    begin
      ShowMessage( E.Classname +  ':' + E.Message );
    end;
  end;
end;
Fonksiyon :

Kod: Tümünü seç

USES ActiveX, ComObj;

type
  TMotherBoardInfo   = (Mb_SerialNumber,Mb_Manufacturer,Mb_Product,Mb_Model);
  TMotherBoardInfoSet= set of TMotherBoardInfo;
  TProcessorInfo     = (Pr_Description,Pr_Manufacturer,Pr_Name,Pr_ProcessorId,Pr_UniqueId);
  TProcessorInfoSet  = set of TProcessorInfo;
  TBIOSInfo          = (Bs_BIOSVersion,Bs_BuildNumber,Bs_Description,Bs_Manufacturer,Bs_Name,Bs_SerialNumber,Bs_Version);
  TBIOSInfoSet       = set of TBIOSInfo;
  TOSInfo            = (Os_BuildNumber,Os_BuildType,Os_Manufacturer,Os_Name,Os_SerialNumber,Os_Version);
  TOSInfoSet         = set of TOSInfo;

Function GenerateHardwareId( FMotherBoardInfo:TMotherBoardInfoSet; FOSInfo: TOSInfoSet; FBIOSInfo: TBIOSInfoSet; FProcessorInfo: TProcessorInfoSet ): AnsiString;
  function VarStrNull(const V:OleVariant):AnsiString; //avoid problems with null strings
    function VarArrayToStr(const vArray: variant): AnsiString;
      function _VarToStr(const V: variant): AnsiString;
      var
        Vt: integer;
      begin
        Vt := VarType(V);
        case Vt of
          varSmallint,
          varInteger  : Result := AnsiString(IntToStr(integer(V)));
          varSingle,
          varDouble,
          varCurrency : Result := AnsiString(FloatToStr(Double(V)));
          varDate     : Result := AnsiString(VarToStr(V));
          varOleStr   : Result := AnsiString(WideString(V));
          varBoolean  : Result := AnsiString(VarToStr(V));
          varVariant  : Result := AnsiString(VarToStr(Variant(V)));
          varByte     : Result := AnsiChar(byte(V));
          varString   : Result := AnsiString(V);
          varArray    : Result := VarArrayToStr(Variant(V));
        end;
      end;
    var
      i : integer;
    begin
      Result := '[';
      if (VarType(vArray) and VarArray)=0 then
         Result := _VarToStr(vArray)
      else
      for i := VarArrayLowBound(vArray, 1) to VarArrayHighBound(vArray, 1) do
       if i=VarArrayLowBound(vArray, 1)  then
        Result := Result+_VarToStr(vArray[i])
       else
        Result := Result+'|'+_VarToStr(vArray[i]);

      Result:=Result+']';
    end;
  begin
    Result:='';
    if not VarIsNull(V) then
    begin
      if VarIsArray(V) then
         Result:=VarArrayToStr(V)
      else
      Result:=AnsiString(VarToStr(V));
    end;
  end;
const // Açık isimler ( örneğin Bs_BIOSVersion = 'BIOSVersion' gibisinden...)
   MotherBoardInfoArr: array[TMotherBoardInfo] of AnsiString =
                        ('SerialNumber','Manufacturer','Product','Model');

   OsInfoArr         : array[TOSInfo] of AnsiString =
                        ('BuildNumber','BuildType','Manufacturer','Name','SerialNumber','Version');

   BiosInfoArr       : array[TBIOSInfo] of AnsiString =
                        ('BIOSVersion','BuildNumber','Description','Manufacturer','Name','SerialNumber','Version');

   ProcessorInfoArr  : array[TProcessorInfo] of AnsiString =
                        ('Description','Manufacturer','Name','ProcessorId','UniqueId');
var
  objSWbemLocator : OLEVariant;
  objWMIService   : OLEVariant;
  objWbemObjectSet: OLEVariant;
  oWmiObject      : OLEVariant;
  oEnum           : IEnumvariant;
  iValue          : LongWord;
  SDummy          : AnsiString;
  Mb              : TMotherBoardInfo;
  Os              : TOSInfo;
  Bs              : TBIOSInfo;
  Pr              : TProcessorInfo;
begin;
  objSWbemLocator := CreateOleObject('WbemScripting.SWbemLocator');
  objWMIService   := objSWbemLocator.ConnectServer('localhost','root\cimv2', '','');

  if FMotherBoardInfo<>[] then //MotherBoard info
  begin
    objWbemObjectSet:= objWMIService.ExecQuery('SELECT * FROM Win32_BaseBoard','WQL',0);
    oEnum           := IUnknown(objWbemObjectSet._NewEnum) as IEnumVariant;
    while oEnum.Next(1, oWmiObject, iValue) = 0 do
    begin
      for Mb := Low(TMotherBoardInfo) to High(TMotherBoardInfo) do
       if Mb in FMotherBoardInfo then
       begin
          SDummy:=VarStrNull(oWmiObject.Properties_.Item(MotherBoardInfoArr[Mb]).Value);
          Result := Result + SDummy;
       end;
       oWmiObject:=Unassigned;
    end;
  end;

  if FOSInfo<>[] then//Windows info
  begin
    objWbemObjectSet:= objWMIService.ExecQuery('SELECT * FROM Win32_OperatingSystem','WQL',0);
    oEnum           := IUnknown(objWbemObjectSet._NewEnum) as IEnumVariant;
    while oEnum.Next(1, oWmiObject, iValue) = 0 do
    begin
      for Os := Low(TOSInfo) to High(TOSInfo) do
       if Os in FOSInfo then
       begin
          SDummy:=VarStrNull(oWmiObject.Properties_.Item(OsInfoArr[Os]).Value);
          Result := Result + SDummy;
       end;
       oWmiObject:=Unassigned;
    end;
  end;

  if FBIOSInfo<>[] then//BIOS info
  begin
    objWbemObjectSet:= objWMIService.ExecQuery('SELECT * FROM Win32_BIOS','WQL',0);
    oEnum           := IUnknown(objWbemObjectSet._NewEnum) as IEnumVariant;
    while oEnum.Next(1, oWmiObject, iValue) = 0 do
    begin
      for Bs := Low(TBIOSInfo) to High(TBIOSInfo) do
       if Bs in FBIOSInfo then
       begin
          SDummy:=VarStrNull(oWmiObject.Properties_.Item(BiosInfoArr[Bs]).Value);
          Result := Result + SDummy;
       end;
       oWmiObject:=Unassigned;
    end;
  end;

  if FProcessorInfo<>[] then//CPU info
  begin
    objWbemObjectSet:= objWMIService.ExecQuery('SELECT * FROM Win32_Processor','WQL',0);
    oEnum           := IUnknown(objWbemObjectSet._NewEnum) as IEnumVariant;
    while oEnum.Next(1, oWmiObject, iValue) = 0 do
    begin
      for Pr := Low(TProcessorInfo) to High(TProcessorInfo) do
       if Pr in FProcessorInfo then
       begin
          SDummy:=VarStrNull(oWmiObject.Properties_.Item(ProcessorInfoArr[Pr]).Value);
          Result := Result + SDummy;
       end;
       oWmiObject:=Unassigned;
    end;
  end;
end;

function GetHardwareIdHex( strSonuc:AnsiString ): AnsiString;
begin
  SetLength(Result,Length(strSonuc)*2);
  BinToHex(PAnsiChar(strSonuc),PAnsiChar(Result),Length(strSonuc));
end;

Resim
Resim
Resim ....Resim
theSinan

Re: WMi Delphi Code Creator da w8 hdd serino var XP YOK

Mesaj gönderen theSinan »

hocam allah razı olsun
benim sorunum çözüldü
yanlız sormak istediğim
bişey var
ben lisans lama esnasında
müşteri gösterdiğimiz değeri ve müşterinin değere karşılık bizden aldığı parametreyi regedit kayıt ettiriyorum
sonra
Program açılışında daha müşteri gösterdiğimiz değeri ve müşterinin değere karşılık bizden aldığı parametreyi karşılaştırıyorum
eğer doğru ise
bu seferde programın çalıştığı pcnin bizde parametre aldığı pc olup olmadığını anlamak için
hdd nin signature degerini alıp o değerin yine boşluklara bölüyor ters çeviriyorum ascii karşılıklarını alıyorum çıkan degerle müşteriye daha lisanslama esnasında gösteriğimiz ve müşterini kayıt ettiği şifre ile karşılaştırıyoruz eger aynı ise lisanlı aynı değil ise program demo olarak açılıyor

sormak istediğim hex degerinde bu tarz işlem
yani geri döndürme
işlemi metnin ilk haline geri çevirilebilir mi
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4740
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: WMi Delphi Code Creator da w8 hdd serino var XP YOK

Mesaj gönderen mrmarman »

- Kanaatimce; karşılaştırma için geri dönüştürmeye gerek yok aslında. Çünkü sorulan ve sorgulanan da; her ikisi de kodlanmış değerleri karşılaştırıp, aynı olup olmadığına bakmak kafidir.

- Diğer yandan cihaz ile ilgili bilgileri bu kod içinden ayıklayıp görmek istiyorsan ters işem yapman lazım. Verdiğim örnekteki hali üzerinden konuşacak olursak...

// Hex dönüştüren aşağıdakiydi ya...

Kod: Tümünü seç

function GetHardwareIdHex( strSonuc:AnsiString ): AnsiString;
begin
  SetLength(Result,Length(strSonuc)*2);
  BinToHex(PAnsiChar(strSonuc),PAnsiChar(Result),Length(strSonuc));
end;
// Bu da aynı işlemin tersi.

Kod: Tümünü seç

function StringDonustur( strSonuc:AnsiString ): AnsiString;
begin
  SetLength(Result,Length(strSonuc) div 2);
  HexToBin(PAnsiChar(strSonuc),PAnsiChar(Result),Length(strSonuc));
end;
İşlem:

Kod: Tümünü seç

var
  dt       : TDateTime;
  strSonuc : String;
  strHexSonuc : String;
begin
 try
   dt := Now;
     strSonuc := GenerateHardwareId( [Mb_SerialNumber,Mb_Manufacturer,Mb_Product,Mb_Model]
                                   , [Os_BuildNumber,Os_BuildType,Os_Manufacturer,Os_Name,Os_SerialNumber,Os_Version]
                                   , [Bs_BIOSVersion,Bs_BuildNumber,Bs_Description,Bs_Manufacturer,Bs_Name,Bs_SerialNumber,Bs_Version]
                                   , [Pr_Description,Pr_Manufacturer,Pr_Name,Pr_ProcessorId,Pr_UniqueId]
                                   );
     strHexSonuc := GetHardwareIdHex(strSonuc);
   dt := now - dt;
   Memo1.Lines.Clear;
   Memo1.Lines.Add('----------------------------------------------------------');
   Memo1.Lines.Add(Format('İşlem Süresi : %s',[FormatDateTime('hh:mm:nn.zzz',dt)]));
   Memo1.Lines.Add('----------------------------------------------------------');
   Memo1.Lines.Add(Format('%s %s',['Buffer ', strSonuc]));
   Memo1.Lines.Add('');
   Memo1.Lines.Add(Format('%s %s',['Hex  ',GetHardwareIdHex(strSonuc) ]));
   Memo1.Lines.Add('');
   Memo1.Lines.Add('----------------------------------------------------------');
   Memo1.Lines.Add(Format('%s %s',['Str  ', StringDonustur( strHexSonuc )]) );
   Memo1.Lines.Add('----------------------------------------------------------');
 except
    on E:Exception do
    begin
      ShowMessage( E.Classname +  ':' + E.Message );
    end;
  end;
end;
Sonuç :

Kod: Tümünü seç

----------------------------------------------------------
İşlem Süresi : 00:00:00.284
----------------------------------------------------------
Buffer  N/A                             CLEVO CO.                       W25xHPx                         7601Multiprocessor FreeMicrosoft CorporationMicrosoft Windows 7 Enterprise |C:\Windows|\Device\Harddisk0\Partition200392-918-5000002-859956.1.7601[Datate - 1072009|BIOS Date: 08/10/11 19:31:17 Ver: 04.06.04|BIOS Date: 08/10/11 19:31:17 Ver: 04.06.04]BIOS Date: 08/10/11 19:31:17 Ver: 04.06.04American Megatrends Inc.BIOS Date: 08/10/11 19:31:17 Ver: 04.06.04N/A                             Datate - 1072009x64 Family 6 Model 42 Stepping 7GenuineIntelIntel(R) Core(TM) i5-2430M CPU @ 2.40GHzBFEBFBFF000206A7

Hex   4E2F412020202020202020202020202020202020202020202020202020202020434C45564F20434F2E20202020202020202020202020202020202020202020205732357848507820202020202020202020202020202020202020202020202020373630314D756C746970726F636573736F7220467265654D6963726F736F667420436F72706F726174696F6E4D6963726F736F66742057696E646F7773203720456E7465727072697365207C433A5C57696E646F77737C5C4465766963655C486172646469736B305C506172746974696F6E3230303339322D3931382D353030303030322D3835393935362E312E373630315B446174617465202D20313037323030397C42494F5320446174653A2030382F31302F31312031393A33313A3137205665723A2030342E30362E30347C42494F5320446174653A2030382F31302F31312031393A33313A3137205665723A2030342E30362E30345D42494F5320446174653A2030382F31302F31312031393A33313A3137205665723A2030342E30362E3034416D65726963616E204D6567617472656E647320496E632E42494F5320446174653A2030382F31302F31312031393A33313A3137205665723A2030342E30362E30344E2F412020202020202020202020202020202020202020202020202020202020446174617465202D20313037323030397836342046616D696C792036204D6F64656C203432205374657070696E67203747656E75696E65496E74656C496E74656C28522920436F726528544D292069352D323433304D20435055204020322E343047487A42464542464246463030303230364137

----------------------------------------------------------
Str   N/A                             CLEVO CO.                       W25xHPx                         7601Multiprocessor FreeMicrosoft CorporationMicrosoft Windows 7 Enterprise |C:\Windows|\Device\Harddisk0\Partition200392-918-5000002-859956.1.7601[Datate - 1072009|BIOS Date: 08/10/11 19:31:17 Ver: 04.06.04|BIOS Date: 08/10/11 19:31:17 Ver: 04.06.04]BIOS Date: 08/10/11 19:31:17 Ver: 04.06.04American Megatrends Inc.BIOS Date: 08/10/11 19:31:17 Ver: 04.06.04N/A                             Datate - 1072009x64 Family 6 Model 42 Stepping 7GenuineIntelIntel(R) Core(TM) i5-2430M CPU @ 2.40GHzBFEBFBFF000206A7
----------------------------------------------------------
Resim
Resim ....Resim
theSinan

Re: WMi Delphi Code Creator da w8 hdd serino var XP YOK

Mesaj gönderen theSinan »

bu pascal kodlarını c++ çevirebilseyim
sanırım iyi programcı olabilirdim ;-)
neyse ki sorunumu çözdüm Ascii çevirme işimi gördü
yardımlarınız için allah razı olsun
sorunum çözdünüz
signature ile istediğim degeri veriyor
The_Azrail
Üye
Mesajlar: 1
Kayıt: 03 Nis 2015 01:05

Re: WMi Delphi Code Creator da w8 hdd serino var XP YOK

Mesaj gönderen The_Azrail »

İmaj alınsa bile bu id benzersiz midir ? ve aynı marka model pc için yada notebook için her zaman benzersiz ID oluşturur mu ?
theSinan

Re: WMi Delphi Code Creator da w8 hdd serino var XP YOK

Mesaj gönderen theSinan »

Donanım bilgileri ni aldığın dan imaj almanın faydası olmayacaktır aynı makine olmadığı sürece idler benzersizdir
Kullanıcı avatarı
warder
Üye
Mesajlar: 255
Kayıt: 10 Mar 2004 04:59

Re: WMi Delphi Code Creator da w8 hdd serino var XP YOK

Mesaj gönderen warder »

Donanım imzası almak ilginç geldi. Bunu bende deneyeceğim. teşekkürler..
Konu dışı gibi ama..
Tüm işlemleri getirip bir if else mekanizmasına emanet etmek...
bilmiyorum riskli biraz. Bir jmp a bakar.
Gerçi çok kasmanın faydasını gören de henüz çıkmadı...
Yine de tedbirsiz olmaktan iyidir.

Not:Bu arada cpu, hdd vb. donanım id lerini alan kodların mayasını bana Shurzan arkadaşımız vermişti.
Gerçi keyfe keder vermişti. Al bulunsun demişti..
Ben onları sınıf olarak düzenledim. Şimdi kullanıyorum ancak burada paylaşamıyorum.
Shurzan mesaja paylaşır mı bilemem..
Bu konuya neden daha önce dahil olmadım.. Savunmamdır :)
... Muhtaç olduğun kudret, damarlarındaki asil kanda mevcuttur!
Mustafa Kemal Atatürk...
theSinan

Re: WMi Delphi Code Creator da w8 hdd serino var XP YOK

Mesaj gönderen theSinan »

S.a isi biraz ilerletip alinan idleri nete post edip tablolarda tutup yine aktivasyon kodunu nette tablolarda tutup kullanici aktivasyon sırasında bu bilgileri dosya olarak kaydedip dosyayıda RC4 ile sifrelenirse gayet guzel olur
lisans kontrolunde ise RC4 ile kriptolanan dosya decode edilip aktivasyon kodu buradan okunabilir
Kullanıcı avatarı
warder
Üye
Mesajlar: 255
Kayıt: 10 Mar 2004 04:59

Re: WMi Delphi Code Creator da w8 hdd serino var XP YOK

Mesaj gönderen warder »

program çalışmaya başladı..
çeşitli ön yüklemeler vs. yapılıyor.
belki biraz oyalanıyor..
an geliyor lisans kontrolu başlıyor...
lisans kontrol kodu girişi...
{
bütün emeğin emanet edildiği bölüm..
var birazda sen oyalan...
çeşitli kontrol işlemleri...
şifreli, şifresiz,
şifrele, çöz..
registry oku, yaz..
dosya oku yaz...
inernetten oku yaz..
donanım idleri, onlar, bunlar, şunlar..

if.. lisans geçerli ise kod akışını :100 den başlat...(:100 lafın gelişi) (jmp:100)
.. değilse kod akışı başka iş ve işlemler için :200 den başlasın ... (jmp:200)
}
//-----------------------------
cracker geliyor, disassambler ile akışı takip ediyor.. aşağıdaki satırı buluyor.. keşfediyor...
lisans kontrol kodu girişi...
jmp:100
// tüm oyalandığın kısım artık çalışmıyor.. akış oraya girmiyor..
//--------------------------------
program kırıldı.. konu kapandı....
... Muhtaç olduğun kudret, damarlarındaki asil kanda mevcuttur!
Mustafa Kemal Atatürk...
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4740
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: WMi Delphi Code Creator da w8 hdd serino var XP YOK

Mesaj gönderen mrmarman »

Dönüp dolaşıp aynı diyaloğa geliniyor. Konu her önüne gelen kopyalamasın mevzusudur. Kinayeye lüzum yok.

IF kurmadan da projenin lisans kontrolünü yaparsın, veritabanı kayıtlarına ID üretirken bu koddan faydalanır kayıtları öyle yaparsın. Başka makinede veritabanı saçmalar. Bu da bir kopya korumasıdır. illa ki if kurup lisanslı değil demesi şart değil ki. Ya da random zaman kurarsın 1 hafta ile 2 ay arası mesaj vermeksizin çöker. Zaman için if demene de gerek yok, bir sabiti 0 eşitle bu sabiti formülle kullan division zeroya düşür bu da korumadır. Tek bir metod kullanma 3 metodu rastgele kullan ama if kullanma. Bunu da peygamber sabrı olan bir hacker çözer. örnekler sürer. Vazgeçilmez bir proje hayata geçirirsen usb dongle bile kursan onu bile emulator ile kırarlar.

Disassembler kullandın mı bilmiyorum ama, sana kaynak kodlarımı versem sistemi trace etmen uzun zaman alır. Tümüyle kompact haldeki assembler kodlarını proje mantığına hakim olmadan trace edebilecek adam zaten senle benle uğraşmaz. Gözünüzde büyütmeyin artık.

Nefes alma, program yazma der gibi bu cevaplardan vazgeçelim artık.
Resim
Resim ....Resim
Kullanıcı avatarı
warder
Üye
Mesajlar: 255
Kayıt: 10 Mar 2004 04:59

Re: WMi Delphi Code Creator da w8 hdd serino var XP YOK

Mesaj gönderen warder »

Yukarıda (mesajının yukarısında) bahsettiklerinin hiç birisi bulunmuyor.
Sığ bir korumanın detaylarıyla ilgili mesajlara bakarak dış dünyada kullanılan yöntemlerden bahsedip mesaj paylaşımcılarını aynı sığlığa mahkum etmeniz (ki onların neler kullandığı hakkında fikriniz yok) çok mantıklı değil.
Kimsenin bir şeyi gözünde büyüttüğü yok. Mesajlardan öyle bir sonuç da çıkaramadım. O noktada da mantık bulamadım.
Birde özel hattınız varsa onu vermemişsiniz. Mesajları önce size gönderelim hangilerinden vaz geçeceğimize bakardınız.
Ne niyetle buraya geliyoruz.. nelere maruz kalıyoruz.. ne ilginç...
... Muhtaç olduğun kudret, damarlarındaki asil kanda mevcuttur!
Mustafa Kemal Atatürk...
Cevapla