Регистрация Главная Сообщество
Сообщения за день Справка Регистрация
Навигация
Zhyk.org LIVE! Реклама на Zhyk.org Правила Форума Награды и достижения Доска "почета"

Ответ
 
Опции темы
Старый 09.02.2009, 06:43   #1
Заблокирован
 Капитан
Аватар для Ivan_32
 
Ivan_32 душа компанииIvan_32 душа компанииIvan_32 душа компанииIvan_32 душа компанииIvan_32 душа компанииIvan_32 душа компанииIvan_32 душа компанииIvan_32 душа компании
Регистрация: 14.05.2008
Сообщений: 253
Популярность: 1015
Сказал(а) спасибо: 666
Поблагодарили 451 раз(а) в 173 сообщениях
Отправить сообщение для Ivan_32 с помощью ICQ Отправить сообщение для Ivan_32 с помощью Telegram Отправить сообщение для Ivan_32 с помощью Skype™
 
По умолчанию Простейшая привязка приложения к железу


Немного теории:
Часто хочется оградить свою программу от несанкционированного использования. Для этого есть множество способов но все они естественно имеют не самую простую реализацию. Сегодня я расскажу как оградить вашу программу от использования на другом компьютере. Мы сделаем приложение которое будет привязываться к серийному номеру HDD. В первой части мы напишем программу которая будет показывать серийный номер HDD - его можно будет использовать во второй(защищаемой) программе.

Итак приступим. Самый простой способ получить серийный номер винчестера это функция GetVolumeInfromation:
Код:
BOOL WINAPI GetVolumeInformation(
1.  __in_opt   LPCTSTR lpRootPathName,
2.  __out      LPTSTR lpVolumeNameBuffer,
3.  __in       DWORD nVolumeNameSize,
4.  __out_opt  LPDWORD lpVolumeSerialNumber,
5.  __out_opt  LPDWORD lpMaximumComponentLength,
6.  __out_opt  LPDWORD lpFileSystemFlags,
7.  __out      LPTSTR lpFileSystemNameBuffer,
8.  __in       DWORD nFileSystemNameSize
);
Как видно из предварительного кода, все выходные параметры, опциональны. (об это свидетельствует пометка __out_opt).
Пройдемся по параметрам:
1. Путь к сканируемому диску.
2. Буфер в который будет возвращено имя диска.
3. Максимальный размер этого буфера.
4. Вот это то что нам надо - серийный номер HDD.
5. Максимальная длина имени файла для данной файловой системы.
6. Это двойное слово на само деле что то вроде флагового регистра, каждый бит в нем что то означает.
7. Буфер для имени файловой системы.
8. Длина этого буфера.

Теперь осталось только приступить к написанию программы.
Поскольку уроки по написанию оконных программ под Win32 уже есть, тут я не буду детализировать объяснения, только добавлю свои примечания.

Начнем:

Код:
#include "stdafx.h"
#include <stdio.h>

LRESULT WINAPI			mainProc(HWND,UINT,WPARAM,LPARAM);									
BOOL		  InitializeControls(HWND);	
DWORD		GetHDDSerial();								
																
#define bGetSN 1000														
static HWND hBGetSN;													
																		
#define eSN	   1001														
static HWND hESN;
Stdio.h содержит нужную нам функцию для работы со строками - [Ссылки могут видеть только зарегистрированные пользователи. ]

StdAfx.h это файл поставляемый вместе с проектом, в нем записан следующий код:
Код:
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
Ничего примечательного.

mainProc - функция обработки сообщений.

InitializeControls - срабатывает на событие WM_CREATE и создает все нужные контролы.

GetHDDSerial - функция говорит сама за себя, ее код мы рассмотрим позже.

Ну а дальше идут дескрипторы окон и их идентификаторы:
hESN - идентификатор eSN - текстовое поле.
hBGetSN - идентификатор bGetSN - кнопка.

