Гайд Тру привязка по HWID внутри .dll

  • Автор темы Автор темы frDD
  • Дата начала Дата начала
Забаненный
Забаненный
Статус
Оффлайн
Регистрация
8 Май 2017
Сообщения
234
Реакции
114
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Изи привязка для вашего c+p.

Основной код (hwutils.cpp):

Код:
Expand Collapse Copy
#include "stdafx.h"
#include "hwutils.h"
#include <iostream>
#include <urlmon.h>
#include <string>
#include <wininet.h>
#include <locale>
#include <windows.h>
#include "Cheat.h"
#include <sstream>
#pragma comment(lib, "wininet")
#pragma comment(lib,"wininet.lib")
#pragma comment(lib, "urlmon.lib")
using namespace std;
std::string ReadHWFile() {
std::ifstream ifs("C:\\h.txt");
std::string content((std::istreambuf_iterator<char>(ifs)),
(std::istreambuf_iterator<char>()));
return content;
}
// Функция которая узнает серийник ПК.
string serial() {
DWORD  lVolSerialNbr = 0;
char sHDSerial[255] = "";
GetVolumeInformation("C:\\", 0, 0, &lVolSerialNbr, 0, 0, 0, 0);
_ultoa(lVolSerialNbr, sHDSerial, 10);
std::string c(sHDSerial);
return c;
}
bool DoesHWIDMatch() { // Сама функция проверки, если проверка успешная выходит - true / не успешная - false
HINTERNET connect = InternetOpen("MyBrowser", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0); // Создаем канал для подключения к сети
if (!connect) // проверка на успешность создания канала для подключения к сети
{
return false;
}
std::string URL = "http://beardhook.xyz/keys/" + serial() + ".ini"; // указываем в качестве ссылки для последующего открытия и чтения файла, адрес сайта + файл серийник.ini
LPCSTR Final = URL.c_str();
HINTERNET OpenAddress = InternetOpenUrl(connect, Final, NULL, INTERNET_DEFAULT_HTTPS_PORT, INTERNET_FLAG_PRAGMA_NOCACHE | INTERNET_FLAG_KEEP_CONNECTION, 0);
Sleep(10);
if (!OpenAddress) // Проверка на доступ к сайту, aka подключение к сети
{
InternetCloseHandle(connect);
return false;
MessageBox(NULL, "Ошибка:", "Нету подключения к интернете!", MB_OK);
}
char DataReceived[4096];
DWORD NumberOfBytesRead = 0;
while (InternetReadFile(OpenAddress, DataReceived, 4096, &NumberOfBytesRead) && NumberOfBytesRead) {} // Читает файл и записывает данные в переменные
InternetCloseHandle(OpenAddress); // выключаем интерпутер
InternetCloseHandle(connect); // выключаем интерпутер
if (strstr(DataReceived, "HGF%R3")) // проверяем на нужный текст в файле, например HGF%R3
{
return true;
}
else
{
E::Misc->Panic(); // Здесь функция выгрузки вашего софта, в каждом своя. Тута для TGF.
static TCHAR path[MAX_PATH]; // создаем переменную под адресс
std::string serial1 = serial(); // создаем и приравниваем переменной серийник, для последующей записи
LPCSTR Final1 = serial1.c_str(); // Просто забиваем в ещё одну переменную серийник, даунский мув конечно.
std::string folder, file, serial; // создаем больше переменных, ибо чет мало было
file = std::string(path) + strenc("C:\\serialkey.ini"); // прописываем адресс для сохранения файла с серийником
WritePrivateProfileString(Final1, Final1, Final1, file.c_str()); // Записываем серийник в файл указанный строкой выше, дабы покупатель вашей пасты радовался.
MessageBox(NULL, "Подписка не обнаружена!", "Ошибка:", MB_OK); // Сообщение о отсуствии подписки.
}
return false;
}


hwutils.h:
Код:
Expand Collapse Copy
#pragma once
extern bool DoesHWIDMatch();

stdafx.cpp
Код:
Expand Collapse Copy
#include "stdafx.h"

stdafx.h
Код:
Expand Collapse Copy
#pragma once
#include "targetver.h"
#include <windows.h>
#include <tlhelp32.h>
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <fstream>
#include <sstream>
#include <string>
#include <psapi.h>
#include <time.h>
#include <process.h>
#include <vector>
#include <map>
#include <ostream>
#include <Shlobj.h>
#include <math.h>
#include <stdint.h>
#include <string>
#include <string.h>
#include <cmath>
#include <float.h>
#include <codecvt>
#include "targetver.h"
#include <atlbase.h>
#include <atlcom.h>
#include <sapi.h>
#include <algorithm>
#include <iterator>
#include <stdio.h>
#include <tchar.h>

targetver.h
Код:
Expand Collapse Copy
#include <SDKDDKVer.h>

1) Устанавливаем адрес к будущим файлам, для этого просто вставляете ссылку на нужный каталог вашего сайта, где будут лежать файлы, которые софт будет проверять.
Код:
Expand Collapse Copy
std::string URL = "http://beardhook.xyz/keys/" + serial() + ".ini";
Меняем "
Пожалуйста, авторизуйтесь для просмотра ссылки.
" на ваш каталог (создаем папку на хосте и вставляем адрес)
2) Меняем текст для проверки подлинности файла. Находим строку:
Код:
Expand Collapse Copy
if (strstr(DataReceived, "HGF%R3"))
Меняем "HGF%R3" на ваш текст в файлах, например "123".
3) Находим строки на выход false:
Код:
Expand Collapse Copy
file = std::string(path) + strenc("C:\\serialkey.ini");
- указываем свой адрес и название файла, куда будет сохранятся серийник, если лицензия не обнаружена.
Код:
Expand Collapse Copy
E::Misc->Panic();
- вставляем функцию, которая срабатывает при нажатии кнопки паники/unhook, которая выгружает софт.
3) Далее активируем саму проверку на лицензию, вставляем проверка на DoesHWIDMatch() в функции которая загружает ваш софт или на открытие меню.
Код:
Expand Collapse Copy
if (DoesHWIDMatch() == true)
{
// тут код загрузки самого софта после инжекта или код нажатия кнопки и открытия меню и т.п.
}

Так же в файл, где идет проверка подключите hwutils.h
Код:
Expand Collapse Copy
#include "hwutils.h"

После запротектите .dll, дабы сайт и ключ проверки не украли. WELL PLAYD. Вы топ кодер, можно продавать софт с подпиской! Уху! Если проверка прошла неудачно серийник будет в файле на диске C, файл "серийник.ini" с текстом для проверки, который вы указали надо залить в каталог сайта, который опять же был указан вами. Profit. :seemsgood::seemsgood::seemsgood::seemsgood::seemsgood::seemsgood::seemsgood::seemsgood::seemsgood:
 
Последнее редактирование:
спиздил привязку у Костина рофланбулыга
 
спиздил привязку у Костина рофланбулыга
какая разница спиздил или нет?! ТЕМЫ НЕ БЫЛО ДО ЭТОГО МОМЕНТА С привязкой!!!!!!!!!!
Ты хоть что то спизди откуда то, а то такие как ты только пиздеть и умеют.
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
какая разница спиздил или нет?! ТЕМЫ НЕ БЫЛО ДО ЭТОГО МОМЕНТА С привязкой!!!!!!!!!!
Ты хоть что то спизди откуда то, а то такие как ты только пиздеть и умеют.
Как я понял, это троллин, ведь Костин это я. :roflanEbalo::roflanEbalo::roflanEbalo::roflanEbalo::roflanEbalo::roflanEbalo::roflanEbalo::LUL::LUL::LUL::LUL:
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
как насчет сурса ? =)
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
А шо делать если нет анлоада в чите =)
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
А шо делать если нет анлоада в чите =)
Ничего, снеси строку. Она не важна, просто Unload выгружает софт и крашит КС, закрывая её без ошибок. Можно и без неё.
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Если её не будет он закроет кс?
Если её нету, кс не закроется, просто выдаст сообщение о том, что подписка не обнаружена. Просто строку эту удали с анхуком. В качестве закрытия юзай ту функцию, которая крашнет кс, напиши сам что-то, например взятие CurrectWeapon из рук (или аналог этой функции) без проверки на спавн. Будет краш.
 
В качестве закрытия юзай ту функцию, которая крашнет кс, напиши сам что-то, например взятие CurrectWeapon из рук (или аналог этой функции) без проверки на спавн. Будет краш.
pCoding.
 
Если её нету, кс не закроется, просто выдаст сообщение о том, что подписка не обнаружена. Просто строку эту удали с анхуком. В качестве закрытия юзай ту функцию, которая крашнет кс, напиши сам что-то, например взятие CurrectWeapon из рук (или аналог этой функции) без проверки на спавн. Будет краш.
Трукодер, тут это, ну ты понял(хелп)
Пожалуйста, авторизуйтесь для просмотра ссылки.
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Трукодер, тут это, ну ты понял(хелп)
Пожалуйста, авторизуйтесь для просмотра ссылки.
Пожалуйста, авторизуйтесь для просмотра ссылки.

У меня макрос на перевод текста в const char*
Вроде на то на гитхабе лежит, линканул, либо юзай аналог, думаю в твоем софте он есть. А если его нет юзай:
XorStr.h
Код:
Expand Collapse Copy
#pragma once
#include <string>
#include <array>
#include <cstdarg>
#define BEGIN_NAMESPACE( x ) namespace x {
#define END_NAMESPACE }
BEGIN_NAMESPACE(XorCompileTime)
constexpr auto time = __TIME__;
constexpr auto seed = static_cast< int >(time[7]) + static_cast< int >(time[6]) * 10 + static_cast< int >(time[4]) * 60 + static_cast< int >(time[3]) * 600 + static_cast< int >(time[1]) * 3600 + static_cast< int >(time[0]) * 36000;
template < int N >
struct RandomGenerator {
private:
static constexpr unsigned a = 16807; // 7^5
static constexpr unsigned m = 2147483647; // 2^31 - 1
static constexpr unsigned s = RandomGenerator< N - 1 >::value;
static constexpr unsigned lo = a * (s & 0xFFFF); // Multiply lower 16 bits by 16807
static constexpr unsigned hi = a * (s >> 16); // Multiply higher 16 bits by 16807
static constexpr unsigned lo2 = lo + ((hi & 0x7FFF) << 16); // Combine lower 15 bits of hi with lo's upper bits
static constexpr unsigned hi2 = hi >> 15; // Discard lower 15 bits of hi
static constexpr unsigned lo3 = lo2 + hi;
public:
static constexpr unsigned max = m;
static constexpr unsigned value = lo3 > m ? lo3 - m : lo3;
};
template <>
struct RandomGenerator< 0 > {
static constexpr unsigned value = seed;
};
template < int N, int M >
struct RandomInt {
static constexpr auto value = RandomGenerator< N + 1 >::value % M;
};
template < int N >
struct RandomChar {
static const char value = static_cast< char >(1 + RandomInt< N, 0x7F - 1 >::value);
};
template < size_t N, int K >
struct XorString {
private:
const char _key;
std::array< char, N + 1 > _encrypted;
constexpr char enc(char c) const {
return c ^ _key;
}
char dec(char c) const {
return c ^ _key;
}
public:
template < size_t... Is >
constexpr __forceinline XorString(const char* str, std::index_sequence< Is... >) : _key(RandomChar< K >::value), _encrypted{ enc(str[Is])... } {
}
__forceinline decltype(auto) decrypt(void)
{
for (size_t i = 0; i < N; ++i)
{
_encrypted[i] = dec(_encrypted[i]);
}
_encrypted[N] = '\0';
return _encrypted.data();
}
};
#define XorStr( s ) ( XorCompileTime::XorString< sizeof( s ) - 1, __COUNTER__ >( s, std::make_index_sequence< sizeof( s ) - 1>() ).decrypt() )
END_NAMESPACE

XorStr за место strenc. И подключи XorStr.h
 
Пожалуйста, авторизуйтесь для просмотра ссылки.

У меня макрос на перевод текста в const char*
Вроде на то на гитхабе лежит, линканул, либо юзай аналог, думаю в твоем софте он есть. А если его нет юзай:
XorStr.h
Код:
Expand Collapse Copy
#pragma once
#include <string>
#include <array>
#include <cstdarg>
#define BEGIN_NAMESPACE( x ) namespace x {
#define END_NAMESPACE }
BEGIN_NAMESPACE(XorCompileTime)
constexpr auto time = __TIME__;
constexpr auto seed = static_cast< int >(time[7]) + static_cast< int >(time[6]) * 10 + static_cast< int >(time[4]) * 60 + static_cast< int >(time[3]) * 600 + static_cast< int >(time[1]) * 3600 + static_cast< int >(time[0]) * 36000;
template < int N >
struct RandomGenerator {
private:
static constexpr unsigned a = 16807; // 7^5
static constexpr unsigned m = 2147483647; // 2^31 - 1
static constexpr unsigned s = RandomGenerator< N - 1 >::value;
static constexpr unsigned lo = a * (s & 0xFFFF); // Multiply lower 16 bits by 16807
static constexpr unsigned hi = a * (s >> 16); // Multiply higher 16 bits by 16807
static constexpr unsigned lo2 = lo + ((hi & 0x7FFF) << 16); // Combine lower 15 bits of hi with lo's upper bits
static constexpr unsigned hi2 = hi >> 15; // Discard lower 15 bits of hi
static constexpr unsigned lo3 = lo2 + hi;
public:
static constexpr unsigned max = m;
static constexpr unsigned value = lo3 > m ? lo3 - m : lo3;
};
template <>
struct RandomGenerator< 0 > {
static constexpr unsigned value = seed;
};
template < int N, int M >
struct RandomInt {
static constexpr auto value = RandomGenerator< N + 1 >::value % M;
};
template < int N >
struct RandomChar {
static const char value = static_cast< char >(1 + RandomInt< N, 0x7F - 1 >::value);
};
template < size_t N, int K >
struct XorString {
private:
const char _key;
std::array< char, N + 1 > _encrypted;
constexpr char enc(char c) const {
return c ^ _key;
}
char dec(char c) const {
return c ^ _key;
}
public:
template < size_t... Is >
constexpr __forceinline XorString(const char* str, std::index_sequence< Is... >) : _key(RandomChar< K >::value), _encrypted{ enc(str[Is])... } {
}
__forceinline decltype(auto) decrypt(void)
{
for (size_t i = 0; i < N; ++i)
{
_encrypted[i] = dec(_encrypted[i]);
}
_encrypted[N] = '\0';
return _encrypted.data();
}
};
#define XorStr( s ) ( XorCompileTime::XorString< sizeof( s ) - 1, __COUNTER__ >( s, std::make_index_sequence< sizeof( s ) - 1>() ).decrypt() )
END_NAMESPACE

XorStr за место strenc. И подключи XorStr.h
Я так и сделал, заменил на XorStr, но решил отписать, ибо проверить на работоспособность сейчас не могу
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Пожалуйста, авторизуйтесь для просмотра ссылки.

У меня макрос на перевод текста в const char*
Вроде на то на гитхабе лежит, линканул, либо юзай аналог, думаю в твоем софте он есть. А если его нет юзай:
XorStr.h
Код:
Expand Collapse Copy
#pragma once
#include <string>
#include <array>
#include <cstdarg>
#define BEGIN_NAMESPACE( x ) namespace x {
#define END_NAMESPACE }
BEGIN_NAMESPACE(XorCompileTime)
constexpr auto time = __TIME__;
constexpr auto seed = static_cast< int >(time[7]) + static_cast< int >(time[6]) * 10 + static_cast< int >(time[4]) * 60 + static_cast< int >(time[3]) * 600 + static_cast< int >(time[1]) * 3600 + static_cast< int >(time[0]) * 36000;
template < int N >
struct RandomGenerator {
private:
static constexpr unsigned a = 16807; // 7^5
static constexpr unsigned m = 2147483647; // 2^31 - 1
static constexpr unsigned s = RandomGenerator< N - 1 >::value;
static constexpr unsigned lo = a * (s & 0xFFFF); // Multiply lower 16 bits by 16807
static constexpr unsigned hi = a * (s >> 16); // Multiply higher 16 bits by 16807
static constexpr unsigned lo2 = lo + ((hi & 0x7FFF) << 16); // Combine lower 15 bits of hi with lo's upper bits
static constexpr unsigned hi2 = hi >> 15; // Discard lower 15 bits of hi
static constexpr unsigned lo3 = lo2 + hi;
public:
static constexpr unsigned max = m;
static constexpr unsigned value = lo3 > m ? lo3 - m : lo3;
};
template <>
struct RandomGenerator< 0 > {
static constexpr unsigned value = seed;
};
template < int N, int M >
struct RandomInt {
static constexpr auto value = RandomGenerator< N + 1 >::value % M;
};
template < int N >
struct RandomChar {
static const char value = static_cast< char >(1 + RandomInt< N, 0x7F - 1 >::value);
};
template < size_t N, int K >
struct XorString {
private:
const char _key;
std::array< char, N + 1 > _encrypted;
constexpr char enc(char c) const {
return c ^ _key;
}
char dec(char c) const {
return c ^ _key;
}
public:
template < size_t... Is >
constexpr __forceinline XorString(const char* str, std::index_sequence< Is... >) : _key(RandomChar< K >::value), _encrypted{ enc(str[Is])... } {
}
__forceinline decltype(auto) decrypt(void)
{
for (size_t i = 0; i < N; ++i)
{
_encrypted[i] = dec(_encrypted[i]);
}
_encrypted[N] = '\0';
return _encrypted.data();
}
};
#define XorStr( s ) ( XorCompileTime::XorString< sizeof( s ) - 1, __COUNTER__ >( s, std::make_index_sequence< sizeof( s ) - 1>() ).decrypt() )
END_NAMESPACE

XorStr за место strenc. И подключи XorStr.h
Скинь ВК свой, пожалуйста, нужна помощь
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
А потом подменили хост и юзают твой софт на лт.
 
Назад
Сверху Снизу