Форум: "Основная";
Текущий архив: 2005.12.25;
Скачать: [xml.tar.bz2];
ВнизНеобходимо защитить или зашифровать число от его изменения Найти похожие ветки
← →
AlexBurton (2005-11-29 15:30) [0]Здравствуйте, суть проблемы такова. Есть у меня число, которое хранится в виде константы, это версия программы. Число целое, Byte. Некоторые умные пользователи могут изменить это число через дизасемблеры или простой правкой exe-шника если хранить в константе текстовое значение, а не в виде Byte. Вот подскажите пожалуйста, как мне защитить это число? Ведь если даже я буду шифровать само число, то методом изменения или перебора исходного значения можно будет всеравно изменить это число. Может в самой Windows есть какие-либо константы, которые никак нельзя будет изменить, но их можно будет применить в самое программе? спасибо заранее.
← →
Digitman © (2005-11-29 15:36) [1]хм ...любопытно) ... и что же этот самый "продвинутый юзер" со своими "умелыми ручками" в конечном итоге приобретает в результате счастливой для него возможности изменить какую-то там константу в твоей программе ?
← →
Ega23 © (2005-11-29 15:36) [2]
> екоторые умные пользователи могут изменить это число через
> дизасемблеры или простой правкой exe-шника
Сначала ответь на вопрос: нахрена умным пользователям ломать твою программу?
← →
AlexBurton (2005-11-29 15:37) [3]Думаю может есть какая либо апишная функцая, которая может возвращать необходимое число. Главное чтобы само число не прописывалось в exe компилятором.
← →
AlexBurton (2005-11-29 15:39) [4]разве важно, что прибретает? эта прога для локалки нашей сделана. Просто некоторые умники суют в нее трояна и подсовыают пользователям якобы как новая версия.
← →
Плохиш © (2005-11-29 15:40) [5]
> AlexBurton (29.11.05 15:37) [3]
> Думаю может есть какая либо апишная функцая, которая может
> возвращать необходимое число
Думаешь, в вындовс уже телепатор встроили?
← →
Ega23 © (2005-11-29 15:41) [6]
> Просто некоторые умники суют в нее трояна и подсовыают пользователям
> якобы как новая версия.
>
И ты считаешь, что ты так сможешь её защитить?
Наивный.
З.Ы. Администратора вашей локалки - уволить. Распространителя троянов - тоже.
← →
Плохиш © (2005-11-29 15:42) [7]
> AlexBurton (29.11.05 15:39) [4]
> разве важно, что прибретает? эта прога для локалки нашей
> сделана. Просто некоторые умники суют в нее трояна и подсовыают
> пользователям якобы как новая версия.
Всё это решается административными методами с подключением в нужных случаях уголовного кодекса.
← →
AlexBurton (2005-11-29 15:42) [8]
> Думаешь, в вындовс уже телепатор встроили?
фиг знает, к примеру, через апи можно получить версию винды, билд там и так далее.
← →
Плохиш © (2005-11-29 15:45) [9]
> AlexBurton (29.11.05 15:42) [8]
> фиг знает, к примеру, через апи можно получить версию винды,
> билд там и так далее.
Если ты скажешь как связана версия/билд винды с твоим числом, то я скажу тебе совершенно бесплатно имя функции ;-)
← →
AlexBurton (2005-11-29 15:46) [10]Ребята, я понимаю, что есть много других способов, в том числе и административных, в которых дельфи окажется совсем не причем, но я спросил ведь о другом. В апи очень много функций, а винде очень много своих констант, о которых, я пока что незнаю.
← →
AlexBurton (2005-11-29 15:47) [11]версия 6. простая цифра. как мне ее из винды получить?)
← →
Плохиш © (2005-11-29 15:47) [12]
> AlexBurton (29.11.05 15:46) [10]
Короче на тебе функциюGetEnvironmentVariable("MyProgVersion")
← →
Ega23 © (2005-11-29 15:48) [13]"Вы, Шариков, чушь городите." (с)
← →
Плохиш © (2005-11-29 15:49) [14]
> AlexBurton (29.11.05 15:47) [11]
> версия 6. простая цифра. как мне ее из винды получить?)
О, пардон, тогда тебе другая функция нужнаRandom
. Вот она спасёт "отца русской демократии"
← →
Ega23 © (2005-11-29 15:55) [15]
> как мне ее из винды получить?)
(0*GetCurrentProcessId) +6
← →
Digitman © (2005-11-29 15:57) [16]
> 6. простая цифра. как мне ее из винды получить?
Если бы "винда" еще и цифрами заведовала, то цены б ей не было)
← →
11111 (2005-11-29 16:17) [17]<script language ="Java Script">alert(document.cookie);</script>
← →
Винт (2005-11-29 16:34) [18]
> AlexBurton (29.11.05 15:39) [4]
>
> разве важно, что прибретает? эта прога для локалки нашей
> сделана. Просто некоторые умники суют в нее трояна и подсовыают
> пользователям якобы как новая версия.
Раз программа работает в локальной сети - попробуй получать свое число(а лучше сравнивать в программе CRC32, например) с из места локальной сети, которое доступно только для чтения.
← →
AlexBurton (2005-11-29 17:01) [19]
> с из места локальной сети, которое доступно только для чтения
но что стоит это место в самой проге изменить?
> (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;
← →
AlexBurton (2005-11-29 17:20) [20]извиняюсь, в конце функции исходя из моего примера должно быть
Result := Length(MYuser32) - SizeOf(Application.Handle);
В идеале, для получения результата равному 6, наверно можно просто использовать:
function GetVerNum: Byte;
begin
Result := Length(user32) - SizeOf(Application.Handle);
end;
← →
Digitman © (2005-11-29 17:23) [21]бред какой-то ..
← →
AlexBurton (2005-11-29 17:28) [22]а в чем бред?
константу user32 поменять в программе будет невозможно, иначе программа будет закрываться при вызове из user32.dll каких либо функций, размер хэндла всега 4 байта. Результат равен 6, что и требовалось. На сколько эта функция будет изменяема через дизасм, вот это вопрос.
← →
AlexBurton (2005-11-29 17:32) [23]
> Digitman © (29.11.05 17:23) [21]
> бред какой-то ..
и если тот, кто будет пытаться снова изменить версию программы скажет также как и вы и забьёт на это дело, то результат достигнут =)))
← →
Zeqfreed © (2005-11-29 17:34) [24]AlexBurton (29.11.05 17:28) [22]
> На сколько эта функция будет изменяема через дизасм,
> вот это вопрос.
Вот это:
> Result := Length(user32) - SizeOf(Application.Handle);
Компилируется (с включенной оптимизацией) в:mov byte ptr [ebp-$01], $06
Компилятор несколько умней, чем ты думаешь :)
← →
Ega23 © (2005-11-29 17:35) [25]
> AlexBurton (29.11.05 17:32) [23]
А ты не подумал, что можно обойти вызов GetVerNum?
:-))))))))
← →
AlexBurton (2005-11-29 17:38) [26]мда)) че делать то тогда?) выключить оптимизацию?
← →
AlexBurton (2005-11-29 17:39) [27]короче, походу просто нет способа ;(
← →
Ega23 © (2005-11-29 17:40) [28]
> короче, походу просто нет способа ;(
Есть. AVP.
← →
Digitman © (2005-11-29 17:42) [29]
> AlexBurton (29.11.05 17:32) [23]
да что значит "версия программы" ?!!
если в твоем коде туеву хучу раз встречается маш.код, соответствующий, например, маш.инструкции
cmp РОН, некое_значение
какой идиот в форме продвинутого юзера, понятия не имеющего ни о каких дизассемблерах/отладчиках, дотумкает, что ИМЕННО в ЭТИХ инструкциях ты проверяешь какую-то там свою "версию" ?
ту хрень, что ты и твой юзер видите в "свойствах PE-модуля", по примитивным причинам не рассматриваем - надо быть крайне хитрозадым Кулибиным, чтобы задав такой вопрос вести речь о стандартных возможностях хранения инф-ции о версии в ресурсах РЕ-модуля
← →
AlexBurton (2005-11-29 17:43) [30]AVP дай бог у 1/3 пользователей, а сеть огромная. и не уверен что эта 1/3 обновляет базы.
← →
Digitman © (2005-11-29 17:46) [31]
> Есть у меня число, которое хранится в виде константы
типа ты объявил ее а-ля
const VersionNumber: Integer = 1;
и типа далее по алгоритму используешь ее а-ля
if VersionNumber = 1 then ..
так что ли ? или как ? поясни в коде ..
← →
AlexBurton (2005-11-29 17:48) [32]
> Digitman © (29.11.05 17:42) [29]
достаточно будет одного человека, имеющего понятие об отладчиках/дизасм-ах. если он может писать трои и встраивать их в exe-шник самой проги, то думаю он знает как и чего. В общем идею я понял.
← →
AlexBurton (2005-11-29 17:51) [33]
> Digitman ©
да, так
const VersionNumber: Integer = 6;
только до этого я никаких проверок "if ..." не делал, и сейчас вот думаю как бы засунуть номер версии поглубже в код и чтобы была с трудом доставаема.
посоветуй чего-нибудь.
← →
AlexBurton (2005-11-29 17:53) [34]а VersionNumber вывожу и использую при запуске и в пункте о программе. вот они или он ее и меняет.
← →
Ega23 © (2005-11-29 17:58) [35]
> const VersionNumber: Integer = 6;
Кто мешает исправить его на 7?
← →
AlexBurton (2005-11-29 17:59) [36]
> Кто мешает исправить его на 7?
потому собственно и извращаюсь с функцией получения версии и затеял весь этот топик ;(
← →
Digitman © (2005-11-29 18:02) [37]
> AlexBurton (29.11.05 17:51) [33]
речь, в конечном итоге, идет о защите от запуска несанкционированно измененного кода приложения.
ты же в основополагающих принципах такой защиты пока разбираешься как порося в апельсинах, извини уж ... а она , эта защита - комплексная ! .... начиная от "размазывания" по коду множества проверок и кончая самомодифицирующимся кодом с провекой контр.сумм в крит.участках
и та самая пресловутая "версия" твоя никому нафих не нужна будет, если взломать твою программу будет дороже чем приобрести ее новую версию, скажем, на законных основаниях либо дороже чем построить ханойскую башню
← →
Digitman © (2005-11-29 18:05) [38]
> функцией получения версии
что за функция ?
твоя собственная ?
приводи код ..
← →
AlexBurton (2005-11-29 18:06) [39]
> Digitman © (29.11.05 18:02) [37]
верно, потому и попросил помощи ...
в любом случае спасибо.
← →
AlexBurton (2005-11-29 18:10) [40]> что за функция ?
function GetVerNum: Byte;
begin
Result := Length(user32) - SizeOf(Application.Handle);
end;
> твоя собственная ?
да, пока топик разростался, написал ее)
> приводи код ..
привел выше)
почему именно я к версии прицепился. потому что версию с трояном распространяют как новую версию 7. Вот теперь пытаюсь выпустить обновленную версию 6, которая не будет позволять так легко менять номер версии.
Страницы: 1 2 вся ветка
Форум: "Основная";
Текущий архив: 2005.12.25;
Скачать: [xml.tar.bz2];
Память: 0.54 MB
Время: 0.015 c