![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Необходимо защитить или зашифровать число от его изменения [D7, WinXP]
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]
> Думаю может есть какая либо апишная функцая, которая может
> возвращать необходимое число
Думаешь, в вындовс уже телепатор встроили?