Шифрование процедуры в исп. файле?

Тема в разделе "WASM.WIN32", создана пользователем test555, 21 мар 2009.

  1. test555

    test555 New Member

    Публикаций:
    0
    Регистрация:
    7 дек 2007
    Сообщения:
    241
    Рассуждения носят теоретический характер..

    Вопрос про защиту программы - шароварность к примеру.

    Допустим что есть какая-то функция которая расчитывает по некоторому алгориму значение.
    Трубется зашитить сам алгоритм (предполагается что в нем вся ценность).

    А воспользоваться может только пользователь, который ввел пароль.

    Допустим что в программе реализована функция симметричного шифрования блоков.
    После ввода пароля пользователем расшифровывается функция подсчета, после чего она вызывается при работе программы, пока не ввел пароль, - функция находится в зашифрованном виде и нетрудоспособна.

    Вопрос: как это можно реализовать?

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

    В чем трудности могут быть?
    Как при компиляции программы быть с защищаемой функцией?
    оставить ее как есть, а потом спец. патчем зашифровать тот блок? (найти смещения, спроецировав файл в память?)

    ..??
     
  2. GoldFinch

    GoldFinch New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2008
    Сообщения:
    1.775
    в фасме можно при компиляции шифровать часть бинарника
    так что можно в фасме сделать .obj c нужной шифрованной функцией и прилинковать его к проге на другом ЯП

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

    можно вынести функцию в длл, и шифровать целиком всю секцию кода длл - загружать и расшифровывать
     
  3. test555

    test555 New Member

    Публикаций:
    0
    Регистрация:
    7 дек 2007
    Сообщения:
    241
    Так, хотелось бы внести конкретику...
    рабочие модули и процедуры - на делфях (можно конечно в С переписать, но очень долго).
    Хотелось бы без использования ДЛЛ.

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

    Кто-нибудь на практике проделывал нечто подобное?
     
  4. MSoft

    MSoft New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
    Не забудь про аттрибуты записи на секцию кода
    А в остальном да, никаких сложностей нет. Самым сложным будет найти процедуру и зашифровать ее. А расшифровка - как 2 байта переслать
     
  5. K10

    K10 New Member

    Публикаций:
    0
    Регистрация:
    3 окт 2008
    Сообщения:
    1.590
    Код (Text):
    1. begin
    2.   asm
    3.     JMP @next1
    4.     DB 'begin_signature'
    5.   @next1:
    6.   end;
    7.  
    8.   // кодес
    9.  
    10.   asm
    11.     JMP @next2
    12.     DB 'end_signature'
    13.   @next2:
    14.   end;
    15. end;
    Потом в программе находишь PE заголовок, из него узнаешь начало кода и размер кода, циклически (если надо шифровать не один участок) ищешь в памяти begin_signature и расшифровываешь (предварительно сделав VirtualProtect) до end_signature. При шифровании отдельной утилью после компиляции сигнатуры также все упрощают.
     
  6. test555

    test555 New Member

    Публикаций:
    0
    Регистрация:
    7 дек 2007
    Сообщения:
    241
    Всем спасибо..

    Как начну писать код, сообщу (вдруг кому это будет интересно в подробностях...)

    ПС: всем спасибо, все получилос.. (ну простой вариант)...А остальное - дело техники )