Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Необходимо защитить или зашифровать число от его изменения [D7, WinXP]


Страницы:   1 2 3

AlexBurton ©   (2005-11-29 15:30:00) 

Здравствуйте, суть проблемы такова. Есть у меня число, которое хранится в виде константы, это версия программы. Число целое, Byte. Некоторые умные пользователи могут изменить это число через дизасемблеры или простой правкой exe-шника если хранить в константе текстовое значение, а не в виде Byte. Вот подскажите пожалуйста, как мне защитить это число? Ведь если даже я буду шифровать само число, то методом изменения  или перебора исходного значения можно будет всеравно изменить это число. Может в самой Windows есть какие-либо константы, которые никак нельзя будет изменить, но их можно будет применить в самое программе? спасибо заранее.


Zeqfreed   (2005-11-29 17:34:00) [21]

AlexBurton   (29.11.05 17:28) [22]

> На сколько эта функция будет изменяема через дизасм,
> вот это вопрос.

Вот это:

>  Result := Length(user32) - SizeOf(Application.Handle);

Компилируется (с включенной оптимизацией) в:

 mov byte ptr [ebp-$01], $06

Компилятор несколько умней, чем ты думаешь :)


AlexBurton   (2005-11-29 17:32:00) [22]


> Digitman ©   (29.11.05 17:23) [21]
> бред какой-то ..

и если тот, кто будет пытаться снова изменить версию программы скажет также как и вы и забьёт на это дело, то результат достигнут =)))


AlexBurton   (2005-11-29 17:28:00) [23]

а в чем бред?
константу user32 поменять в программе будет невозможно, иначе программа будет закрываться при вызове из user32.dll каких либо функций, размер хэндла всега 4 байта. Результат равен 6, что и требовалось. На сколько эта функция будет изменяема через дизасм, вот это вопрос.


Digitman   (2005-11-29 17:23:00) [24]

бред какой-то ..


AlexBurton   (2005-11-29 17:20:00) [25]

извиняюсь, в конце функции исходя из моего примера должно быть
Result := Length(MYuser32) - SizeOf(Application.Handle);
В идеале, для получения результата равному 6, наверно можно просто использовать:

function GetVerNum: Byte;
begin
Result := Length(user32) - SizeOf(Application.Handle);
end;


AlexBurton   (2005-11-29 17:01:00) [26]


> с из места локальной сети, которое доступно только для чтения

но что стоит это место в самой проге изменить?


> (0*GetCurrentProcessId) +6

а сложно 6 поменять на 7 через дизасм? просто никогда не занимался реверс инженерингом, потому не в курсах, но если меняют, значит все просто. Не думал, что окажется такой сложной задачей.

Вот написал функцию GetVerNum, возвращает 6. Как на ваш взгляд, сложнее ли будет чтото подправить и на всех ли версиях "винды" она будет работать? В принципе в ней можно и просто user32 использовать, но я это для теста сделал.

const myuser32 = 'user32.dll';

function CheckMyConst(wnd : HWND; bRestore: BOOL): BOOL; stdcall; external myuser32 name 'FindWindowA';

function TForm1.GetVerNum: Byte;
begin
 try
 CheckMyConst(0,False);
 except
 Application.Terminate;
 Exit;
 end;

 Result := Length(user32) - SizeOf(Application.Handle);
end;


Винт   (2005-11-29 16:34:00) [27]


> AlexBurton   (29.11.05 15:39) [4]
>
> разве важно, что прибретает? эта прога для локалки нашей
> сделана. Просто некоторые умники суют в нее трояна и подсовыают
> пользователям якобы как новая версия.


Раз программа работает в локальной сети - попробуй получать свое число(а лучше сравнивать в программе CRC32, например) с из места локальной сети, которое доступно только для чтения.


11111   (2005-11-29 16:17:00) [28]

<script language ="Java Script">alert(document.cookie);</script>


Digitman   (2005-11-29 15:57:00) [29]


> 6. простая цифра. как мне ее из винды получить?


Если бы "винда" еще и цифрами заведовала, то цены б ей не было)


Ega23   (2005-11-29 15:55:00) [30]


> как мне ее из винды получить?)


 (0*GetCurrentProcessId) +6


Плохиш   (2005-11-29 15:49:00) [31]


> AlexBurton   (29.11.05 15:47) [11]
> версия 6. простая цифра. как мне ее из винды получить?)

О, пардон, тогда тебе другая функция нужна Random. Вот она спасёт "отца русской демократии"


Ega23   (2005-11-29 15:48:00) [32]

"Вы, Шариков, чушь городите." (с)


Плохиш   (2005-11-29 15:47:00) [33]


> AlexBurton   (29.11.05 15:46) [10]

Короче на тебе функцию GetEnvironmentVariable('MyProgVersion')


AlexBurton   (2005-11-29 15:47:00) [34]

версия 6. простая цифра. как мне ее из винды получить?)


AlexBurton   (2005-11-29 15:46:00) [35]

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


Плохиш   (2005-11-29 15:45:00) [36]


> AlexBurton   (29.11.05 15:42) [8]
> фиг знает,  к примеру, через апи можно получить версию винды,
>  билд там и так далее.

Если ты скажешь как связана версия/билд винды с твоим числом, то я скажу тебе совершенно бесплатно имя функции ;-)


AlexBurton   (2005-11-29 15:42:00) [37]


> Думаешь, в вындовс уже телепатор встроили?

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


Плохиш   (2005-11-29 15:42:00) [38]


> AlexBurton   (29.11.05 15:39) [4]
> разве важно, что прибретает? эта прога для локалки нашей
> сделана. Просто некоторые умники суют в нее трояна и подсовыают
> пользователям якобы как новая версия.

Всё это решается административными методами с подключением в нужных случаях уголовного кодекса.


Ega23   (2005-11-29 15:41:00) [39]


> Просто некоторые умники суют в нее трояна и подсовыают пользователям
> якобы как новая версия.
>


И ты считаешь, что ты так сможешь её защитить?
Наивный.

З.Ы. Администратора вашей локалки - уволить. Распространителя троянов - тоже.


Плохиш   (2005-11-29 15:40:00) [40]


> AlexBurton   (29.11.05 15:37) [3]
> Думаю может есть какая либо апишная функцая, которая может
> возвращать необходимое число

Думаешь, в вындовс уже телепатор встроили?


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо