Как защитить программу delphi

Я видел много статей, которые рассказывают о защите дельфи программ от таких горе-крэкеров, как, например, я, но они не были достаточно конкретны. В этой статье я попытаю дать всем желающим реальный код для защиты Ваших программных продуктов. Здесь собраны советы со всего РуНета!

Защита от Restorator, ResHacker, Exescope и др.: достаточно вставить несколько раз к событиям на нажатие кнопок или на событие формы OnCreate, такой код.

var str:string; i:integer; str:=’њњ|xњxxxaњфxэxкxщгмxфxйxт’; for i:=1 to length(str) do str:=Chr(Ord(str) xor $AABDEE66); form1.memo1.lines.text:=str;

В примере, строка str-заксоренная нормальная строка с текстом. Чтобы получать заксоренные строки из нормальных, рекомендую создать простую программу-X0RER: Бросьте на форму 2 memo, 1 edit и кнопку. Для кнопки:

procedure TForm1.Button1Click(Sender: TObject); var i:integer; s:string; begin S:=memo1.text; for i:=1 to length(S) do s:=Chr(Ord(S) xor strtoint(edit1.text)); memo2.Text:=s; end;

урок на делфи 27. три способа закрыть программу.

Всё, пишете в memo1 нормальную строку, в Edit1 число, на которое будет производиться XOR. Нажимаем кнопку и в memo2 заксоренный текст. А в программе делаете взамообратную процедуру, указанную выше. Главное, что всякие Рестораторы не распознают в формах нечитабельные символы, не относящиеся к алфавитным и циферным знакам.

Поэтому при открытии в Рестораторе формы с заКСОРенными строчками он круто обламается. Попробуйте сами! Что самое удивительное, компилятор нисколько не ругается, что мы вставляем в string несимвольные данные.

Защита от отладчиков: что же сделать, чтобы обнаружить SoftIce, TRW2000. Предлагается использовать обнаружение во внешних криптерах, типа ASProtect, TElock, SVKP, BopCrypt и др. Но если крякер снимает «навесную защиту», то Вы лишаетесь анти-отладочных приемов! Как же этого избежать? Да просто вставить эти приемы в тех местах, например, где используются функциональные ограничения.

ПРИЧЕМ, ОЧЕНЬ ВАЖНО, НИКОГДА не вставляйте ССЫЛКУ на процедуру проверки отладчика, а вставляйте целый код проверки снова и снова. Например:

. ТАК НЕ НАДО ДЕЛАТЬ.

Procedure SoftICEActive:boolean; begin . код проверки . End; procedure TForm1.OnlyForReggedUserButtonClick(Sender: TObject); begin if SoftIceActive=true then begin ShowMessage(’SoftIce Active’); Halt; end else begin . нормальный код . end;

. ТАК НАДО НАДО ДЕЛАТЬ.

procedure TForm1.OnlyForReggedUserButtonClick(Sender: TObject); begin //код проверки активности SoftICE if SoftIceActive=true then begin ShowMessage(’SoftIce Active’); Halt; end else begin . нормальный код . end;

Фишка в том, что крякер замучается патчить прогу. А вот сам код обнаружения SoftICE:

function SoftIce95: boolean; var hfile: Thandle; begin result:=false; hFile:=CreateFileA(’\.SICE’, GENERIC_READ or GENERIC_WRITE, FILE_SHARE_READ or FILE_SHARE_WRITE, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0); if(hfile<>INVALID_HANDLE_VALUE) then begin CloseHandle(hfile); result:=true; end; end;

Микропрограммное обеспечение Autocom/Delphi || Решение проблемы

2 Способ (универсальный). Для этого использутся точная копия функции NmSymIsSoftICELoaded из NMTRANS.DLL, которой пользуется «родной» Symbol Loader (loader32.exe), хотя, при желании, можно пользоватся непосредственно функциями из NMTRANS.DLL (последняя входит в сам SoftICE). Думаю, сообразите, как пользоваться этим кодом, можно как отдельным юнитом.

unit Security; interface uses Windows; const nmtrans = ’NMTRANS.DLL’; function IsSoftICELoaded: BOOL; stdcall; function NmSymIsSoftICELoaded: BOOL; stdcall; function DevIO_ConnectToSoftICE: THANDLE; stdcall; implementation function NmSymIsSoftICELoaded; external nmtrans name ’NmSymIsSoftICELoaded’; function DevIO_ConnectToSoftICE; external nmtrans name ’DevIO_ConnectToSoftICE’; function NmSymIsSoftICELoaded: BOOL; var hf: THandle; begin Result := TRUE; hf := DevIO_ConnectToSoftICE(); if hf<>INVALID_HANDLE_VALUE then CloseHandle(hf) else Result := FALSE; end; function DevIO_ConnectToSoftICE: THANDLE; const si_9x : PChar = ’\.SICE’#0#0; si_nt : PChar = ’\.NTICE’#0#0; begin Result := CreateFileA(si_9x, $80000000, $3, nil, $3, $80, $0); if Result<>INVALID_HANDLE_VALUE then Exit; Result := CreateFileA(si_nt, $80000000, $3, nil, $3, $80, $0); if Result<>INVALID_HANDLE_VALUE then Exit; SetLastError($0A6580001); end; function IsSoftICELoaded: BOOL; begin Result := NmSymIsSoftICELoaded; end; end.

3 Способ. Ассемблерный код (не советую)

00000000 : B4 43 MOV AH, 43h 00000002 : CD 68 INT 68h 00000004 : 66 3D 86 F3 CMP AX,0F386h 00000008 : 75 06 JNE 00000010 0000000A : ; Активен 0000000E : EB 04 JMP 00000012 00000010 : ; Не Активен

Этот способ следует использовать только в операционных системах Win9x.

В недалеком будущем наваяю еще подобную статейку, только о регистрациионной защите ваших программ, что более актульней, чем защита от отладчиков.

Источник: www.dotfix.net

Как защитить программу delphi

Всем привет. Необходимо защитить свою программу по такому алгоритму:

1. При первом запуске программа собирает серийники компа (материнская плата, биос, жесткий диск), полученные данные шифрует и передаёт итоговые данные пользователю программы. Пользователь программы в свою очередь передает этот ключ мне.
2. Я принимаю ключ, дешифрую его и получаю серийные номера железа у пользователя. Далее на основе этих серийных номеров мы создаем новый ключ активации и пересылаю его пользователю программы;
3. Далее пользователь вводит ключ активации, полученный от нас, программа его дешифрует тем же алгоритмом, что и у нас и получает из ключа активации серийные номера железа. Далее полученные серийные номера железа он сравнивает с серийными номерами реального железа. Если они совпадают, то программа работает, если нет, то закрывается.

Необходимо готовое решение в виде платного SDK, поддерживающее Delphi XE, например как IonWorx SerialShield.

Точнее мне необходим ваш совет: какие альтернативы есть у SerialShield, какой библиотекой лучше всего защитить программу? желательно, чтобы решение было одобрено ФСТЭК. Но не обязательно.

Последний раз редактировалось Dimasio; 07.08.2013 в 18:46 .
Участник клуба
Регистрация: 12.09.2012
Сообщений: 1,030
Как я понял мы защищаемся от активаторов(keygen не сработает)?

Что нужно программисту: Компьютер, Среда программирование, Воображение, Прямые руки, Мозги, Знания этой среды программирования.
Программист-это профессия, а программирование-это моё хобби.

Белик Виталий 🙂
Регистрация: 23.07.2007
Сообщений: 57,792
Что именно делает программа? С какой целью ее защищаешь?

I’m learning to live.
Форумчанин
Регистрация: 16.04.2007
Сообщений: 225

подскажу что только в твоем случае нужно использовать как включах ассиметричный алгоритм, чтобы нельзя было получить исходную формулу из кода. а дальше читай на вики

Участник клуба
Регистрация: 24.05.2008
Сообщений: 1,453
или посмотрите этот пост + (или)
Форумчанин
Регистрация: 27.03.2012

Читайте также:
Какая программа использует порт

Сообщений: 438

Необходимо защитить свою программу по такому алгоритму

А другие алгоритмы принимаете в рассмотрение? А это это не самый надежный.
Регистрация: 06.08.2007
Сообщений: 2,239

Если пользователь захочет обновить/заменить железо, данные не совпадут, и *опа будет. От такого способа давно отказались.

Форумчанин
Регистрация: 10.02.2009
Сообщений: 815

Если пользователь захочет обновить/заменить железо, данные не совпадут, и *опа будет. От такого способа давно отказались.

А какой нынче способ используют? (я надеюсь без HASP)
Участник клуба
Регистрация: 12.09.2012
Сообщений: 1,030
А какой нынче способ используют? (я надеюсь без HASP)

Записываешь кое-какие данные(рандомные) в ключи реестра и от туда ссчитываешь. Или генерируешь код активации в программе и хранишь в реестре. При проверке, от туда его проверяешь.

Что нужно программисту: Компьютер, Среда программирование, Воображение, Прямые руки, Мозги, Знания этой среды программирования.
Программист-это профессия, а программирование-это моё хобби.

Форумчанин
Регистрация: 30.09.2009
Сообщений: 724

Проще всего защищать программы работающие с сетью. Так как ключи от них можно хранить на своем сервере. Я, например, храню ключи длиной 64 символа. Рэндомные. Это полностью защищает программу от кейгенов. Сервер делает работу с ключом однопоточной. То есть не дает подключения если с ключом уже работают. (Программа каждые несколько минут оповещает сервер, что она работает с ключом).

Это позволяет пользователю использовать продукт на любой машине. Что бы защищаться от внедрения в exe можно скачивать с сервера какую нибудь необходимую информацию. На моем примере, это библиотека с константами, которую сервер шифрует при помощи пользовательского ключа, а программа на своей стороне расшифровывает эту библиотеку и грузит ее в память, не сохраняя на диск.

Получается довольно надежно. Кул хацкерам для взлома придется написать свой сервер + разгадать метод шифрования и расшифровать библиотеку. Добавляем к этому особый алгоритм генерации ответов сервера, который внешне кажется случайным и, основываясь на проверке этих ответов, размазываем кое какие не очевидные сюрпризы по программе. Время которое придется потратить на взлом будет непомерным, мало кто решит с этим возиться.

В планах порабощение вселенной.

Источник: www.programmersforum.ru

Защита программ от взлома

Эта статья посвящена достаточно актуальной в настоящее время тематике — защите программ от взлома и нелегального копирования. Этой теме посвящено много статей, одна из наиболее интересных (из тех, которые попались мне) — статья «Защита shareware-программ» Владимира Каталова в Компьютерре Online#240. Он привел ряд советов по написанию shareware программ и я не хочу повторяться — сходите, почитайте.

Рассмотрим некоторые тонкости организации защиты на достаточно популярном примере — предполагаем, что программа защищена некоторым кодом (серийным номером, паролем), который сообщается пользователю после соблюдения им определенных условий. До регистрации в этой программе заблокирован ряд каких либо полезных функций, используется надоедливая реклама или ограничен строк работы.

После ввода этого кода производится его проверка и при положительном исходе проверки программа начинает нормально работать. По неизвестной мне причине в большинстве современных программ данная защита сделана однообразно и для ее снятия необходимо 10-15 минут. В этой статье я постараюсь поделиться опытом в построении систем защиты. Могу сразу предупредить — хорошему хакеру противостоять практически бесполезно, да и не нужно — при желании любая защита может быть взломана, это вопрос времени.

Инструментарий хакера. Современный хакер имеет в своем арсенале набор разнообразных утилит для взлома. Их можно подразделить на несколько категорий

  • Отладчики. Позволяют прерывать выполнение программы при достижении заранее заданных условий, производить пошаговое выполнение программы, изменять содержимое памяти и регистров и т.п. . Наиболее популярным, удобным и мощным является отладчик SoftICE, который при достаточно примитивном интерфейсе обладает приличными возможностями и весьма стабильно работает.
  • Дизассемблеры. Производят дизассемблирование программы для дальнейшего изучения полученного кода. Один из наиболее популярных — IDA. От дизассемблера достаточно легко защититься — зашифровать или заархивировать программу. Тогда дизассемблируется только архиватор или кодировщик.
  • Средства мониторинга. Это набор утилит, отслеживающих операции с файлами, реестром, портами и сетью.
  • Средства пассивного анализа программы. Показывают разную информацию о программе — извлекают ресурсы, показывают связи, используемые библиотеки. Классический пример — утилита DEPENDS.EXE из комплекта Visual Studio. Она показывает, какие библиотеки используются программой и какие функции импортируются.
  • Прочие утилиты. Их великое множество (можно найти на диске типа «Все для хакера», причем в изобилии). Это разнообразные редакторы, анализаторы .

Наиболее популярны следующие программы мониторинга :

