Вниз
Скачать: CL | DM;

Необходимо защитить или зашифровать число от его изменения   Найти похожие ветки 

← →
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 вся ветка

Скачать: CL | DM;



Память: 0.55 MB
Время: 0.024 c
2-1133904191
Kot
2005-12-07 00:23
2005.12.25
Перемещение по DBGrid


4-1129894565
shc
2005-10-21 15:36
2005.12.25
Отключение Alt+Tab под ХР


10-1110505984
val_5
2005-03-11 04:53
2005.12.25
Поддерживает ли об ект интерфейс ?


14-1133434723
TUser
2005-12-01 13:58
2005.12.25
СТРИМ


2-1133770782
inew
2005-12-05 11:19
2005.12.25
Оптимизация клиент-серверного приложения.




   Наверх