Rambler's Top100
"Knowledge itself is power"
F.Bacon
Поиск | Карта сайта | Помощь | О проекте | ТТХ  
 Подземелье Магов
  
 

Фильтр по датам

 
 К н и г и
 
Книжная полка
 
 
Библиотека
 
  
  
 


Поиск
 
Поиск по КС
Поиск в статьях
Яndex© + Google©
Поиск книг

 
  
Тематический каталог
Все манускрипты

 
  
Карта VCL
ОШИБКИ
Сообщения системы

 
Форумы
 
Круглый стол
Новые вопросы

 
  
Базарная площадь
Городская площадь

 
   
С Л С

 
Летопись
 
Королевские Хроники
Рыцарский Зал
Глас народа!

 
  
ТТХ
Конкурсы
Королевская клюква

 
Разделы
 
Hello, World!
Лицей

Квинтана

 
  
Сокровищница
Подземелье Магов
Подводные камни
Свитки

 
  
Школа ОБЕРОНА

 
  
Арсенальная башня
Фолианты
Полигон

 
  
Книга Песка
Дальние земли

 
  
АРХИВЫ

 
 

Сейчас на сайте присутствуют:
 
  
 
Во Флориде и в Королевстве сейчас  05:50[Войти] | [Зарегистрироваться]

Обсуждение материала
Технология шифрования исполняемого кода
Полный текст материала


Цитата или краткий комментарий:

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


Важно:
  • Страница предназначена для обсуждения материала, его содержания, полезности, соответствия действительности и так далее. Смысл не в разборке, а в приближении к истине :о) и пользе для всех.
  • Любые другие сообщения или вопросы, а так же личные эмоции в адрес авторов и полемика, не относящаяся к теме обсуждаемого материала, будут удаляться без предупреждения авторов, дабы не мешать жителям нормально общаться.
  • При голосовании учитывайте уровень, на который расчитан материал. "Интересность и полезность" имеет смысл оценивать относительно того, кому именно предназначался материал.
  • Размер одного сообщений не должен превышать 5К. Если Вам нужно сказать больше, сделайте это за два раза. Или, что в данной ситуации правильнее, напишите свою статью.
Всегда легче осудить сделанное, нежели сделать самому. Поэтому, пожалуйста, соблюдайте правила Королевства и уважайте друг друга.



Добавить свое мнение.

Результаты голосования
Оценка содержания

  Содержит полезные и(или) интересные сведения
[1]6100%
 
  Ничего особенно нового и интересного
[2]00%
 
  Написано неверно (обязательно укажите почему)
[3]00%
 
Всего проголосовали: 6

Оценка стиля изложения

  Все понятно, материал читается легко
[1]5100%
 
  Есть неясности в изложении
[2]00%
 
  Непонятно написано, трудно читается
[3]00%
 
Всего проголосовали: 5




Смотрите также материалы по темам:
[Шифрование, контрольная сумма, хэш] [Контроль целостности кода]

Комментарии жителей
Отслеживать это обсуждение

Всего сообщений: 7

28-08-2003 11:29
Шифрование программ под NT
Давно не пользовался NT, поэтому и не было возможности проверить работоспособность. Как оказалось, в kernel32.dll от NT нет функций для работы TLHelp32. Поэтому программа-энкодер под NT работать не будет.
Но шифрованную программу можно заставить работать.
Все, что ей надо - это получить значение ModuleSize. Эта функция используется в генерируемых include-файлах для поиска маркера (от начала модуля), и задает максимальное значение сканируемых байт для StrPosLen. Если программа начнет сканировать за пределами модуля, то возможно получение access violation (из-за доступа в нераспределенную память). Поэтому получение ModuleSize - необходимая осторожность.
Но так ли нужна эта предосторожность? Мы ведь наверняка знаем, что маркер в коде присутствует, и его удастся найти (по крайней мере, для
"зарегистрированных" версий программы). Поэтому под NT в качестве ModuleSize можно использовать константу, достаточно большую, чтобы в нее поместился любой модуль программы. Ну, скажем, 4 гб, то есть $FFFFFFFF :).
Изменим функцию ModuleSize, добавив в конце интересный else:


// размер загруженного модуля внутри своего процесса
function ModuleSize(hInst:DWORD):DWORD;
var MODULEENTRY32:tMODULEENTRY32;
    Snapshot:DWORD;
    PID:DWord;
begin
  result:=0;
  MODULEENTRY32.dwSize:=SizeOf(MODULEENTRY32);
  PID:=GetCurrentProcessId;
  Snapshot:=CreateToolhelp32Snapshot(TH32CS_SNAPMODULE,PID);
  if Snapshot<>0 then begin
    if Module32First(Snapshot,MODULEENTRY32) then
    repeat
      if MODULEENTRY32.hModule=hInst then begin
        result:=MODULEENTRY32.modBaseSize;
        Break;
      end;
    until not Module32Next(Snapshot,MODULEENTRY32);
    CloseHandle(Snapshot);
  end
  else  // похоже, мы работаем под NT
    result:=$FFFFFFFF;
