Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.02.03;
Скачать: CL | DM;

Вниз

Где в реестре (ветка) прописать параметр (триального периода) ?   Найти похожие ветки 

 
Stepper   (2008-01-04 16:36) [0]

Собственно Сабж! И корректно ли сея реализация ограничений?


 
engine ©   (2008-01-04 16:40) [1]

HKLM/Software/MySuperProga/TrialDate


 
Anatoly Podgoretsky ©   (2008-01-04 16:49) [2]

> Stepper  (04.01.2008 16:36:00)  [0]

Любая ветка


 
Stepper   (2008-01-04 17:11) [3]


> Anatoly Podgoretsky ©   (04.01.08 16:49) [2]


И корректна ли сея реализация ограничений?


 
Iskander ©   (2008-01-04 17:18) [4]

HKLM/Software/MySuperProga/TrialDate
Этой веткой сможет пользоваться (на редактирование) только админ компа. Обычных юзерей такие ограничения достают сильно


 
Stepper   (2008-01-04 17:35) [5]


> Iskander ©   (04.01.08 17:18) [4]


и....


 
{RASkov} ©   (2008-01-04 17:37) [6]

> [5] Stepper   (04.01.08 17:35)
> и....

А подумать?
Здесь есть несколько вариантов продолжения "и...." :)


 
Stepper   (2008-01-04 17:46) [7]


> {RASkov} ©   (04.01.08 17:37) [6]


Сарказм тут не уместен! Я могу хоть всю ветку ключами закидать а суть и последствия? Я совета прошу и напутствия на нужную волну а не ... Сорри за ИМХО!


 
{RASkov} ©   (2008-01-04 17:55) [8]

> [7] Stepper   (04.01.08 17:46)
> Сарказм тут не уместен!

Нисколько....и никакого.

> Я могу хоть всю ветку ключами закидать а суть и последствия?

Твое право..... но и твой минус.

> Я совета прошу и напутствия на нужную волну а не ...

Понимаешь.... посоветовать-то тут уже посоветовали..... осталось подумать....
Более того вариантов решения сабжа - море.....
Ты вопросы конкретнее задавай.... и не обижайся :)


 
Stepper   (2008-01-04 17:59) [9]


> {RASkov} ©   (04.01.08 17:55) [8]


Не в коей мере ;) Я и сам знаю что вариантофф море! но лютьшее не сорить в реестре а тайно скрыть свой ключеГГ :))) Спс за советы!


 
{RASkov} ©   (2008-01-04 18:11) [10]

> [9] Stepper   (04.01.08 17:59)

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


 
Stepper   (2008-01-04 18:22) [11]


> {RASkov} ©   (04.01.08 18:11) [10]


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


А вот тут поподробнее! Что и как?


 
engine ©   (2008-01-04 18:23) [12]

> [11] Stepper   (04.01.08 18:22)

xor


 
Kolan ©   (2008-01-04 18:24) [13]

> Что и как?

Что что ключь свой, xor"ом зашифруй и радуйся :)


 
{RASkov} ©   (2008-01-04 18:36) [14]

> [11] Stepper   (04.01.08 18:22)

Просто небольшой наглядный пример:
var F: File; Dt: TDate;
begin
 AssignFile(F, "File.Dat");
 Rewrite(F, 1);
 Dt:=Date;
 BlockWrite(F, Dt, 8);
 CloseFile(F);
 Dt:=0;
 Reset(F,1);
 BlockRead(F, Dt, 8);
 ShowMessage(DateToStr(Dt));
 CloseFile(F);
end;
А теперь глянь, что у тебя в файле File.Dat - вот скажи, ты вот разберешься? :)
А если еще и подвергнуть Dt шифрованию перед записью..... вообще туши свет будет :) или вместе с Dt хранить еще чего нибудь, например:
type TTrialData = record
     Dt: TDate;
     RunCount: Integer;
    end;
и все это записать
Rewrite(F, 1);
BlockWrite(F, Dt, SizeOf(TTrialData));
//где Dt: TTrialData;
Можно не обязательно хранить в реестре, хотя и там есть бинарный тип.... а можно в файле, как в данном примере....


 
{RASkov} ©   (2008-01-04 19:01) [15]

> [11] Stepper   (04.01.08 18:22)

А вот такой вариант шифрования:

Dt: TDate = 8 байт

type TCodeDate = record
     A,B,C,D,E,F,G,H: Byte;
    end;
cd: TCodeDate;

раскладываешь Dt по байтам в cd и перетасовываешь между аbcdefgh и записываешь разом cd либо в файл, либо в реестр (WriteBinary)...
при чтении собираешь байты вместе по определенному заранее алгоритму (по тому каким растосовал их)....
Я правда сам не пользовался этим..... вот только, что придумал :) Может и вообще лажа полная :(


 
Reindeer Moss Eater ©   (2008-01-04 19:05) [16]

Пиши в любое место, куда есть права писать.
Ну что бы насмешить всех только один раз (самим методом защиты).
Если же писать что-то в HKLM, то есть шанс насмешить всех аж дважды.
:))


 
Stepper   (2008-01-04 19:05) [17]


