IPB
ЛогинПароль:

> Правила раздела!

1. Заголовок или название темы должно быть информативным !
2. Все тексты фрагментов программ должны помещаться в теги [code] ... [/code] или [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ" и используйте ПОИСК !
4. НЕ используйте форум для личного общения!
5. Самое главное - это раздел теоретический, т.е. никаких задач и программ (за исключением небольших фрагментов) - для этого есть отдельный раздел!

2 страниц V < 1 2  
 Ответить  Открыть новую тему 
> Защита от взлома, Есть ли она?
Guest
сообщение 20.02.2005 20:21
Сообщение #21


Гость






Цитата
что за программа, что ее так надежно надо защищать?


Речь о любой программе. Сейчас, или потом, прийдется об этом подумать. Всегда есть вещи, которые не хочется распространять. Допустим, вид шифровки. Допустим, я пишу программу, которая зашифровывает текст.
И ли просто создаю обычный пароль, но внутри программы паскаля.
Или допустим, создаю игру, а в ней внутри одного файла есть много уровней. Перейти на которые можно лишь пройдя предыдущий и плучив пароль.
Масса всего некомерческого. И защита просто необходима.
И речь об обычных программках на Турбо Паскале.

Дело в том, что если защищать, так надежно, иначе нет смысла защищать.
 К началу страницы 
+ Ответить 
Altair
сообщение 20.02.2005 20:55
Сообщение #22


Ищущий истину
******

Группа: Модераторы
Сообщений: 4 824
Пол: Мужской
Реальное имя: Олег

Репутация: -  45  +


Цитата
Допустим, вид шифровки. Допустим, я пишу программу, которая зашифровывает текст.

так нажо писать программу, шифрования текста, так, что бы саму программу не надо было защищать...
Цитата
И защита просто необходима.

Пока я не вижу ничего, что требует защиты..
а если ты пишешь в TP7, то о мощной защите забудь...

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


--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Romtek
сообщение 22.02.2005 1:15
Сообщение #23


Знаток
****

Группа: Пользователи
Сообщений: 303
Пол: Мужской
Реальное имя: Роман

Репутация: -  2  +


Вставляй процедуры в критические места программы. Взято из книги Фаронова "Практика программирования на Турбо Паскаль 7.0".
Код
Procedure TrassBlock1;
 {îá¬α«ß ñ½∩ í«α∞íδ ß Γαáßß¿α«ó¬«⌐
  ß »«¼«Θ∞ε ¼«ñ¿Σ¿¬áµ¿¿ ¬«¼á¡ñδ}
inline(
{@0:}
 $0E/        {push cs}
 $E8/$00/$00/       {call @1}
{@1:}
 $5B/        {pop  bx}
 $83/$EB/$04/       {sub  bx,@1-@0}
 $07/        {pop  es}
 $53/        {push bx}
 $B4/$C3/       {mov  ah,$C3}
 $26/$88/$67/$11/$90/ {mov  es:[bx+@2-@0],ah}
{@2:}
 $90/        {nop}
 $B4/$90/       {mov  ah,$90}
 $26/$88/$67/$11/$90/ {mov  es:[bx+@2-@0],ah}
 $5B);        {pop  bx}
{------------------}
Procedure TrassBlock2;
 {ü«α∞íá ß Γαáßß¿α«ó¬«⌐ ß »«¼«Θ∞ε
  ¬«¡Γα«½∩ óαѼѡ¿}
var
 t1,t2: LongInt;
begin
 t1 := MemL[0:$046C];
 t2 := 0;
 repeat
    while MemL[0:$046C]=t1 do;
    while MemL[0:$046C]<t1+2 do
    inc(t2);
 until t2>=500;
 TrassBlock1;
end;  {TrassBlock2}
В кодировке ДОС


--------------------
Romiras HomeLab- материалы и статьи по разработке ПО, моделирование алгоритмов, обработка и анализ информации, нейронные сети, машинное зрение и прочее.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
SKVOZNJAK
сообщение 22.02.2005 10:19
Сообщение #24


Профи
****

Группа: Пользователи
Сообщений: 930
Пол: Мужской

Репутация: -  11  +


Тема очень интересная и не все способы защиты здесь обсудили. Есть ещё одно направление. Как раз на паскалевских программах оно должно давать неплохую защиту для ограниченного количества информаци. Дизасемблирование не панацея. Дизасемблировать то можно всё, да кто потом в этом разберётся...
Как раз пример такой проги, кошмар асматика. Нужно дизасемблировать и исправить ошибку smile.gif

Сообщение отредактировано: SKVOZNJAK - 22.02.2005 10:20


Прикрепленные файлы
Прикрепленный файл  shara.zip ( 473 байт ) Кол-во скачиваний: 178
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Guest
сообщение 22.02.2005 15:16
Сообщение #25


Гость






Oleg_Z
Цитата
ты напиши, что-то, требующее защиты, тогда поможем защитить.....

Я считаю, что защиты требует создатель, на то что ОН(!) хочет.

Romtek : Спасибо. Попробую...
SKVOZNJAK : ок... : )

Я сейчас перешел на Free Pascal, поэтому, можно и по нему давать советы для защиты. В целом, пересмотрю все уже данные советы, и буду заглядывать сюда еще. Спасибо всем за предыдущие советы и будущие(заранее спасибо) : )
 К началу страницы 
+ Ответить 
SKVOZNJAK
сообщение 22.02.2005 21:46
Сообщение #26


Профи
****

Группа: Пользователи
Сообщений: 930
Пол: Мужской

Репутация: -  11  +


Как продвигается дизасемблирование проги ;)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Romtek
сообщение 22.02.2005 23:19
Сообщение #27


Знаток
****

Группа: Пользователи
Сообщений: 303
Пол: Мужской
Реальное имя: Роман

Репутация: -  2  +


Советую прочитать статьи в 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- материалы и статьи по разработке ПО, моделирование алгоритмов, обработка и анализ информации, нейронные сети, машинное зрение и прочее.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
SKVOZNJAK
сообщение 24.02.2005 15:56
Сообщение #28


Профи
****

Группа: Пользователи
Сообщений: 930
Пол: Мужской

Репутация: -  11  +


Нда, защита, взлом, а в текстовом визуализаторе никто на код взглянуть и не догадался blink.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Digitalator
сообщение 6.03.2005 21:47
Сообщение #29


Бывалый
***

Группа: Пользователи
Сообщений: 247
Пол: Мужской

Репутация: -  1  +


Цитата
Я считаю, что защиты требует создатель, на то что ОН(!) хочет.

Не думаю, что это правильный ход мыслей. Довольно глупо ставить СтарФорс на тетрис, или выпускать виндоуз по шароварной лицензии smile.gif


--------------------
In byte we trust
ICQ World.ru
mail[dog]digitalator[dot]com
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Dark
сообщение 9.03.2005 5:41
Сообщение #30


Знаток
****

Группа: Пользователи
Сообщений: 408
Пол: Мужской

Репутация: -  3  +


Если вы решили защитить вашу информацию то маааленькие советы:
1. Пойдите в ВУЗ на кафедру Защиты Информации.
2. Научитесь ломать программы, ну положим начнем с малого:

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

Для тех кто любит техносказки - первая часть kasper01
вторая часть - его перевод обучалки от Орка "Взлом как искуство"
третья - взлом програм, его собственные исследования
IDA_PRO - его обучалка об IDA - взламывающей системе, и не только его...


Прикрепленные файлы
Прикрепленный файл  KASPER02.RAR ( 40.81 килобайт ) Кол-во скачиваний: 183
Прикрепленный файл  KASPER03.RAR ( 17.83 килобайт ) Кол-во скачиваний: 174
Прикрепленный файл  KASPER01.RAR ( 8.59 килобайт ) Кол-во скачиваний: 168
Прикрепленный файл  IDAProManualRu.rar ( 511.25 килобайт ) Кол-во скачиваний: 188


--------------------
- Где я?
- Во тьме.
- В какой тьме?
- Во тьме твоего мозга.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Romtek
сообщение 21.07.2005 23:14
Сообщение #31


Знаток
****

Группа: Пользователи
Сообщений: 303
Пол: Мужской
Реальное имя: Роман

Репутация: -  2  +


Вот ещё исходник на FPC (Free Pascal), который легко переделать для любого другого компилятора.
Функция замера текущего тика процессора (времени) GetClock реализуется с помощью функции GetTickCount из модуля Windows. Модуль Windows подключается именно по этой причине. Для портирования в ТП7 нужно заменить реализацию замера тика (времени) в функции GetClock на свою (можно через GetTime).
Модуль MD5 можно взять отсюда: http://wikisource.org/wiki/MD5_Hash

Идея такова: вы вводите пароль в виде строки, специальная функция проверки сверяет пароль и потом выдаёт ответ в boolean о корректности.
Сверка паролей делается при помощи известного алгоритма MD5, который выполняет односторонние преобразования и выдаёт хеш (hash).
Кроме проверки хешей вводимых строк проверяется ещё и наличие отладочных инструментов (debugger). Если между точкой ввода и проверкой хешей замечена разница во времени, большая 10 тиков (на самом деле, без отладки она вообще = 0), то меняется адрес точки входа в функцию проверки хешей. Тогда программа "вылетит" с ошибкой.
Пароль: "test"
{$IFDEF FPC}
{$Mode Delphi}
{$ENDIF FPC}

uses md5, Windows;

Type
BoolProc = function (s: string): boolean;
PBoolProc = ^BoolProc;

Const
Hash: TMD5Digest = (
9, 143, 107, 205, 70, 33, 211, 115,
202, 222, 78, 131, 38, 39, 180, 246
); // хеш пароля "test"

var
str: string;

function GetClock () : DWord;
begin
Result := GetTickCount
end;

function Passed (ss: string): boolean;
begin
Result := MD5Match (MD5String (ss), Hash);
end;

procedure TestPsw ();
var
b: boolean;
f: boolproc;
pp: pointer;
ds,de: DWord;
dr: word;
begin
PP := @Passed;
{...some operations...}
ds := GetClock ();
dr := 137 + random (1299); // просто цифры
inc (PP, dr); // меняем точку входа в функцию проверки
de := GetClock ();
if (de - ds < 10) then // если разность больше 10 тиков, то прогу взламывают (дебагер)...
dec (PP, dr); // возвращаем, если всё нормально
ds := GetClock (); // просто так, для отвлечения внимания
{.../some operations...}
@f := PP;
b := f (str);
writeln ( 'Test passed: ', b );
end;

var
sum :TMD5Digest;
i: integer;

begin
Randomize;
write ('Enter password: '); readln (str);
TestPsw ();
readln;
end.


Этот код не претендует на реальную защиту программ и выполняет функцию пособия для разработки более серьёзной защиты.

Сообщение отредактировано: Romtek - 21.07.2005 23:15


--------------------
Romiras HomeLab- материалы и статьи по разработке ПО, моделирование алгоритмов, обработка и анализ информации, нейронные сети, машинное зрение и прочее.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

2 страниц V < 1 2
 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 16.07.2025 16:44
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"