FileMon — утилита, позволяющая вести мониторинг всех операций с файлами. Имеет удобный фильтр, может сохранять отчет в файле. Поэтому нет смысла делать «секретные» файлы где-нибудь в Windows/System — их элементарно найти.

RegMon — аналог FileMon, только ведется мониторинг всех операций с реестром. Аналогично файлам, бессмысленно создавать в реестре «секретные» ключи — они сразу бросаются в глаза.

PortMon — мониторинг работы с портами ввода/вывода

TCP_VIEW — монитор соединений по TCP-IP

RegUtils — набор утилит для контроля за реестром — делает копии реестра, позволяет сравнивать копии и просматривать изменения.

Утилиты типа FileMon могут резко упростить взлом программы — легко определить место, в котором программа обращается к указанному файлу или ключу реестра.

Основы построения защиты — шаг за шагом

Как ввести регистрационный код. Ввод пароля или регистрационного номера является ответственным делом — хакер постарается отловить адрес памяти, в который будет записан пароль. Затем на обращение по этому адресу ставится точка останова (команда BPM в SoftICE), что позволяет поймать начало процедуры проверки регистрационного кода. Если для ввода используются стандартные элементы ввода Windows, то алгоритм действий хакера можно формализовать и выглядит он примерно так:

  1. Устанавливает точку останова на считывание текста из стандартного элемента ввода (функции GetWindowText, GetGlgItemText модуля KERNEL32)
  2. При вызове этой функции анализируем ее параметры и таким образом определяем, по какому адресу будет размещено считываемое значение и ставим обращение к этой области памяти точку останова. А достоверности определенного адреса легко убедиться — после выполнения функции там появится введенная строка
  3. При срабатывании этой точки останова мы попадаем в анализатор введенного значения и либо делаем генератор регистрационных ключей, либо ломаем процедуру проверки. И то, и другое весьма просто сделать — достаточно только изучить ассемблер и API
Читайте также:
1 с медицина поликлиника как работать в программе

Набор этих действий стандартен и мне не раз попадались подробные руководства типа «Взлом Windows программ — шаг за шагом», ориентированные на продвинутого пользователя.

Рассмотри несколько решений, которые могут затруднить взлом на этом этапе.

Совет _0. Старайтесь как можно меньше применять стандартные функции (особенно API-шные) и компоненты VCL. Так что Assembler, Assembler и еще раз Assembler .

Сущность этого совета надеюсь очевидна — современные дизассемблеры умеют распознавать стандартные процедуры высокоуровневых языков, а API — вообще отдельный разговор — SoftICE обладает изумительной возможностью — загружать символьные имена для любых указанных библиотек (особенно для KERNEL32.DLL) — отладка резко упрощается, т.к. мы видим имена вызываемых функций и можем ставить точки останова на вызов функций по их имени.

Совет _1. Применяйте нестандартный способ ввода пароля.

Наипростейший путь — написать свой визуальный компонент для ввода регистрационного кода. Он конечно должен будет обрабатывать события от клавиатуры, но момент считывания кода нельзя поймать избитыми методами. Это уже что-то, но есть второй способ взлома, основанный на поиске введенного кода в памяти. Для этого в SoftICE есть удобная команда «S стартовый адрес L длина ‘образец'» , которая позволяет найти введенное значение в памяти.

Совет _2. Не храните введенный код в одном месте !

Совет _3. Не храните введенный код открытым текстом !

Итак, что же следует сделать. Для начала необходимо завести в программе 5-10 переменных типа STRING и после ввода кода переписать введенное значение в них. Делать это лучше всего не в одном месте, а распределить по программе. Таким образом поиск даст кучу адресов, по которым будет находиться введенный код.

Я в таком случае поступаю так — по таймеру создаю в динамической памяти новую строковую переменную, пишу в нее код. Затем на следующем срабатывании таймера создаю новую переменную, переписываю в нее код, а старую уничтожаю. При определенном навыке можно заполонить память значениями введенного кода и сделать поиск почти бесполезным. Причем такое копирование можно совместить с проверкой кода или эмуляцией этой проверки. Затем с эти строками неплохо поделать какие-либо операции — сравнить с чем-нибудь .

Советы 3 и 1 можно объединить — создать свой компонент, который позволит вводить код нестандартным способом с его одновременной шифровкой.