> {RASkov} ©   (04.01.08 18:36) [14]


Глянул! `Cг@ :)


 
Stepper   (2008-01-04 19:24) [18]


> Reindeer Moss Eater ©   (04.01.08 19:05) [16]


Для настроек уникальных для компьютера:

HKEY_LOCAL_MACHINE\SOFTWARE\наименование твоей организации\имя программы

Для настроек уникальных для пользователя в пределах одного компьютера:

HKEY_CURRENT_USER\SOFTWARE\наименование твоей организации\имя программы

:)


 
Loginov Dmitry ©   (2008-01-04 21:40) [19]

> Где в реестре (ветка) прописать параметр (триального периода)
> ?


Глянь, как это делает ORiEN. По мне, так вполне достойное решение. И реестр не засоряет, и найти заветный параметр без соответствующего ПО практически невозможно.


 
Stepper   (2008-01-04 22:32) [20]


> Loginov Dmitry ©   (04.01.08 21:40) [19]


Нус вот что он и делает...

(HKCU, HKLM, HKCR, HKCC)

CLSID
*\shellex\ContextMenuHandlers
Identities
Control Panel\Desktop\WindowMetrics
SOFTWARE\Microsoft\Windows\CurrentVersion
SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CLSID


 
Loginov Dmitry ©   (2008-01-04 23:10) [21]

> Нус вот что он и делает...
>
> (HKCU, HKLM, HKCR, HKCC)
>
> CLSID
> *\shellex\ContextMenuHandlers
> Identities
> Control Panel\Desktop\WindowMetrics
> SOFTWARE\Microsoft\Windows\CurrentVersion
> SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CLSID


Это лишь список предлагаемых веток, где программа может спрятать свой счетчик. Догадайся тут найти что-либо! А фишка - в генерации имени переменной (на основании сведений о программе). Получается уникальный набор символов (например "6C32D4ACEEC2"), чье назначение поймет далеко не каждый.


 
Stepper   (2008-01-04 23:22) [22]


> Loginov Dmitry ©   (04.01.08 23:10) [21]


Я использую сей код (триала)
...
var
 reg: tregistry;
 n: integer;
begin
 reg := tregistry.create;
 with reg do
 begin
   openkey("Software", true);
   openkey("StepSoft", true);
   if valueexists("key") then // первый запуск?
   begin // - нет
     n := readinteger("key") - 1;
     if n >= 0 then
       writeinteger("key", n)
   end else begin // - да, первый запуск
     n := 10; // число запусков
     writeinteger("key", n)
   end;
   free
 end;
 if n > 0 then
...

Как зашифровать переменную n (10)  и потом прочитать ее, применительно сего кода? Или что в нем можно переделать? (в коде)


 
Reindeer Moss Eater ©   (2008-01-04 23:48) [23]

Как зашифровать переменную

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


 
{RASkov} ©   (2008-01-04 23:59) [24]

> [22] Stepper   (04.01.08 23:22)
> Как зашифровать переменную n (10)

Хотя бы пиши ее не строкой (WriteInteger пишет строкой), а бинарно....

Не обращай внимания на отговорщиков [23] :) Или у тебя такая уж серьезная программа, что все кинуться ее ломать???


 
Stepper   (2008-01-05 00:14) [25]


> {RASkov} ©   (04.01.08 23:59) [24]


Нет программа простенькая, но использует не плохой алгоритм преобразования (редких) данных! вот и решил я просто триальчик прикрутить и себя поразвивать!

Не кто ни куды не кинется, кому енто надо? :)))


 
Reindeer Moss Eater ©   (2008-01-05 00:18) [26]

Никто не кинется.
В таком случае не пофик ли куда писать и как шифровать?
:)


 
Stepper   (2008-01-05 07:15) [27]


> {RASkov} ©   (04.01.08 23:59) [24]


WriteBinary - не пролазиет :(


 
Stepper   (2008-01-05 09:54) [28]

Пишет но не вычитает!
...
var
reg: tregistry;
n: integer;
begin
reg := tregistry.create;
with reg do
begin
  openkey("Software", true);
  openkey("StepSoft", true);
  if valueexists("key") then // первый запуск?
  begin // - нет
    n := ReadBinaryData("key", n, 1) -1;
    if n >= 0 then
      ReadBinaryData("key", n, 1)
  end else begin // - да, первый запуск
    n := 10; // число запусков
    ReadBinaryData("key", n, 1)
  end;
  free
end;
if n > 0 then
...


 
{RASkov} ©   (2008-01-05 10:18) [29]

> [28] Stepper   (05.01.08 09:54)
> n := ReadBinaryData("key", n, 1) -1;

А вот почитать бы сначала справочку, а?)

var FReg: TRegistry; N: Integer;
begin
 FReg:=TRegistry.Create;
 FReg.OpenKey("Software\MyKey", True);
 FReg.ReadBinaryData("Bin", N, SizeOf(N));
 if N=0 then N:=30 else DEC(N);
 FReg.WriteBinaryData("Bin", N, SizeOf(N));
 FReg.CloseKey;
 FReg.Free;
 Caption:=IntToStr(N);
end;


 
{RASkov} ©   (2008-01-05 10:21) [30]

> FReg.ReadBinaryData("Bin", N, SizeOf(N));
> if N=0 then N:=30 else DEC(N);

Перед чтением явно N прировняй к 0 (нулю)

Но проверку лучше оставь свою.... т.е. по существованию ключа.... иначе когда счетчик дойдет до ноля, то следующий старт будет опять с 30 :)


 
{RASkov} ©   (2008-01-05 10:31) [31]

> Но проверку лучше оставь свою.... т.е. по существованию ключа....

А лучше вообще чего-нибудь придумай пооригинальнее..... иначе срок триала(кряк) будет решен путем удаления данного ключа)


 
Anatoly Podgoretsky ©   (2008-01-05 12:13) [32]

> Stepper  (04.01.2008 17:46:07)  [7]

Для начала пара аксиом

1. От триала защиты не существует.
2. Нет таких секретных мест в компьютере, которые не были бы доступны пользователю
3. Пользователю не надо ломать голову и искать куда ты записал, он просто воспользуется парой мониторов - файла и реестра.
4. В подобных случая вопрос возникает только у начинающих.
5. Аксиома 5 - не тебе надо защищаться, а пользователю
6. Пользователя надо любить и платить ему, чтобы он поставил твою программу, с такими сомнительными вещами.


 
Anatoly Podgoretsky ©   (2008-01-05 12:15) [33]

> Stepper  (04.01.2008 17:46:07)  [7]

Совет простой, устанавливай сам, тогда есть возможность защититься от мониторов.


 
TStas ©   (2008-01-05 16:46) [34]

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


 
Riply ©   (2008-01-05 17:30) [35]

>  [32] Anatoly Podgoretsky ©   (05.01.08 12:13)

Аксиома 5 - самая главная (imho) и заслуживает быть первой :)


 
@!!ex ©   (2008-01-05 17:39) [36]

> Как её ни шифруй, а в итоге все сведется к одному единственному
> ифу, который запатчить пара пустяков.

Это вам так кажется.


 
@!!ex ©   (2008-01-05 18:32) [37]

Procedure MainInit; //Инициализирует важные параметры системы... Например, создает контролы... Соответственно если эту процедуру не вызвать, приложение просто упадет. Мы знаем, по какому адресу находится эта процедура.

var
 linkMainInit: procedure();

var
 A,B,C,D:byte;  //Четыре значения, полученные после дешифровки ключа.
begin
 linkMainInit:=Pointer(A*1000+B-100+C*10+D);  //Если ключ правильный, мы получаем адрес процедуры, если не правильный, получаем AV.
 linkMainInit;
end;


Никаких ифов... Элементарно, и взламывать заколебешься...


 
Reindeer Moss Eater ©   (2008-01-05 22:24) [38]

Эта чепуха лечится подкладыванием верных данных в реестр/файл.


 
{RASkov} ©   (2008-01-05 23:10) [39]

> Эта чепуха лечится подкладыванием верных данных в реестр/файл.

А что, в наше время, не возможно сломать? Как говорится - ломать не делать)
:)


 
Reindeer Moss Eater ©   (2008-01-06 01:12) [40]

Элементарно, и взламывать заколебешься...

Запятая не там стоит.
:)


 
Германн ©   (2008-01-06 01:34) [41]

Раз уж пошла такая пьянка, вспомню мою любимую контору Turbo Power Software. У них была библиотека OnGard, которая:
OnGuard is a library to create demo versions of your Borland Delphi &
C++Builder applications. Ccreate demo versions that are time-limited,
feature-limited, limited to a certain number of uses, or limited to a
certain # of concurrent network users.

Поскольку сейчас она доступна с исходниками, то тот кто желает реализовать что-то подобное, может кое-что почерпнуть из этих исходников.


 
@!!ex ©   (2008-01-06 08:31) [42]

> [38] Reindeer Moss Eater ©   (05.01.08 22:24)

LOL. И как же вы узнаете верные данные?
Это уже должен быть не тривиальный уровень владения дизасемблером и знание ассемблера на высоком уровне.
Иначе как узнать, какой адрес должен получиться в результате...

Мне кажется вы бредите.... У вас все элементарно, но КАК вы не объясняете..
Да и своего варианта защиты не предлагаете.



Страницы: 1 2 вся ветка

Текущий архив: 2008.02.03;
Скачать: CL | DM;

Наверх




Память: 0.58 MB
Время: 0.025 c
11-1182867408
Vladimir Kladov
2007-06-26 18:16
2008.02.03
Версия 2.71


2-1199472258
Васька
2008-01-04 21:44
2008.02.03
Получить все элементы с контролла


1-1193237925
JanMihail
2007-10-24 18:58
2008.02.03
Контекстное меню для Компакт-диска


15-1196883191
Rouse_
2007-12-05 22:33
2008.02.03
Традиционное предновогоднее ММР


2-1199996509
bagos
2008-01-10 23:21
2008.02.03
comobj excel