HOME FORUMS MEMBERS RECENT POSTS LOG IN  
× Авторизация
Имя пользователя:
Пароль:
Нет аккаунта? Регистрация
Баннер 1   Баннер 2
НОВЫЕ ТОРГОВАЯ НОВОСТИ ЧАТ
loading...
Скрыть
Вернуться   ANTICHAT > ИНФО > Статьи
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

Web щит.
  #1  
Старый 03.03.2006, 03:49
F1reF0x
Познающий
Регистрация: 13.11.2004
Сообщений: 48
С нами: 11310341

Репутация: 25
По умолчанию Web щит.

Писалась в полу сонном состоянии, за ошибки не пинать

Web щит.
Защищяем приложения с помощью web авторизации.
Не мне вам говорить что очень не приятно когда плоды твоих трудов продают за пару баксов в вашей же теме о продаже. Как защитится от этого? Мы не софтверные компании, и поэтому нам не надо писать сложные системы защиты, триальные демо версии и прочее, т.к наши программы орентированы на интернет публику, то и авторизацию мы сделаем тоже через интернет. Плюсы этого способа, у нас не будет серийного ключа который генерируется по определённому алогоритму, нам не надо будет прятать регистрационные данные, вобще положительных сторон тут можно найти много, но теперь суть идеи, сейчас мы будем писать программу которая при запуске будет сверять серийный номер диска C с ранее отправленным номером (который хранится на нашем сервере). Begin...
Создаём новый проект или открываем уже существующий. Добавляем в него ещё одну форму и пишем в Form1 (Переименуйте в Main) в событии FromCreate
Form2.ShowModal; // Переименуйте в auth
На форму Auth добавляем 2 Edit (Переименовываем NickEdit и SNEdit) и одну кнопку (AuthButton);
Теперь пишем код для события FromCreate у формы Auth:

// Глобальные перменные
Цитата:
Res: String;
SN: String;

Var
URL: String;
HT: Cardinal;
Begin
Url:= 'www.site.ru/ourscript/' + NickEdit.Text +'.txt';
GetSn;
CreateThread(nil, 128, @GetSource(URL), self, 0, HT);
If Pos(SN, Res) <> 0 then
Begin
Auth.Close;
ShowMessage('Авторизация прошла успешно');
End
Else
Begin
Auth.Close;
MainForm.Close;
End;
End;
Думаю, тут всё понятно и комментарии к коду излишни, теперь нам надо написать ещё 2 функции функцию GetSource и процедуру GetSn благодаря который мы и узнаем серийный номер диска C.

Цитата:
uses WinInet;

function MainForm.GetSource(const Url: string): string;
var
IHWND: HINTERNET;
UHWND: HINTERNET;
Buffer: array[0..1000] of char;
BytesRead: cardinal;
begin
Result:= '';
IHWND:= InternetOpen('Mozilla/4.0 (compatible; MSIE 6.0b; Windows NT 5.0; .NET CLR 1.0.2914)', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
UHWND:= InternetOpenUrl(IHWND, PChar(Url), nil, 0, INTERNET_FLAG_RELOAD, 0);
FillChar(Buffer, SizeOf(Buffer), 0);
repeat
Begin
FillChar(Buffer, SizeOf(Buffer), 0);
InternetReadFile(UHWND, @Buffer, SizeOf(Buffer), BytesRead);
Result := Result + Buffer;
Res:= Result;
End
until BytesRead = 0;
Begin
InternetCloseHandle(IHWND);
End;
end;
Открываем соединение, открываем урл, читаем файл, помещаем в буфер. Тут тоже должо быть всё ясно.
Теперь процедура для получения серийного номера:

Цитата:
Pocedure MainForm.GetSn;
var
lpRootPathName : PChar;
lpVolumeNameBuffer : PChar;
nVolumeNameSize : DWORD;
lpVolumeSerialNumber : DWORD;
lpMaximumComponentLength : DWORD;
lpFileSystemFlags : DWORD;
lpFileSystemNameBuffer : PChar;
nFileSystemNameSize : DWORD;

FSectorsPerCluster: DWORD;
FBytesPerSector : DWORD;
FFreeClusters : DWORD;
FTotalClusters : DWORD;
begin
// Обнуляем переменные
lpVolumeNameBuffer := '';
lpVolumeSerialNumber := 0;
lpMaximumComponentLength:= 0;
lpFileSystemFlags := 0;
lpFileSystemNameBuffer := '';
lpRootPathName:= 'C:';

try
// Получаем память под буффер
GetMem(lpVolumeNameBuffer, MAX_PATH + 1);
GetMem(lpFileSystemNameBuffer, MAX_PATH + 1);
nVolumeNameSize := MAX_PATH + 1;
nFileSystemNameSize := MAX_PATH + 1;
// Получаем серийный номер
GetVolumeInformation( lpRootPathName, lpVolumeNameBuffer,
nVolumeNameSize, @lpVolumeSerialNumber, lpMaximumComponentLength,
lpFileSystemFlags, lpFileSystemNameBuffer, nFileSystemNameSize);
// Присваиваем Sn значение
SN:= IntToHex(HIWord(lpVolumeSerialNumber), 4) + '-' + IntToHex(LOWord(lpVolumeSerialNumber), 4);

finally
// Освобождаем память
FreeMem(lpVolumeNameBuffer);
FreeMem(lpFileSystemNameBuffer);
end;
end;
Теперь в переменной SN содержится серийный номер диска C. Вобще лучше всего, добавить в FormClose запись из NickEdit и SN в реестр идобавить в FromCreate AuthForm что бы искала ключи в реестре с сериным номером и ником и автоматически сверяла их, ну это вы уж как нибудь сами подкорректируйте мой шаблон.
 
Ответить с цитированием

  #2  
Старый 03.03.2006, 18:50
rent0n
Участник форума
Регистрация: 25.12.2005
Сообщений: 146
С нами: 10724214

Репутация: 36
По умолчанию

на дельфе и под винду, потому Ахтунг. Хотя начинание полезно, поэтому автору + все же
 
Ответить с цитированием

  #3  
Старый 03.03.2006, 19:27
Nova
OpenVPN.CC
Регистрация: 15.07.2005
Сообщений: 1,599
С нами: 10958786

Репутация: 1034


По умолчанию

Для начала неплохо начинающим пойдёт.... кстати коменды добавь начинающим легче в коде разобраться будет.....
 
Ответить с цитированием

  #4  
Старый 03.03.2006, 19:44
Lobzik
Новичок
Регистрация: 28.11.2005
Сообщений: 27
С нами: 10762437

Репутация: 1
По умолчанию

А нельзя потделать серийный номер диска С?
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
В 2005 году число dDoS-атак на web сайты возросло на 679% dinar_007 Мировые новости. Обсуждения. 0 02.03.2006 19:47



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


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




ANTICHAT ™ © 2001- Antichat Kft.

×

Создать сделку

Продавец: ник или ID

Название сделки:

Сумма USDT:

Срок сделки, дней:

Кто платит комиссию:

Условия сделки:

После создания сделки средства будут зарезервированы в холде до завершения сделки.

×

Мои сделки

Загрузка...
×

Сделка


Загрузка чата...