Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
2-1134300688
markers
2005-12-11 14:31
2005.12.25
Динамическое создание компонетов


14-1133531149
Александр Иванов
2005-12-02 16:45
2005.12.25
Год спустя...


2-1133941899
vitek
2005-12-07 10:51
2005.12.25
Регистрация DLL


3-1131432001
antoxa2005
2005-11-08 09:40
2005.12.25
Проблема! Если на обном компьютере запись дата сета наход. в реда


2-1133885562
hamster
2005-12-06 19:12
2005.12.25
Оптимизация





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский