![]() |
1. Заголовок или название темы должно быть информативным !
2. Все тексты фрагментов программ должны помещаться в теги [code] ... [/code] или [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ" и используйте ПОИСК !
4. НЕ используйте форум для личного общения!
5. Самое главное - это раздел теоретический, т.е. никаких задач и программ (за исключением небольших фрагментов) - для этого есть отдельный раздел!
![]() |
Славик |
![]()
Сообщение
#1
|
Гость ![]() |
Всем привет. И спасибо за быстрые отклики в предыдущих темах.
Я искал на вашем форуме, но не нашел... по поводу вопроса: Можно ли взломать ".exe" файл созданный на Турбо паскале 7 ? (чтобы был виден алгоритм) Как это можно сделать? Можно ли защитить файл от взлома, и как? Или хотябы, при взломе, "не дать" прочитать часть или весь алгоритм. Просьба обьяснить это попонятней, поскльку я новичок в программировании. |
![]() ![]() |
Romtek |
![]()
Сообщение
#2
|
![]() Знаток ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 303 Пол: Мужской Реальное имя: Роман Репутация: ![]() ![]() ![]() |
Советую прочитать статьи в CRACKL@B: http://www.cracklab.ru/art/
Крутая защита или CRACKL@B CrackMe #1 Исследование защит shareware-программ Там много полезной информации. Чтобы защищать программы, надо немного самому уметь ломать программы. Или хотя бы знать на что обращать внимание, где слабые места и всё такое. Вот ещё тебе кусок, для старта: Код (* Проверка правильности ввода строки *) //uses // SysUtils; Type BoolProc = function (s: string): boolean; PBoolProc = ^BoolProc; Const HashSum: longint = 3412; // это, скорее всего, слабое место var str: string; Function Hash (Key: string): Longint; Var I, Sum:Integer; Begin Sum := 0; For I := 1 To Length (Key) Do Sum := Sum + (Ord (Key[I]) * (1 shl I)); Result := Sum; End; function Passed (ss: string): boolean; begin Result := (Hash (ss) = HashSum); end; procedure TestPsw (f: BoolProc); var b: boolean; begin b := f (str); writeln ('Passed test: ', b); end; var pp: pointer; begin write ('Enter password: '); readln (str); pp := @Passed; // *** Debugging: // writeln (IntToHex(Longint(@Passed),8)); // writeln (IntToHex(Longint(pp),8)); // здесь надо сбить кракера с толку (самый наивный способ :-) asm inc PP //если изменить адрес вызываемой функции проверки, то произойдёт ошибка dec PP //чтобы ошибка не произошла, здесь я возвращаю указатель обратно end; TestPsw (PP); end. В ней наверняка есть слабые места, но для начала сойдёт. -------------------- Romiras HomeLab- материалы и статьи по разработке ПО, моделирование алгоритмов, обработка и анализ информации, нейронные сети, машинное зрение и прочее.
|
![]() ![]() |
![]() |
Текстовая версия | 16.07.2025 23:13 |