Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей.
Здесь обсуждаются безопасность, программирование, технологии и многое другое.
Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
 |

03.03.2006, 03:49
|
|
Познающий
Регистрация: 13.11.2004
Сообщений: 48
Провел на форуме: 91229
Репутация:
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 что бы искала ключи в реестре с сериным номером и ником и автоматически сверяла их, ну это вы уж как нибудь сами подкорректируйте мой шаблон.
|
|
|

03.03.2006, 18:50
|
|
Участник форума
Регистрация: 25.12.2005
Сообщений: 146
Провел на форуме: 123219
Репутация:
36
|
|
на дельфе и под винду, потому Ахтунг. Хотя начинание полезно, поэтому автору + все же
|
|
|

03.03.2006, 19:27
|
|
OpenVPN.CC
Регистрация: 15.07.2005
Сообщений: 1,599
Провел на форуме: 7670961
Репутация:
1034
|
|
Для начала неплохо начинающим пойдёт.... кстати коменды добавь начинающим легче в коде разобраться будет.....
|
|
|

03.03.2006, 19:44
|
|
Новичок
Регистрация: 28.11.2005
Сообщений: 27
Провел на форуме: 115128
Репутация:
1
|
|
А нельзя потделать серийный номер диска С?
|
|
|
|
 |
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|