Перейдем к функции WinMain:
Код:
int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow)
{
	MSG msg;
	HWND hMain;
	
	hMain=CreateWindowEx(0,WC_DIALOG,"HDD SN",\
		WS_VISIBLE|WS_SYSMENU,CW_USEDEFAULT,CW_USEDEFAULT,\
		165,85,0,0,0,0);
	if(!hMain)return 0;
	
	SetWindowLong(hMain,DWL_DLGPROC,(long)mainProc);
	SendMessageA(hMain,WM_CREATE,0,0);

	while(GetMessageA(&msg,0,0,0)!=NULL)
	{
		TranslateMessage(&msg);
		DispatchMessage(&msg);
	}
	return 0;
}
Опять же ничего примечательного, только добавлена проверка на создание окна. Если hMain равно 0 - приложение завершится. Маловероятно что такое может произойти но все же, такие конструкции что то вроде этикета для кода.

Функция обработки сообщений mainProc:
Код:
LRESULT WINAPI mainProc(HWND hWnd,UINT message,WPARAM wp,LPARAM lp)
{
	switch(message)
	{
		case WM_COMMAND:
			{
				switch(wp)
				{
					case bGetSN:
						{
							char szBuff[260];
							sprintf(szBuff,"HDDSN: %u",GetHDDSerial());
							SetWindowText(hESN,szBuff);
						}break;
				}
			}break;
		case WM_CREATE:
			{
			InitializeControls(hWnd);
			}break;
		case WM_CLOSE:
			{
			PostQuitMessage(0);
			}break;
	}
	return 0;
}
Как видно из кода, при срабатывания события нажатия на нашу кнопку, вызывается функция получения серийного номера HDD, номер записывается в строку и текст в нашем текстовом поле заменяется на тот что находится в szBuff.

При сообщение WM_CREATE срабатывает функция создания контролов. В остальном все обыденно.

Функция InitializeControls:
Код:
BOOL InitializeControls(HWND hWnd)
{
	hESN=CreateWindowEx(0,"edit",0,WS_VISIBLE|WS_CHILD|WS_BORDER,5,5,150,20,hWnd,(HMENU)eSN,0,0);
		if(!hESN)return FALSE;

	hBGetSN=CreateWindowEx(0,"button","Get Serial Number",WS_VISIBLE|WS_CHILD,5,30,150,25,hWnd,(HMENU)bGetSN,0,0);
		if(!hBGetSN)return FALSE;

	return TRUE;
}
Добавлены проверки на создание контролов в остальном все опять же обыденно.

Ну и наконец виновник торжества - функция GetHDDSerial:
Код:
DWORD GetHDDSerial()
{
	DWORD serialNumber;
	GetVolumeInformation("%SystemDrive%",0,0,&serialNumber,0,0,0,0);
	return serialNumber;
}
Константа %SystemDrive% это такая общая для всей системы ссылка на диск на котором установлена ОС. Допустим установлен у вас Windows на диске С:\ оно и подставит вместо нее путь C:\.

Скомпилируйте и узнайте серийный номер своего HDD - он вам понадобится для следующей части.


Защищенная программа:
Ну а теперь напишем и защищенную программу. Функция WinMain идентична использованной нами в предыдущей программе. Та же участь постигла и функцию GetHDDSerial. Приведу только код функции обработки сообщений.

Функция mainProc:
Код:
static DWORD SN=0;//Замените ноль на ваш серийный номер.
LRESULT WINAPI mainProc(HWND hWnd,UINT message,WPARAM wp,LPARAM lp)
{
	switch(message)
	{
	case WM_CREATE:
		{
			if(GetHDDSerial()!=SN)
				PostQuitMessage(0);
			CreateWindowEx(0,"static","Program started!",WS_VISIBLE|SS_CENTER|WS_CHILD,10,10,100,30,hWnd,0,0,0);
		}break;
	case WM_CLOSE:
		{
			PostQuitMessage(0);
		}break;
	}
	return 0;
}
Как видно из кода, при инициализации формы(тоесть при сообщение WM_CREATE происходит проверка серийного номера винчастера, если проверка неудачна то приложение просто закрывается. При успешной проверке на форме создается надпись.


Вот собственно и все. В заключение приведу исходники обоих программ.

Get HDD Serial Number
Secured Program

Последний раз редактировалось Ivan_32; 09.02.2009 в 07:12.
  Ответить с цитированием
4 пользователя(ей) сказали cпасибо:
Den1S (09.02.2009), Leo_ня (09.02.2009), Zhyk (09.02.2009), ZliLO (09.02.2009)
Старый 27.03.2011, 14:02   #2
 Сержант
Аватар для ANTIBLANK
 
ANTIBLANK скоро будет известенANTIBLANK скоро будет известенANTIBLANK скоро будет известенANTIBLANK скоро будет известен
Регистрация: 18.12.2010
Сообщений: 127
Популярность: 316
Сказал(а) спасибо: 122
Поблагодарили 174 раз(а) в 57 сообщениях
 
По умолчанию Re: Простейшая привязка приложения к железу

Это самый простой? о_0
________________
Автор UnPaLeVo_EnGiNe [Ссылки могут видеть только зарегистрированные пользователи. ]
  Ответить с цитированием
Старый 15.05.2011, 12:33   #3
 Сержант
Аватар для Козырный Туз
 
Козырный Туз знает себе ценуКозырный Туз знает себе ценуКозырный Туз знает себе ценуКозырный Туз знает себе ценуКозырный Туз знает себе ценуКозырный Туз знает себе ценуКозырный Туз знает себе ценуКозырный Туз знает себе ценуКозырный Туз знает себе ценуКозырный Туз знает себе ценуКозырный Туз знает себе цену
Регистрация: 08.05.2011
Сообщений: 165
Популярность: 4255
Сказал(а) спасибо: 385
Поблагодарили 212 раз(а) в 160 сообщениях
 
По умолчанию Re: Простейшая привязка приложения к железу

Цитата:
Сообщение от Ivan_32Посмотреть сообщение
Перейдем к функции WinMain:

у меня нет такой функции. не подскажете почему я вроде всё по указаниям делал.
Цитата:
Сообщение от Ivan_32Посмотреть сообщение
Ну а дальше идут дескрипторы окон и их идентификаторы

и по этому можно поподробнее...
________________

zhyk.ru вечен.
|Самые низкие цены

[SIGPIC][/SIGPIC]
  Ответить с цитированием
Старый 15.05.2011, 18:14   #4
 Разведчик
Аватар для doctor_flasher
 
doctor_flasher на правильном пути
Регистрация: 15.05.2011
Сообщений: 10
Популярность: 55
Сказал(а) спасибо: 1
Поблагодарили 15 раз(а) в 12 сообщениях
Отправить сообщение для doctor_flasher с помощью ICQ
 
По умолчанию Re: Простейшая привязка приложения к железу

Стоит отметить, что этот способ бесполезен чуть менее, чем полностью, ибо даже новичку не составит труда после часа чтений мануалов найти правильный HardwareID. И (ИМХО) не стоило засорять код длиииинными вызовами апи для создания форм и тп. - проще было бы с использованием всех плюшек вижуал студио сделать для примера - было бы строк 10 кода
  Ответить с цитированием
Старый 17.05.2011, 07:56   #5
Super Moderator
 Маршал
Аватар для Тигрь
 
Тигрь сломал счётчик популярности :(Тигрь сломал счётчик популярности :(Тигрь сломал счётчик популярности :(Тигрь сломал счётчик популярности :(Тигрь сломал счётчик популярности :(Тигрь сломал счётчик популярности :(Тигрь сломал счётчик популярности :(Тигрь сломал счётчик популярности :(Тигрь сломал счётчик популярности :(Тигрь сломал счётчик популярности :(Тигрь сломал счётчик популярности :(
Регистрация: 05.05.2009
Сообщений: 875
Популярность: 48955
Золото Zhyk.Ru: 850
Сказал(а) спасибо: 155
Поблагодарили 739 раз(а) в 274 сообщениях
 
По умолчанию Re: Простейшая привязка приложения к железу

Что касается способо то конечно обойти легко, и я тут на форуме об этом писал. А что касается вин апи, не заметил как раздел называется?
________________
Продаю приват читы для AION Absolute, desteny 3.5, Legend, Cataclysm, Ru, EU, NA
Продаю многооконку на R2 Пишу читы на заказ под любые игры. Предложения в ЛС.
Все мои читы/программы/статьи тут: http://zhyk.ru/forum/showpost.php?p=38501&postcount=21
  Ответить с цитированием
Старый 31.05.2011, 10:14   #6
 Разведчик
Аватар для doctor_flasher
 
doctor_flasher на правильном пути
Регистрация: 15.05.2011
Сообщений: 10
Популярность: 55
Сказал(а) спасибо: 1
Поблагодарили 15 раз(а) в 12 сообщениях
Отправить сообщение для doctor_flasher с помощью ICQ
 
По умолчанию Re: Простейшая привязка приложения к железу

Ну не весь же код на ВинАпи я когда начинал кодить, с ума сходил, всматриваясь на большооооой такой код других людей (где, в принципе, для сабжа статьи требовалось не более 30 строк). Ну не знаю короче - просто свое сраное мнение высказал =)
  Ответить с цитированием
Старый 14.06.2011, 12:14   #7
 Разведчик
Аватар для doctor_flasher
 
doctor_flasher на правильном пути
Регистрация: 15.05.2011
Сообщений: 10
Популярность: 55
Сказал(а) спасибо: 1
Поблагодарили 15 раз(а) в 12 сообщениях
Отправить сообщение для doctor_flasher с помощью ICQ
 
По умолчанию Re: Простейшая привязка приложения к железу

Russian_Zarj, хэндлы окон (hWnd). Там нечего рассказывать, в принципе, - это просто идентификаторы окон. Ну, чтоб система могла с ними нормально общаться. Вот. Гугл же.
  Ответить с цитированием
Старый 19.06.2011, 19:06   #8
Читер-спонсор
 Сержант
Аватар для gum_classis
 
gum_classis в состоянии испепелить взглядомgum_classis в состоянии испепелить взглядомgum_classis в состоянии испепелить взглядомgum_classis в состоянии испепелить взглядомgum_classis в состоянии испепелить взглядомgum_classis в состоянии испепелить взглядомgum_classis в состоянии испепелить взглядомgum_classis в состоянии испепелить взглядомgum_classis в состоянии испепелить взглядомgum_classis в состоянии испепелить взглядомgum_classis в состоянии испепелить взглядом
Регистрация: 03.04.2011
Сообщений: 128
Популярность: 5379
Сказал(а) спасибо: 137
Поблагодарили 209 раз(а) в 111 сообщениях
Отправить сообщение для gum_classis с помощью ICQ Отправить сообщение для gum_classis с помощью Skype™
 
По умолчанию Re: Простейшая привязка приложения к железу

Подскажите легко ломается ? собираюсь сервис открыть и думаю кряки всегда и всюду будут ?
  Ответить с цитированием
Старый 19.06.2011, 19:33   #9
Заблокирован
 Разведчик
Аватар для Муха_
 
Муха_ душа компанииМуха_ душа компанииМуха_ душа компанииМуха_ душа компанииМуха_ душа компанииМуха_ душа компанииМуха_ душа компанииМуха_ душа компании
Регистрация: 18.06.2011
Сообщений: 14
Популярность: 973
Сказал(а) спасибо: 106
Поблагодарили 82 раз(а) в 53 сообщениях
 
По умолчанию Re: Простейшая привязка приложения к железу

Ломается легко кряков будет куча
  Ответить с цитированием
Пользователь сказал cпасибо:
ужасный тип (23.06.2011)
Старый 07.08.2011, 20:03   #10
 Разведчик
Аватар для doctor_flasher
 
doctor_flasher на правильном пути
Регистрация: 15.05.2011
Сообщений: 10
Популярность: 55
Сказал(а) спасибо: 1
Поблагодарили 15 раз(а) в 12 сообщениях
Отправить сообщение для doctor_flasher с помощью ICQ
 
По умолчанию Re: Простейшая привязка приложения к железу

Цитата:
Сообщение от killer_me2Посмотреть сообщение
это что самый простой ?

Самый простой. Там большая часть кода - создание формы и тп. Для защиты нужна непосредственно функция GetVolumeInformation
  Ответить с цитированием
Старый 29.10.2011, 13:06   #11
 Разведчик
Аватар для zAvratos
 
zAvratos на правильном пути
Регистрация: 09.10.2011
Сообщений: 10
Популярность: 21
Сказал(а) спасибо: 69
Поблагодарили 10 раз(а) в 9 сообщениях
 
По умолчанию Re: Простейшая привязка приложения к железу

у меня не получилось привязать ..мини прогу..делал всё по инструкции!
________________
Цитата:
Сообщение от trevis258Посмотреть сообщение
И фрост против мазая как ты против него без читов. Фрост мазая не видит ни как.

  Ответить с цитированием
Старый 23.03.2012, 23:40   #12
 Разведчик
Аватар для _ziza_
 
_ziza_ скоро будет известен_ziza_ скоро будет известен_ziza_ скоро будет известен
Регистрация: 16.09.2011
Сообщений: 25
Популярность: 260
Сказал(а) спасибо: 0
Поблагодарили 4 раз(а) в 4 сообщениях
 
По умолчанию Re: Простейшая привязка приложения к железу

это заблуждение.
GetVolumeInformation возвращает серийный номер тома.
Который легко меняется на любой тк не привязан к железу (записан в первых секторах).
И может сменится после форматирования

Вот вам первоисточник
[Ссылки могут видеть только зарегистрированные пользователи. ]
  Ответить с цитированием
Старый 19.04.2012, 04:18   #13
 Разведчик
Аватар для Vandal91
 
Vandal91 скоро будет известенVandal91 скоро будет известенVandal91 скоро будет известенVandal91 скоро будет известенVandal91 скоро будет известен
Регистрация: 29.10.2010
Сообщений: 26
Популярность: 420
Сказал(а) спасибо: 152
Поблагодарили 74 раз(а) в 65 сообщениях
Отправить сообщение для Vandal91 с помощью Skype™
 
По умолчанию Re: Простейшая привязка приложения к железу

Попробовал привязать к самой простой проге - не работает. Тема еще актуальна или это моя ошибка?
  Ответить с цитированием
Пользователь сказал cпасибо:
†HaNТeR† (24.04.2012)
Старый 19.08.2012, 00:45   #14
Заблокирован
 Сержант
Аватар для [Na`Vi]DendI
 
[Na`Vi]DendI на правильном пути[Na`Vi]DendI на правильном пути
Регистрация: 06.06.2012
Сообщений: 131
Популярность: 102
Сказал(а) спасибо: 141
Поблагодарили 131 раз(а) в 78 сообщениях
Отправить сообщение для [Na`Vi]DendI с помощью Skype™
 
По умолчанию Re: Простейшая привязка приложения к железу

Возможно ли написать dll-ку и юзать на c# ? Слышал что все хорошие привязки,защиты написаны на асме но юзаются в других языках.
  Ответить с цитированием
Старый 30.03.2013, 13:53   #15
 Сержант
Аватар для avi2011class
 
avi2011class сломал счётчик популярности :(avi2011class сломал счётчик популярности :(avi2011class сломал счётчик популярности :(avi2011class сломал счётчик популярности :(avi2011class сломал счётчик популярности :(avi2011class сломал счётчик популярности :(avi2011class сломал счётчик популярности :(avi2011class сломал счётчик популярности :(avi2011class сломал счётчик популярности :(avi2011class сломал счётчик популярности :(avi2011class сломал счётчик популярности :(
Регистрация: 02.09.2012
Сообщений: 123
Популярность: 32496
Сказал(а) спасибо: 393
Поблагодарили 116 раз(а) в 89 сообщениях
Отправить сообщение для avi2011class с помощью Skype™
 
По умолчанию Re: Простейшая привязка приложения к железу

А какая функция дает серийник процессора? не подскажете? Понимаю, что не в тему.
________________
  Ответить с цитированием
Ответ

Метки
c++, getvolumeinformation, привязка, приложения, простейшая, winapi, winmain, железу, часть


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Заявление об ответственности / Список мошенников

Часовой пояс GMT +4, время: 16:46.

Пишите нам: [email protected]
Copyright © 2024 vBulletin Solutions, Inc.
Translate: zCarot. Webdesign by DevArt (Fox)
G-gaMe! Team production | Since 2008
Hosted by GShost.net