Анализ регистрационного кода. Итак, код введен и приняты меры для того, чтобы его было непросто найти (хотя найти то его можно, но это время, навык . ). Теперь следующий шаг — анализ. Поэтому сразу совет:

Совет _4. Ни в коем случае не анализируйте код сразу после его ввода.

Чем дальше ввод кода от его анализа, тем лучше. Самое разумное — после ввода кода поблагодарить пользователя за сотрудничество и сообщить, что со временем будет выполнена регистрация программы. А анализ кода произвести, например, через 1-2 минуты в совершенно другом месте программы.

Совет _5. Не проверяйте код только в одном месте и не пишите для проверки функцию.

Достаточно найти и отключить эту проверку, и защита взломана. Если проверок несколько, они разные и распределены по программе, то взлом затрудняется.

Совет _6. Не проверяйте пароль одним алгоритмом.

Рекомендуется разработать 2-3 алгоритма проверки, например 1-2 цифры должны делиться на 3, а 3-7 наложенные по какому-либо алгоритму на имя пользователя должны дать в сумме 4. Эти две проверки осуществляем в различных местах с достаточно большим временным разносом — взломав первый метод хакер не будет догадываться о существовании еще нескольких, которые проявятся со временем.

Совет _7. Ни в коем случае не предпринимайте никаких действий после проверки. По неизвестной причине большинство программ выглядят примерно так

IF NOT(SuperRegCodeCheck) then Begin ShowMessage(‘Неверный код, дальнейшая работа невозможна’); halt; end;

В примере некая процедура проверяет код и при несовпадении предпринимает активные действия, которые буквально кричат «вот она где защита !!». Наилучший шаг — выждать день -два (или хотя бы минут 15). Причем все действия по проверке следует как можно дальше отнести от выдачи сообщений и прочих действий, предпринимаемых при обнаружении неправильного кода.

Совет _8. Отвлекающие маневры.

Кроме реальных функций проверки кода очень неплохо сделать пару бутафорских — они будут вызываться после ввода кода, проводить активные манипуляции с введенным значением, выдавать сообщения о некорректности введенного кода . — т.е. отвлекать внимание от реальной проверки.

Совет _9. Не храните результатов проверки в переменной и не используйте ее для явного ограничения функций незарегистрированной программы.

Классический пример нарушения этого правила

IF NOT(LegalCopy) then ShowMessage(‘Сохранение работает только в зарегистрированной версии’) else SaveFile;

Таким образом элементарный анализ показывает, что переменная LegalCopy хранит результат проверки и поставив на нее точку останова можно выловить саму проверку. Отредактировав это значения в памяти можно временно сделать копию «зарегистрированной»,а установка точки останова на изменение этой переменной выведет на место ее проверки. Да и взлом сводится к тому, что функция проверки кода урезается до двух команд ассемблера:

MOV [адрес LegalCopy], 1 RET

Совет _10. (вытекает из 9) Не храните результатов проверки на диске или в реестре.

Типичная ошибка — выяснили, что копия зарегистрирована и сделали где-нибудь метку. Отловить это достаточно просто (см. описание REGMON и FILEMON). Наилучший способ — сохранить пароль и имя пользователя в том виде, в котором он их ввел. Затем при каждом запуске программы проверять корректность этого кода, но не забывая Совет _11. Ничего не проверяйте сразу при запуске приложения или сразу после считывания сохраненного имени или кода. Помните, что считывание кода и его ввод в окне регистрации идентичны по мерам защиты — дублирование в разных областях памяти, шифрование .

Читайте также:
Что значит условно бесплатная программа

Выводы: мы устроим проверку кода в нескольких местах программы, при этом применим несколько алгоритмов проверки, не будем использовать API.Кроме того, стоит проделать несколько отвлекающих маневров.

Общие советы по защите программ

  • CRC — контрольные суммы. Любой файл, строку или блок данных можно защитить контрольной суммой, которую затем можно рассчитать и сравнить с эталоном. При сравнении с эталоном конечно следует весть осторожно — см. первые 11 советов. Итак, совет 12. Защищайте программы и данные контрольными суммами. Это поможет не только от взлома, но и защитит программы от вируса или внедрения троянца.
  • Применяйте шифровку программ и данных. Очень неплохо сжать программу и данные. Я, например, разработал свой собственный архиватор — RAR-у и ZIP-у он конкуренции не составит, но сжатые им данные разжать очень непросто, придется изрядно повозиться. Да и изменить их проблематично — придется разжать, изменить и сжать.
  • Отлов пошаговой отладки программы. Существует много способов, я в свое время провел целое исследование этого вопроса под DOS, насобирал и придумал не менее 20 методов, но они мало приемлемы под Windows. Самый простой и надежный способ — таймер. При работе программы периодически фиксируем системное время и рассчитываем время работы фрагментов кода между ними. И если 200-400 команд процессора работают 2-3 минуты, то тут есть над чем задуматься.

