ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > ИНФО > Статьи
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

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

Репутация: 25
Отправить сообщение для F1reF0x с помощью ICQ
По умолчанию 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
rent0n
Участник форума
Регистрация: 25.12.2005
Сообщений: 146
Провел на форуме:
123219

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

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

  #3  
Старый 03.03.2006, 19:27
Аватар для Nova
Nova
OpenVPN.CC
Регистрация: 15.07.2005
Сообщений: 1,599
Провел на форуме:
7670961

Репутация: 1034


Отправить сообщение для Nova с помощью ICQ
По умолчанию

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

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

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

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



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



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


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




ANTICHAT.XYZ