Форум: "Прочее";
Текущий архив: 2006.03.26;
Скачать: [xml.tar.bz2];
ВнизОптимальный вариант проверки подлинности Найти похожие ветки
← →
I am (2006-02-27 20:14) [0]Здравствуйте. Стоит задача - сделать так, чтобы программа запускалась только на определенном компьютере. Посоветуйте, каким образом это лучше реализовать или подскажите ссылки на статьи по этой тематике. Буду очень признателен.
ЗЫ: я считаю, что вариантом решения будет привязка программы к уникальному идентификатору процессора или другого харда. Как вы считаете, насколько эта мера действенна?
← →
Anatoly Podgoretsky © (2006-02-27 20:42) [1]Продать ее вместе с компьютером. Называется это OEM
← →
I am (2006-02-27 20:58) [2]Я не совсем корректно сформулировал вопрос. Сорри. Проблема заключается скорее в защите от копирования...
← →
Ы (2006-02-27 21:17) [3]Брось фигней заниматься, ни будет копирования прога умрет так и не родившись. Пусть копируют, тот кто платит, заплатит всегда, а тот кто ворует ни за что не заплатит, но может помочь в продвижении программы. Кроме того вряд ли сейчас можно что то сделать оригинальное, наверняка будет существовать альтернатива которая копируется :)
← →
Anatoly Podgoretsky © (2006-02-27 21:19) [4]I am (27.02.06 20:58) [2]
От копирования защиты нет.
← →
I am (2006-02-28 05:30) [5][3] продвижение программы в данном случае не столь важный аспект, нежели "защита от копирования"
[4] =) излагаю иначе.
Принцип действия программы несколько схож с работой инсталлятора.
1. Пользователь посылает нам запрос по e-mail"y, оплачивает продукт.
2. Мы высылаем ему модуль, который получает индивидуальные сведения о ПК (ID процессора или что-либо еще), данные шифруются и передаются нам.
3. Мы генерируем код для данной машины и высылаем его пользователю.
4. Он вводит код в программу, если он "правильный", то программа запускается.
Внимание. вопрос: как вы считаете, какие данные следует получать о компьютере (п.2)?
← →
QwertyKz © (2006-02-28 05:56) [6]
> Принцип действия программы несколько схож с работой инсталлятора.
>
> 1. Пользователь посылает нам запрос по e-mail"y, оплачивает
> продукт.
> 2. Мы высылаем ему модуль, который получает индивидуальные
> сведения о ПК (ID процессора или что-либо еще), данные шифруются
> и передаются нам.
> 3. Мы генерируем код для данной машины и высылаем его пользователю.
>
> 4. Он вводит код в программу, если он "правильный", то программа
> запускается.
> Внимание. вопрос: как вы считаете, какие данные следует
> получать о компьютере (п.2)?
Лучше уж серийник материнской платы брать.
А по сабжу все это обойти не составит никаких проблем.
Лучше воспользуйтесь каким-нибудь протектором
www.cracklab.ru - скачать можно здесь, и вопросы по сабжу тоже можно задать там :)
← →
Сергей М. © (2006-02-28 10:53) [7]
> Он вводит код в программу, если он "правильный", то программа
> запускается
Если программа того стОит, всегда найдется тот кто выкинет из исп.кода твоей программы проверку вводимого юзером кода авторизации, после чего твоя программа будет работать на любом компьютере безо всяких ограничений.
← →
tesseract © (2006-02-28 12:47) [8]Ключ защиты стоит 10-15 уе. www.alladin.ru, www.guradant.ru
← →
Суслик © (2006-02-28 17:45) [9]Либо аппаратная защита (см. [8]), либо готовая софтовая.
Свой продукт защищаем через guardant.
Искал в сети, вроде говорят, что взломали. Я смотрел, да отвязана от ключа, но работает неверно ибо глубокая интеграция защиты.
← →
tesseract © (2006-02-28 17:57) [10]
> Свой продукт защищаем через guardant. Искал в сети, вроде
> говорят, что взломали. Я смотрел, да отвязана от ключа,
> но работает неверно ибо глубокая интеграция защиты.
Да Glasha делала эмулятор. Но только первых Fidus/Stealth и то если не используешь встроенных функций. Если есть что, заапгрейдь комплект разработчика, там довольно много недавно появилось.
← →
I am (2006-02-28 18:29) [11]To [7]: вопро стоял ни в том, найдется ли тот, кто взломает, а в том, каким образом реализовать защиту. Проблема скорее в том, чтобы защитить программу от взлома, так называемым, "средним классом".
To [8]: www.guradant.ru не грузится =(
To [9]: не подскажете ссылочку на статьи или исходники на эту тематику?
← →
isasa © (2006-02-28 18:39) [12]I am (28.02.06 05:30) [5]
Мы высылаем ему модуль, который получает индивидуальные сведения о ПК (ID процессора или что-либо еще), данные шифруются и передаются нам.
Нормальный админ должен зарезать такую технологию на корню, даже после фразы:
"Ей Богу, мы шифруем и передаем только это!".
← →
kaZaNoVa © (2006-02-28 18:40) [13]По сабжу - проверяй 7-15 каких-нить хардвера-ID, какие найдешь, шифруй, и если изменятся более 3-х параметров то считай прогу скопировали - не запускаться..
а если тока 1 изменится (юзер сменил винт например) - то всё ок - и пользователем проблем нет и тебе защита ..
имхо
← →
kaZaNoVa © (2006-02-28 18:42) [14]isasa © (28.02.06 18:39) [12]
вполне нормальная практика .. тока имхо должна сама триальная программа генерить некий код, который шифруется чем-то ассиметричным .. (RSA например)
← →
Джо © (2006-02-28 18:42) [15]> I am
Если планируется работа на ОС не ниже XP (или 2k?), то могу поррекомендовать WMI как средство получения информации о системе. Довольно много можно нарыть, кажется.
← →
Гарри Поттер © (2006-02-28 20:03) [16]> www.guradant.ru не грузится =(
Если прочитать ссылку можно понять что написана с ошибкой ;-)
http://www.guardant.ru/
← →
I am (2006-03-01 06:56) [17]2 Джо [15]: хм, а можно ссылку на какую-либо информацию по этой теме, плиз?
← →
konrads (2006-03-01 09:21) [18]MAC адрес сетевухи то что надо думаю
На форме Button1 и Memo1
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
const
IPHelper = "iphlpapi.dll";
MAX_ADAPTER_NAME_LENGTH = 256;
MAX_ADAPTER_DESCRIPTION_LENGTH = 128;
MAX_ADAPTER_ADDRESS_LENGTH = 8;
type
time_t = Longint;
StrAddr = Array[1..3] of string;
// Структуры для выполнения GetAdaptersInfo
PIP_MASK_STRING = ^IP_MASK_STRING;
IP_ADDRESS_STRING = record
S: array [0..15] of Char;
end;
IP_MASK_STRING = IP_ADDRESS_STRING;
PIP_ADDR_STRING = ^IP_ADDR_STRING;
IP_ADDR_STRING = record
Next: PIP_ADDR_STRING;
IpAddress: IP_ADDRESS_STRING;
IpMask: IP_MASK_STRING;
Context: DWORD;
end;
PIP_ADAPTER_INFO = ^IP_ADAPTER_INFO;
IP_ADAPTER_INFO = record
Next: PIP_ADAPTER_INFO;
ComboIndex: DWORD;
AdapterName: array [0..MAX_ADAPTER_NAME_LENGTH + 3] of Char;
Description: array [0..MAX_ADAPTER_DESCRIPTION_LENGTH + 3] of Char;
AddressLength: UINT;
Address: array [0..MAX_ADAPTER_ADDRESS_LENGTH - 1] of BYTE;
Index: DWORD;
Type_: UINT;
DhcpEnabled: UINT;
CurrentIpAddress: PIP_ADDR_STRING;
IpAddressList: IP_ADDR_STRING;
GatewayList: IP_ADDR_STRING;
DhcpServer: IP_ADDR_STRING;
HaveWins: BOOL;
PrimaryWinsServer: IP_ADDR_STRING;
SecondaryWinsServer: IP_ADDR_STRING;
LeaseObtained: time_t;
LeaseExpires: time_t;
end;
TForm1 = class(TForm)
Button1: TButton;
Memo1: TMemo;
// При помощи данной функции мы определим наличие сетевых интерфейсов
// на локальном компьютере и информацию о них
function Dim2Hex(what:array of byte;len:integer):string;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
InterfaceInfo, TmpPointer: PIP_ADAPTER_INFO;
IP: PIP_ADDR_STRING;
Len: ULONG;
implementation
{$R *.dfm}
function GetAdaptersInfo(pAdapterInfo: PIP_ADAPTER_INFO; var pOutBufLen: ULONG): DWORD; stdcall; external IPHelper;
function TForm1.Dim2Hex(what:array of byte;len:integer):string;
var i : integer;
b : byte;
begin
Result:="";
for i:=0 to len-1 do begin
b:=what[i];
Result := Result+inttohex(b,2)+".";
end;
Delete(Result,Length(Result),1);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
// Читаем все IP адреса со всех присутствующих
// в системе сетевых интерфейсов
// Смотрим сколько памяти нам требуется?
if GetAdaptersInfo(nil, Len) = ERROR_BUFFER_OVERFLOW then
begin
// Берем нужное кол-во
GetMem(InterfaceInfo, Len);
try
// выполнение функции
if GetAdaptersInfo(InterfaceInfo, Len) = ERROR_SUCCESS then
begin
// Перечисляем все сетевые интерфейсы
TmpPointer := InterfaceInfo;
repeat
// перечисляем все IP адреса каждого интерфейса
IP := @TmpPointer.IpAddressList;
repeat
Memo1.Lines.Append("IP Addr = " + IP.IpAddress.S + " MAC Addr = " + Dim2Hex(TmpPointer.Address,TmpPointer.AddressLength) + " NET Card = " + TmpPointer.Description);
// Writeln(Format("%s - %s - %s",
// [IP.IpAddress.S, Dim2Hex(TmpPointer.Address,TmpPointer.AddressLength),TmpPointer.Description]));
IP := IP.Next;
until IP = nil;
TmpPointer := TmpPointer.Next;
until TmpPointer = nil;
end;
finally
// Освобождаем занятую память
FreeMem(InterfaceInfo);
end;
end;
end;
end.
← →
Джо © (2006-03-01 09:23) [19]> [17] I am (01.03.06 06:56)
> 2 Джо [15]: хм, а можно ссылку на какую-либо информацию
> по этой теме, плиз?
Да в MSDN есть. И в Сети полно примеров даже на Делфи, поищи, у меня готовых нет (не интересовался).
← →
Суслик © (2006-03-01 12:40) [20]Если пошла такая пьянка, то спрошу про guardant.
Знает ли кто-нибудь как ломается защита, если программа защищена guardant?
Один вариант я знаю - это эмулятор. Но я использую зашитые алгоритмы, которые взломать практически нереально (100 мест вызова, многие из которых происходят крайне редко и при определенном стечении обстоятельств).
Такое можно взломать, если править бинарник, убирая проверку на корню.
Как вы думаете, делает ли кто-нибудь так? Или идут по пути эмуляции?
В случае эмуляции мне бояться нечего - повторю, что съэмулировать все все равно не получится. А вот если правят бинарник, тут уж ничего не попишешь. Другой вопрос, делают ли так...
Страницы: 1 вся ветка
Форум: "Прочее";
Текущий архив: 2006.03.26;
Скачать: [xml.tar.bz2];
Память: 0.51 MB
Время: 0.052 c