end;



Что получаем в результате? Под Win9x, 2000, XT зашифрованная программа будет вести себя по-прежнему.
Под NT "зарегистрированные" копии программы будут работать нормально, а "незарегистрированные" скорее всего будут выдавать access violation по адресу imagebase+размер модуля. Если хочется более корректной работы, то придется более точно определять константу - размер модуля, или, например, читать ее из ini-файла.


24-06-2003 13:27
Обнаружена небольшая ошибка, приводящая к большим "потерям" системных ресурсов. В модулях для CreateToolhelp32Snapshot нет соответствующего CloseHandle
Исправленный RntUtil.pas отправлен администрации. Там же исправлена одна проблема при работе под win2000.


24-06-2003 13:22
>Насколько я понял, от снятия дампа здесь защиты нет
- Все что относится к пятому $INCLUDE и есть защита от снятия дампа (предварительно сохраненный исходный код возвращается на место). Это не абсолютная защита, но, по крайней мере, если в программе будет несколько защищенных участков, то полный расшифрованный дамп придется собирать из кусочков, полученных в разные моменты работы программы.
Кроме того, кое-какие меры можно предпринять и в "третьем" $INCLUDE (внутри защищенного кода) - здесь это не показано, дан только скелет, но реальный генератор может добавить туда контролирующий код, шифрующийся вместе с "полезным" кодом и "невидимый" при дизассемблировании


23-06-2003 17:06
Насколько я понял, от снятия дампа здесь защиты нет.

P.S Обнаружена небольшая ошибка, приводящая к большим "потерям" системных ресурсов. В модулях для CreateToolhelp32Snapshot нет соответствующего CloseHandle (заметил после того, как программа на сервере всю ночь работала, причем расшифровка и зашифровка происходили регулярно в Idle режиме)


26-04-2003 19:32
Доброго времени суток всем! Как олл смотрит на проблему защиты от срыва дампа памяти после расшифровки кусков кода? Сорри, я не сильно вчитывался в статью, как в off-line выйду - просмотрю более плотно. Указанная технология позволяет защититься от срыва памяти? Afaik самые стойкие защиты копирования "отдавались" именно так. Как это побороть? Динамическое шифрование? Так ИМХО очень сильно скажется на производительности системы, или я не прав?


26-04-2003 16:07
Помоему, первая нормальная статья (с практической точки зрения).


08-04-2003 17:52
Хорошая статья и пример.
Самое интересно, что когда я занимался проблемой шифрования кода в своей программе и пришел практически к изложеному в данной статье способу. Только для шифрования я использовал алгоритм Blowfish, а ключ для шифровки и дешифровки образовывал из постоянной составляющей и результатом одностороней хеш-функцией по алгоритму MD5 некоторого участка кода моей программы. Например: процедуры проверки ключа на наличие его в блэк-листе :-).


Добавьте свое cообщение

Вашe имя:  [Войти]
Ваш адрес (e-mail):На Королевстве все адреса защищаются от спам-роботов
контрольный вопрос:
Какой месяц идет после марта?
в качестве ответа на вопрос или загадку следует давать только одно слово в именительном падеже и именно в такой форме, как оно используется в оригинале.
Надоело отвечать на странные вопросы? Зарегистрируйтесь на сайте.

Оценка содержания
 
Содержит полезные и(или) интересные сведения
 
Ничего особенно нового и интересного
 
Написано неверно (обязательно укажите почему)


Оценка стиля изложения
 
Все понятно, материал читается легко
 
Есть неясности в изложении
 
Непонятно написано, трудно читается

Текст:
Жирный шрифт  Наклонный шрифт  Подчеркнутый шрифт  Выравнивание по центру  Список  Заголовок  Разделительная линия  Код  Маленький шрифт  Крупный шрифт  Цитирование блока текста  Строчное цитирование
  • вопрос Круглого стола № XXX

  • вопрос № YYY в тесте № XXX Рыцарской Квинтаны

  • сообщение № YYY в теме № XXX Базарной площади
  • обсуждение темы № YYY Базарной площади
  •  
     Правила оформления сообщений на Королевстве
      
    Время на сайте: GMT минус 5 часов

    Если вы заметили орфографическую ошибку на этой странице, просто выделите ошибку мышью и нажмите Ctrl+Enter.
    Функция может не работать в некоторых версиях броузеров.

    Web hosting for this web site provided by DotNetPark (ASP.NET, SharePoint, MS SQL hosting)  
    Software for IIS, Hyper-V, MS SQL. Tools for Windows server administrators. Server migration utilities  

     
    © При использовании любых материалов «Королевства Delphi» необходимо указывать источник информации. Перепечатка авторских статей возможна только при согласии всех авторов и администрации сайта.
    Все используемые на сайте торговые марки являются собственностью их производителей.

    Яндекс цитирования