Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Защита перекрытием кода от Кулибы, Помогите разобраться ASM 
:(
    Опции темы
Bes
Дата 11.5.2005, 07:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 806
Регистрация: 8.12.2004

Репутация: 5
Всего: 7



Привожу цитату:

Цитата
Не секрет, что совершенной защиты не существует, как некоторые авторы и фирмы не пыжатся , но они не правы. Хорошая защита должна обеспечить такой уровень, чтобы на вскрытие защиты нужно было затратить усилия сравнимые с самостоятельным написанием программы. Разумеется она должна быть многоуровневой и перекрывающейся (т.е уровни должны работать независимо). Не забывайте, что хорошие взломщики неплохо знают ассемблер и высокоуровневе ухищрения от них не спасают. Следовательно защищаться нужно тоже используя ассемблер.Не считайте, что это уже не модно или тяжело. Хороший программист не брезгует ассемблером и высшей математикой.

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



--------------------------------------------------------------------------------
    temp_string :='Den is Com';
asm

mov  ax,$05EB
@as: jmp @as-2
end;
ShowMessage('Сообщение'); 


На первый взгляд это может сконфузить вас, но все это очень просто. Первая инструкция заносит "левое" значение в AX. Вторая делает переход на значение операнда команды MOV AX. '05EB' переводится как 'jmp$+5' (помните, что слова хранятся задом наперед) Этот переход перепрыгивает первый JMP и продолжает дальше по коду.Вероятно, не будет достаточно для защиты, но продемонстрирует технику. Взгляните на это как пример.

присваивание temp_string :='Den is Com' существенной роли не играет smile, но может использоваться при отладке программы - хорошо присматривается при использовании дизассемблера. Скорее всего ваши первые шаги будут приводить к частому зависанию компьютера, но не отчаивайтесь - это того стоит. Попробуйте разработать свой способ сравнения строк (чаше всего ловятся именно эти инструкции), попробуйте замаскировать инструкции зависания компьютера и т.д.


Так и не смог прикрутить эту штуку к своей программе.
Может кто понял, что хотел сказать автор?
Вроде интересная штука, расскажите...
Заранее благодарен.

PM MAIL   Вверх
Rouse_
Дата 11.5.2005, 11:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 469
Регистрация: 23.4.2005

Репутация: 5
Всего: 29



Штука достаточно банальная и не имеет никакого практического смысла так как весьма прозрачна.

смотри как все выглядит:
машинный код инструкции jmp равен $EB для этой инструкции нужно значение куда будем прыгать (к примеру на 5 байт вперед, именно столько байт занимает дальнейший машинный код)

автор хочет показать как он якобы схитрил:

вот рассмотрим на примере:
Код

66B8EB05    mov  ax,$05EB
EBFE      jmp  @as - 02

как видишь первая инструкция занимает 4 байта кода, автор хочет посредством второй инструкции перескачить на начало вот этих 2 байт EB05, которые означают инструкцию JMP +$05, но вот беда, дельфи (по крайней мере семерка) не дает делать так как задумано и EBFE делает переход на саму себя.
Хорошо, попробуем сделать изменение кода второй инструкции:
Код

jmp  @as - 04

и что мы видим? То что Дельфи тоже не лыком шита и не дает выполняться заведомо опасному коду и как результат генерируем на выходе все ту же инструкцию
Код

EBFE      jmp  @as - 02

Если бы было сгенерировано EBFС, тогда фокус бы получился, а так нет.

Если ты все же хочешь запустить данный пример, то напиши код вот так:
Код

  temp_string :='Den is Com';
asm
  mov  ax,$05EB
@as:
  call @as-$02
end;
  ShowMessage('Сообщение');


Это сообщение отредактировал(а) Rouse_ - 11.5.2005, 11:05


--------------------
 Vae Victis
(Горе побежденным (лат.))
Демо с открытым кодом: http://rouse.drkb.ru 
PM MAIL WWW ICQ   Вверх
Girder
Дата 11.5.2005, 11:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй 2
***


Профиль
Группа: Участник Клуба
Сообщений: 1993
Регистрация: 12.5.2004

Репутация: 31
Всего: 155



Bes почитай про: "scrambled код-ы"

PS: для IDA есть плагины для удаления наиболее распространненых мусорных кодов smile

Rouse_ добавь: pop rr

Это сообщение отредактировал(а) Girder - 11.5.2005, 15:21


--------------------
Как слышим, так и пишим.
Истина где-то там...
PM   Вверх
Bes
Дата 11.5.2005, 15:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 806
Регистрация: 8.12.2004

Репутация: 5
Всего: 7



2Rouse_: Я только не понял куда это совать и для чего? Что при этом происходит? Как это применять и что это?
PM MAIL   Вверх
Rouse_
Дата 11.5.2005, 15:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 469
Регистрация: 23.4.2005

Репутация: 5
Всего: 29



Никуда это совать не нужно, поверь это лишний геморой на пятую опорную точку. Только сам запутаешся.
Автор просто хочет показать как можно "запутать" злоумышленника до невозможности исковеркав код программы. В действительности над таким детским подходом даже смеяться жалко...


--------------------
 Vae Victis
(Горе побежденным (лат.))
Демо с открытым кодом: http://rouse.drkb.ru 
PM MAIL WWW ICQ   Вверх
Bes
Дата 11.5.2005, 15:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 806
Регистрация: 8.12.2004

Репутация: 5
Всего: 7



Жаль, smile А как бы защититься?
PM MAIL   Вверх
Rouse_
Дата 11.5.2005, 15:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 469
Регистрация: 23.4.2005

Репутация: 5
Всего: 29



Если уж хочешь сделать что-то серьезное, то стоит подумать над некоей аналогией ASProtect, т.е. зашифрованный ЕХЕ, раскриптовывается в Executable Marked область памяти и оттуда стартуется с параллельным просчетом контрольных сумм каждого исполнямого участка кода. Парралельный морфинг исполняемых участков по аналоги с полиморфными вирусами. Прокладка рассчета данных по поточному туннелю, к примеру работают 16 потоков которые считают что-то одно и абсолютно по одному и томуже алгоритму, но только один из потоков в данный момент работает с правильными данными, а остальные лопатят мусор и через рандомный промежуток времени данные перекидываются в другой поток и так до окончания проводки (пока данные не рассчитаются до конца). Установка ловушек в коде на которые может среагировать взломщик... и тд. и т.п.
Добавлено @ 15:39
Ну и не забывай что абсолютных защит не бывает. На разработку защиты должно быть потрачено не более 10-15 процентов суммы потраченной на создание самого продукта, иначе получится что будет висеть монстрообразная защита над программой чуть лучше по своему функционалу чем банальный Notepad. Получится как в байке про неуловимого Джо, которого никто не ловит потомучто он никому не нужен.


--------------------
 Vae Victis
(Горе побежденным (лат.))
Демо с открытым кодом: http://rouse.drkb.ru 
PM MAIL WWW ICQ   Вверх
Bes
Дата 11.5.2005, 15:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 806
Регистрация: 8.12.2004

Репутация: 5
Всего: 7



Ну блин, умных слов ты много знаешь. smile Это я понял. Ты не мудри, ты пальцем покажи. Может статейку подкинешь какую?
PM MAIL   Вверх
Rouse_
Дата 11.5.2005, 15:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 469
Регистрация: 23.4.2005

Репутация: 5
Всего: 29



На королевстве дельфи есть цикл статей о защите. Только не спрашивай моего мнения по этим статьям smile
http://www.delphikingdom.ru/asp/section.asp?id=2


--------------------
 Vae Victis
(Горе побежденным (лат.))
Демо с открытым кодом: http://rouse.drkb.ru 
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0660 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.