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 есть какие-либо константы, которые никак нельзя будет изменить, но их можно будет применить в самое программе? спасибо заранее.


Lamer@fools.ua   (2005-11-29 20:26:00) [1]

>> Digitman ©   (29.11.05 18:21) [42]

IMHO, "je" - это слишком просто. Я бы предпочёл в качестве борьбы с кулхацкерами что-то вроде "jmp eax", где EAX основывается на GetCRC32.


AlexBurton   (2005-11-29 18:31:00) [2]


> Digitman ©   (29.11.05 18:21) [42]

спасибо, значит копаю в сторону CRC32.


Digitman   (2005-11-29 18:21:00) [3]


> AlexBurton   (29.11.05 18:10) [40]


ерундой ты занялся с

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

в крит.участке своего кода размести

lea eax, путь_к_исп_файлу_твоего проекта
call GetCRC32 //подсчитать контр.сумму
cmp eax, контр_сумма
je ...

собери исп.файл, подсчитай его CRC32, запиши результата в "контр_сумма"

большинству "двинутых юзеров" это отобъет охоту курочить твой исп.модуль


AlexBurton   (2005-11-29 18:13:00) [4]

а та, что с трояном, она на самом деле текущей 6-й версии, только номер у нее поменяли.


AlexBurton   (2005-11-29 18:10:00) [5]

> что за функция ?
function GetVerNum: Byte;
begin
Result := Length(user32) - SizeOf(Application.Handle);
end;

> твоя собственная ?
да, пока топик разростался, написал ее)

> приводи код ..
привел выше)

почему именно я к версии прицепился. потому что версию с трояном распространяют как новую версию 7. Вот теперь пытаюсь выпустить обновленную версию 6, которая не будет позволять так легко менять номер версии.


AlexBurton   (2005-11-29 18:06:00) [6]


> Digitman ©   (29.11.05 18:02) [37]

верно, потому и попросил помощи ...
в любом случае спасибо.


Digitman   (2005-11-29 18:05:00) [7]


> функцией получения версии


что за функция ?

твоя собственная ?

приводи код ..


Digitman   (2005-11-29 18:02:00) [8]


> AlexBurton   (29.11.05 17:51) [33]


речь, в конечном итоге, идет о защите от запуска несанкционированно измененного кода приложения.

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

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


AlexBurton   (2005-11-29 17:59:00) [9]


> Кто мешает исправить его на 7?

потому собственно и извращаюсь с функцией получения версии и затеял весь этот топик ;(


Ega23   (2005-11-29 17:58:00) [10]


> const VersionNumber: Integer = 6;


Кто мешает исправить его на 7?


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

а VersionNumber вывожу и использую при запуске и в пункте о программе. вот они или он ее и меняет.


AlexBurton   (2005-11-29 17:51:00) [12]


> Digitman ©

да, так
const VersionNumber: Integer = 6;

только до этого я никаких проверок "if ..." не делал, и сейчас вот думаю как бы засунуть номер версии поглубже в код и чтобы была с трудом доставаема.
посоветуй чего-нибудь.


AlexBurton   (2005-11-29 17:48:00) [13]


> Digitman ©   (29.11.05 17:42) [29]

достаточно будет одного человека, имеющего понятие об отладчиках/дизасм-ах. если он может писать трои и встраивать их в exe-шник самой проги, то думаю он знает как и чего. В общем идею я понял.


Digitman   (2005-11-29 17:46:00) [14]


> Есть у меня число, которое хранится в виде константы


типа ты объявил ее а-ля

const VersionNumber: Integer = 1;

и типа далее по алгоритму используешь ее а-ля

if VersionNumber = 1 then ..

так что ли ? или как ? поясни в коде ..


AlexBurton   (2005-11-29 17:43:00) [15]

AVP дай бог у 1/3 пользователей, а сеть огромная. и не уверен что эта 1/3 обновляет базы.


Digitman   (2005-11-29 17:42:00) [16]


> AlexBurton   (29.11.05 17:32) [23]


да что значит "версия программы" ?!!

если в твоем коде туеву хучу раз встречается маш.код, соответствующий, например, маш.инструкции

cmp РОН, некое_значение

какой идиот в форме продвинутого юзера, понятия не имеющего ни о каких дизассемблерах/отладчиках, дотумкает, что ИМЕННО в ЭТИХ инструкциях ты проверяешь какую-то там свою "версию" ?

ту хрень, что ты и твой юзер видите в "свойствах PE-модуля", по примитивным причинам не рассматриваем - надо быть крайне хитрозадым Кулибиным, чтобы задав такой вопрос вести речь о стандартных возможностях хранения инф-ции о версии в ресурсах РЕ-модуля


Ega23   (2005-11-29 17:40:00) [17]


> короче, походу просто нет способа ;(


Есть. AVP.


AlexBurton   (2005-11-29 17:39:00) [18]

короче, походу просто нет способа ;(


AlexBurton   (2005-11-29 17:38:00) [19]

мда)) че делать то тогда?) выключить оптимизацию?


Ega23   (2005-11-29 17:35:00) [20]


> AlexBurton   (29.11.05 17:32) [23]


А ты не подумал, что можно обойти вызов GetVerNum?  

:-))))))))


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

Наверх

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