Совет 14.Не стоит хранить что-либо секретное в файлах или реестре. Работа с файлами или реестром может быть детально запротоколирована и проанализирована, и все тайное станет явным.

Совет 15.Не храните ничего важного открытым текстом, особенно сообщения типа «Это незарегистрированная версия . «, «Введенный пароль не верен . «.
Они для хакера — как для быка красная тряпка, и действительно — находим такое сообщение, ставим точку останова на обращение к участку памяти с этим сообщением и получаем возможность поймать момент выдачи этого сообщения.

Советы по созданию меток для организации ограничения по времени

Защита «ограничение времени работы» состоит в том, что программа каким образом фиксирует момент своего первого запуска и работает установленное время (обычно 20-30 дней). После истечения этого срока программа отказывается запускаться. Как проверить текущую дату я уже где-то тут писал — нестандартным способом, например по дате на файлах реестра или свежесозданном своем файле.

Весь фокус в другом — как зафиксировать на компьютере дату первого запуска (естественно так, чтобы изничтожение программы и ее повторная установка не давали эффекта). Использование «секретных» файлов в системных папках или изменения в существующих файлах легко отловить при помощи FILEMON. Реестр то же отпадает из-за REGMON.

Прочие методы (типа записи в ВООТ сектор . ) тоже неприемлемы — не те времена, по Windows все это не пройдет. Наиболее оригинально (на мой взгляд) прошить дату в саму программу и постоянно обновлять ее на своем сайте (естественно, автоматически). Таким образом отсчет неявно идет от момента скачивания программы с сайта. Есть тут правда и минус — после завершения срока можно повторно скачать эту программу и получить еще 15-20 дней . . С другой стороны это оригинально — пользователю рано или поздно надоест скачивать эту программу и он или откажется от нее, или купит. Но при этом стоит помнить, что программу можно скачать несколько раз и сравнить варианты, выявив, где лежит дата. Поэтому стоит позаботиться о том, чтобы изменился почти весь файл (например, изменить пару опций компилятора)

Советы по формированию регистрационных кодов

Формирование кодов может вестись по следующим основным направлениям:

  • Жестко фиксированные коды, прошитые в программу. Их обычно немного и их огласка сводит защиту к нулю.
  • Некий алгоритм проверки кода. Немного лучше первого, но лишь немного. Возьмите за пример код Windows — его знает любой пользователь
  • Алгоритм проверки кода, использующий имя пользователя. Очевидно, что для каждого имени будет уникальный номер (или номера — их может быть несколько, в зависимости от алгоритма). Это уже лучше, но нелегальное распространение держится на эгоизме зарегистрированных пользователей — ничто не мешает им предать имя/пароль огласке, но тогда хотя бы можно вычислить виновника и заблокировать его код
  • Алгоритм проверки кода, использующий имя пользователя и некоторые уникальные или динамически изменяющиеся параметры, например информацию о компьютере. Это надежно, дает привязку к компьютеру, но в наш век постоянных апгрейдов очень неудобен.
  • On-Line регистрация. Состоит в том, что программа в On-Line связывается с сайтом разработчиков (или компании, осуществляющей продужу софта) и передает туда ревизиты пользователя. В ответ программе передается регистрационная информация. Этот метод может и хорош для ряда программ, но на мой взгляд не выдерживает никакой критики по двум соображениям:
    1. Никто не может гарантировать, что конкретно передаст программа в Инет. А передать она может все, что угодно — параметры компьютера, пароли, любые данные и т.п.
    2. Конкретный пользователь ножет не иметь доступа к Инет. Это особенно важно для программ, работа которых не связана напрямую с Сетью. И зарегистрировать такую программу его практически никто к себе на компьютер не пустит (из соображений п.п. 1)

Рекомендовать тут что-либо бесполезно, но я например использую разновидности метода 3.

Источник: codenet.ru

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru