Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 12
  1. #1
    W32.Lovgate
    Registriert seit
    09.06.2007
    Beiträge
    339

    Standard [C++] HardwareID Protection

    Hier ist eine HardwareID Protection die ich vor nen paar Wochen geschrieben hab, funktioniert gut, vielleicht ein bisschen Tuning für euch nötig.

    Kommentierte lines mit */ müssen/können entfernt werden, und mit // kommentiert müssen/können geändert werden.

    Code:
    /*#include <vcl.h>
    */
    
    #include <Windows.h>
    //#include <hashlibpp.h>
    
    char hwid[MAX_PATH] = ""; //this hwid will be generated
    
    BOOL HWCheck();
    BOOL HWInfos();
    
    
    int main()
    {
       if(HWCheck() != 0)
       {
          return -1; //error, dont continue
       }
    
       return 0; //all is ok
    }
    
    BOOL HWCheck()
    {
       //const std::string hwhashcheck = "13a27d9e33b4a0d0e0fdd32d7f2775f3"; //customer hwid to check with hwid (current one)
    
       if(HWInfos() != 0)
       {
          //couldnt get system-infos to generate hwinfo
          MessageBox(NULL, "Couldn't get System-infos, exiting", "ERROR:", MB_OK | MB_ICONSTOP);
          return -1;
       }
    
    /*
       //MD5 the hwid
       hashwrapper *md5 = new md5wrapper();
    
       std::string hwhashid = md5->getHashFromString(hwid);
    
       delete md5;
       */
    
    
       //MessageBox(NULL, hwhashid.c_str(), "HardwareID:", MB_OK | MB_ICONINFORMATION);
    
    
       //if(strcmp(hwhashid.c_str(),hwhashcheck.c_str()) != 0)
       {
               //hwinfo doesnt match
               MessageBox(NULL, "Your current HW profile doesn't match with the owners", "ERROR:", MB_OK | MB_ICONSTOP);
               return -1;
       }
    
    
       //hwinfo matches
       MessageBox(NULL, "Authorized to continue program", "SUCCESS:", MB_OK | MB_ICONINFORMATION);
    
    
       return 0; //all is ok
    }
    
    
    BOOL HWInfos()
    {
    
       //PRODUCT ID
       char proid[MAX_PATH];
    
       HKEY hKey;
       DWORD nSize = sizeof(proid);
    
       if(RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion", 0, KEY_READ, &hKey) != ERROR_SUCCESS)
       {
          //couldnt open regkey
          return -1;
       }
    
       if(RegQueryValueEx(hKey, "ProductId", NULL, NULL, (LPBYTE)proid,&nSize) != ERROR_SUCCESS)
       {
          //couldnt query regvalue
          return -1;
       }
    
       strcat(hwid,proid); //add productid to hwid
    
       RegCloseKey(hKey);
    
    
    
    
       //BUILD LAB
       char buildlab[MAX_PATH];
    
       HKEY hKey2;
       DWORD nSize2 = sizeof(proid);
    
       if(RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion", 0, KEY_READ, &hKey2) != ERROR_SUCCESS)
       {
          //couldnt open regkey
          return -1;
       }
    
       if(RegQueryValueEx(hKey2, "BuildLab", NULL, NULL, (LPBYTE)buildlab,&nSize2) != ERROR_SUCCESS)
       {
          //couldnt query regkey
          return -1;
       }
    
       strcat(hwid,buildlab); //add build lab to hwid
    
       RegCloseKey(hKey2);
    
    
    
    
       //CPU INFO
       int sum;
       char cpuinfo[MAX_PATH];
    
       SYSTEM_INFO temp;
       GetSystemInfo(&temp );
    
       sum = temp.dwProcessorType + temp.wProcessorLevel + temp.wProcessorRevision;
    
       itoa(sum, cpuinfo, 10); //converts the ints to strings
    
       strcat(hwid,cpuinfo); //add cpu info to hwid
    
    
    
    
       //VOLUME SN
       char rootdrive[MAX_PATH], vsnc[MAX_PATH];
       DWORD vsn;
    
    
       GetEnvironmentVariable("HOMEDRIVE",rootdrive,sizeof(rootdrive));
       strcat(rootdrive,"\\");
    
    
       if(GetVolumeInformation(rootdrive, 0, 0, &vsn, 0, 0, 0, 0) == 0)
       {
          //couldnt get volume serial number
          return -1;
       }
    
       itoa(vsn, vsnc, 10); //converts the ints to strings
    
       strcat(hwid,vsnc); //add volume serial number to hwid
    
    
    
    
       //HW PROFILE
       HINSTANCE DLL = LoadLibraryA("ADVAPI32.DLL");
    
       if(!DLL)
       {
          //coudlnt load .dll
          return -1;
       }
    
       typedef BOOL (WINAPI *GetHwProfileFn)(LPHW_PROFILE_INFOA);
    
       if (GetHwProfileFn fn = (GetHwProfileFn)::GetProcAddress(DLL, "GetCurrentHwProfileA"))
       {
    
          HW_PROFILE_INFOA profile;
    
          if ((fn)(&profile))
          {
             char dockinfo[MAX_PATH];
    
    
             itoa(profile.dwDockInfo, dockinfo, 10); //converts the ints to strings
    
             strcat(hwid,dockinfo);
             strcat(hwid,profile.szHwProfileGuid);
             strcat(hwid,profile.szHwProfileName);
    
             FreeLibrary(DLL);
    
          }
    
          else
          {
             //error
             FreeLibrary(DLL);
             return -1;
    
          }
    
       }
    
       else
       {
          //error while getting proc adress
          FreeLibrary(DLL);
          return -1;
    
       }
    
    
       return 0;
    
    }


  2. #2
    DateMake Dialer Avatar von bl0b
    Registriert seit
    25.04.2009
    Beiträge
    117

    Standard

    Sehr schönes Code Snippet
    Jetzt muss ich nur noch eine Methode erarbeiten, die auch das Cracken/Ändern des Hashes unmöglich macht.

  3. #3
    I'm in ur VM. Avatar von l0dsb
    Registriert seit
    23.07.2007
    Beiträge
    1.038

    Standard

    Um den Schutz zu umgehen, in Olly einen Breakpoint auf strcmp setzen (beim retn) und eax auf Null setzen. Um bl0b's Aussage mal anders darzustellen: Jetzt muss ich daraus nur noch eine richtige Protection machen.
    I can haz RCE?

  4. #4
    Gesperrt
    Registriert seit
    28.01.2009
    Beiträge
    757

    Standard

    Hi Leute

    sry für die dumme frage, aber was genau macht das?
    Protecion = sicherheit bzw. sichern, gesichert !

    Also was genau macht das..?

  5. #5
    Gesperrt
    Registriert seit
    14.08.2008
    Beiträge
    854

    Standard

    Ich würd sagen das das Tool dann nur auf einem Rechner läuft

  6. #6
    CIH-Virus
    Registriert seit
    18.09.2006
    Beiträge
    428

    Standard

    Zitat Zitat von HaCk & CrAcK Beitrag anzeigen
    Hi Leute

    sry für die dumme frage, aber was genau macht das?
    Protecion = sicherheit bzw. sichern, gesichert !

    Also was genau macht das..?
    Das überprüft ob die Hardware ID deines Computers mit der im Code angegebenen übereinstimmt. Da die Hardware ID einzigartig ist kann man so dafür sorgen, dass dein Programm wirklich nur auf einem Computer läuft! Macht man bei Private-Versions, damit nicht einfach einer das Teil kauft und dann shared...

  7. #7
    Gesperrt
    Registriert seit
    28.01.2009
    Beiträge
    757

    Standard

    Asoooo...ok..thx !
    Werde ihn mal compilen und testen

  8. #8
    NoClose Wurm
    Registriert seit
    21.03.2008
    Beiträge
    196

    Standard

    Vielleicht sollte ein Mod mal den Topic Titel ändern, weil das hier ist keine Hardware ID. Richtiger wäre: Software ID.

    Warum Soft und nicht Hard?
    Sobald ein neues Betriebssystem installiert wird, ändert sich die ID.
    Das als "Hardware ID" zu bezeichnen ist Kunden-Verarsche

  9. #9
    DateMake Dialer Avatar von bl0b
    Registriert seit
    25.04.2009
    Beiträge
    117

    Standard

    Ist das nicht bei jeder Hardware-ID der Falls, dass sich der Hash auch bei einer Formatierung ändert?

  10. #10
    Fortgeschrittener
    Registriert seit
    17.04.2009
    Beiträge
    37

    Standard

    Ne wenn man nen Hash aus der CPUID und der Seriennummer der Festplatte erstellt dann nicht!
    Aber ich mach bei meinen auch noch den username als faktor dabei!
    Wenn der trottel dann seinen name ändert bei der formatierung...
    Selber schuld.

Seite 1 von 2 12 LetzteLetzte

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •