Вопрос Как сделать привязку по HVID?

  • Автор темы Автор темы FixAyxYT
  • Дата начала Дата начала
Начинающий
Начинающий
Статус
Оффлайн
Регистрация
9 Май 2024
Сообщения
3
Реакции
0
Сделал я свой чит и лоадер, теперь нужно как то его обезопасить и мне нужно сделать привязку по HVID. Этого делать я не умею, можете помочь.
 
HVID это как
 
Вяжешь свое творчество к совокупности девайс-айди: HDD + MAC + CPUID + MB ID + Videocard ID. Как их вгетать, должен знать, если смог оформить описанные тобою аспекты (через WMI, если что). Делаешь отправку данных на дедик, в котором предварительно стоит БД с засейвленной связкой логина/пароля от ЛК твоего лодера и HWID-данных. Прописываешь в лоадере при запуске проверку привязки к лицензии. После чего накидываешь обфу, на этом все.
 

HWID (Hardware Identification) в компьютерах — уникальный идентификатор компонентов оборудования. Его можно назвать цифровым отпечатком компьютера.
Пожалуйста, авторизуйтесь для просмотра ссылки.
Пожалуйста, авторизуйтесь для просмотра ссылки.


Каждый компонент устройства (материнская плата, жёсткий диск, видеокарта) имеет свой HWID, который объединяет их для создания отдельного идентификатора.
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Даже не знаю
 
напиши дс свой
 
Самый лёгкий способ это: HWID Hardware ID, система для привязки к диску обычно использует уникальные идентификаторы жестокого диска или SSD для создания "Цифрового отпечатка" вот наглядный пример, как это может (cpp)
ОСНОВНЫЕ МЕТОДЫ ПОЛУЧЕНИЯ ИДЕНТИФИКАТОРОВ ДИСКА:

1. Использование Windows API (WMI)


C++:
Expand Collapse Copy
#include <windows.h>
#include <wbemidl.h>
#include <comdef.h>
#include <string>

#pragma comment(lib, "wbemuuid.lib")

std::string GetDiskHWID() {
    HRESULT hres;
    hres = CoInitializeEx(0, COINIT_MULTITHREADED);
   
    hres = CoInitializeSecurity(
        NULL,
        -1,
        NULL,
        NULL,
        RPC_C_AUTHN_LEVEL_DEFAULT,
        RPC_C_IMP_LEVEL_IMPERSONATE,
        NULL,
        EOAC_NONE,
        NULL
    );

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

    IWbemServices* pSvc = NULL;
    hres = pLoc->ConnectServer(
        _bstr_t(L"ROOT\\CIMV2"),
        NULL,
        NULL,
        0,
        NULL,
        0,
        0,
        &pSvc
    );

    hres = CoSetProxyBlanket(
        pSvc,
        RPC_C_AUTHN_WINNT,
        RPC_C_AUTHZ_NONE,
        NULL,
        RPC_C_AUTHN_LEVEL_CALL,
        RPC_C_IMP_LEVEL_IMPERSONATE,
        NULL,
        EOAC_NONE
    );

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

    IWbemClassObject* pclsObj = NULL;
    ULONG uReturn = 0;
    std::string diskId;

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

        VARIANT vtProp;
        hr = pclsObj->Get(L"SerialNumber", 0, &vtProp, 0, 0);
       
        if (SUCCEEDED(hr) {
            if (vtProp.vt == VT_BSTR) {
                std::wstring ws(vtProp.bstrVal, SysStringLen(vtProp.bstrVal));
                diskId = std::string(ws.begin(), ws.end());
                // Удаляем пробелы и непечатные символы
                diskId.erase(std::remove_if(diskId.begin(), diskId.end(),
                    [](char c) { return std::isspace(c) || !std::isprint(c); }), diskId.end());
            }
            VariantClear(&vtProp);
        }
        pclsObj->Release();
    }

    pSvc->Release();
    pLoc->Release();
    pEnumerator->Release();
    CoUninitialize();

    return diskId;
}

2. Использование DeviceIoControl для получения серийного номера

C++:
Expand Collapse Copy
#include <windows.h>
#include <string>

std::string GetDiskSerialNumber() {
    HANDLE hDevice = CreateFileW(
        L"\\\\.\\PhysicalDrive0",
        0,
        FILE_SHARE_READ | FILE_SHARE_WRITE,
        NULL,
        OPEN_EXISTING,
        0,
        NULL
    );

    if (hDevice == INVALID_HANDLE_VALUE) return "";

    STORAGE_PROPERTY_QUERY query{};
    query.PropertyId = StorageDeviceProperty;
    query.QueryType = PropertyStandardQuery;

    STORAGE_DESCRIPTOR_HEADER header{};
    DWORD bytesReturned = 0;

    DeviceIoControl(
        hDevice,
        IOCTL_STORAGE_QUERY_PROPERTY,
        &query,
        sizeof(query),
        &header,
        sizeof(header),
        &bytesReturned,
        NULL
    );

    std::vector<BYTE> buffer(header.Size);
    if (!DeviceIoControl(
        hDevice,
        IOCTL_STORAGE_QUERY_PROPERTY,
        &query,
        sizeof(query),
        buffer.data(),
        header.Size,
        &bytesReturned,
        NULL
    )) {
        CloseHandle(hDevice);
        return "";
    }

    STORAGE_DEVICE_DESCRIPTOR* descriptor = (STORAGE_DEVICE_DESCRIPTOR*)buffer.data();
    if (descriptor->SerialNumberOffset == 0) {
        CloseHandle(hDevice);
        return "";
    }

    const char* serialNumber = (const char*)buffer.data() + descriptor->SerialNumberOffset;
    std::string result(serialNumber);
   
    // Очистка строки от нежелательных символов
    result.erase(std::remove_if(result.begin(), result.end(),
        [](char c) { return std::isspace(c) || !std::isprint(c); }), result.end());
   
    CloseHandle(hDevice);
    return result;
}

Создание HWID на основе идентификаторов
Обычно HWID создается как хеш от комбинации нескольких аппаратных идентификаторов:
C++:
Expand Collapse Copy
#include <wincrypt.h>
#include <string>

std::string GenerateHWID() {
    std::string diskId = GetDiskSerialNumber();
    if (diskId.empty()) diskId = "NO_DISK_ID";
   
    // Можно добавить другие идентификаторы (CPU, MAC и т.д.)
    std::string hwidData = diskId; // + otherIds...
   
    // Хеширование данных
    HCRYPTPROV hProv = 0;
    HCRYPTHASH hHash = 0;
    BYTE rgbHash[16];
    DWORD cbHash = 16;
    CHAR rgbDigits[] = "0123456789abcdef";
   
    CryptAcquireContext(&hProv, NULL, NULL, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT);
    CryptCreateHash(hProv, CALG_MD5, 0, 0, &hHash);
    CryptHashData(hHash, (BYTE*)hwidData.c_str(), hwidData.size(), 0);
    CryptGetHashParam(hHash, HP_HASHVAL, rgbHash, &cbHash, 0);
   
    std::string result;
    for (DWORD i = 0; i < cbHash; i++) {
        result.push_back(rgbDigits[rgbHash[i] >> 4]);
        result.push_back(rgbDigits[rgbHash[i] & 0xf]);
    }
   
    if (hHash) CryptDestroyHash(hHash);
    if (hProv) CryptReleaseContext(hProv, 0);
   
    return result;
}

Проверка лицензии с помощью HWID

C++:
Expand Collapse Copy
bool CheckLicense() {
    std::string currentHWID = GenerateHWID();
    std::string savedHWID = LoadSavedHWID(); // Реализуйте чтение из файла/реестра
   
    return currentHWID == savedHWID;
}

Важные замечания

1. Недостатки безопасности:
- Опытные пользователи могут подменить идентификаторы
- При замене диска лицензия перестанет работать

2. Рекомендации:
- Комбинируйте несколько аппаратных идентификаторов
- Используйте обфускацию кода
- Рассмотрите серверную проверку лицензий
- Предусмотрите механизм сброса лицензии при смене железа

3. Альтернативы:
- Использование TPM модуля (если доступен)
- Cloud-based лицензирование
- Активация через онлайн-сервер

Эти примеры предоставляют базовую реализацию HWID системы на cpp.
Для реального использования потребуется доработка и улучшение безопасности.
 
Сделал я свой чит и лоадер, теперь нужно как то его обезопасить и мне нужно сделать привязку по HVID. Этого делать я не умею, можете помочь.
просто гетаешь хвид пользователя, и сверяешь с бд
 
Вяжешь свое творчество к совокупности девайс-айди: HDD + MAC + CPUID + MB ID + Videocard ID. Как их вгетать, должен знать, если смог оформить описанные тобою аспекты (через WMI, если что). Делаешь отправку данных на дедик, в котором предварительно стоит БД с засейвленной связкой логина/пароля от ЛК твоего лодера и HWID-данных. Прописываешь в лоадере при запуске проверку привязки к лицензии. После чего накидываешь обфу, на этом все.
Вмик на 11 Винде нету, хотя у меня есть обход этой темы, и кодом, и настройками
 
Назад
Сверху Снизу