Загрузка SLL в рантайме

Раздел посвящен программированию с использованием Power Basic.
jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Загрузка SLL в рантайме

Сообщение jangle » 09.03.2012 (Пт) 21:07

Как можно загрузить SLL и выполнить функцию внутри него при работе приложения?

DarkMachine
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 51
Зарегистрирован: 24.02.2012 (Пт) 15:58

Re: Загрузка SLL в рантайме

Сообщение DarkMachine » 12.03.2012 (Пн) 9:31

К сожаленью, нет... SLL подсоединяется к программе во время компиляции и все..
Хотя, если покопаться в бинарнике SLL, то можно найти способ. Что то на подобии загрузчика ДЛЛ в память от Матусовского.

Вот что выдает ИДА на этот СЛЛ код..
Код: Выделить всё
#COMPILE SLL = "TestLib.SLL"
SUB TestForSLL() COMMON
  MSGBOX "Hello"
END SUB

ИДА - лишнее убрал, оставил только то что нужно.
Код: Выделить всё
seg000:00000181 TestForSLL:
seg000:00000181                 push    ebp
seg000:00000182                 mov     ebp, esp
seg000:00000184                 push    ebx
seg000:00000185                 push    esi
seg000:00000186                 push    edi
seg000:00000187                 push    133Fh
seg000:0000018C                 sub     esp, 70h
seg000:0000018F                 push    201011h
seg000:00000194                 xor     esi, esi
seg000:00000196                 push    esi
seg000:00000197                 push    esi
seg000:00000198                 push    esi
seg000:00000199                 push    esi
seg000:0000019A                 mov     edx, 0A54h
seg000:0000019F                 call    $+5
seg000:000001A4                 mov     eax, 12000h
seg000:000001A9                 call    $+5
seg000:000001AE                 call    $+5
seg000:000001B3                 call    $+5
seg000:000001B8                 lea     esp, [ebp-0Ch]
seg000:000001BB                 pop     edi
seg000:000001BC                 pop     esi
seg000:000001BD                 pop     ebx
seg000:000001BE                 pop     ebp
seg000:000001BF                 retn
seg000:000001BF                 endp
seg000:000001BF
seg000:000001BF ; ---------------------------------------------------------------------------
seg000:000001C0 StrLen          db    5
seg000:000001C1                 db    0
seg000:000001C2                 db    0
seg000:000001C3                 db    0
seg000:000001C4 aHello          db 'Hello'
seg000:000001C9                 db    0
seg000:000001CA                 db    0
seg000:000001CB                 db    0
seg000:000001CC                 db    0
seg000:000001CD                 db    0
seg000:000001CE                 db    0
seg000:000001CF                 db    0
seg000:000001D0                 db    0
seg000:000001D1                 db    0
seg000:000001D1 seg000          ends

Мое мнение - лучше забыть эту затею ;)

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re: Загрузка SLL в рантайме

Сообщение jangle » 12.03.2012 (Пн) 9:41

DarkMachine писал(а):Что то на подобии загрузчика ДЛЛ в память от Матусовского.


Да я это как раз имею ввиду. Допустим можно передавать пользователю некие функции в SLL после оплаты им программы. Тоже самое делать в DLL нерационально, потому как легко могут украсть уникальный и дорогостоящий код и "привинтить" к любому своему проекту.

DarkMachine
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 51
Зарегистрирован: 24.02.2012 (Пт) 15:58

Re: Загрузка SLL в рантайме

Сообщение DarkMachine » 12.03.2012 (Пн) 10:45

У меня так и реализовано, только без СЛЛ.
В моем случае я поступил примерно так:
Допустим что, есть некая ф-ция или подпрограмма которая и выполняет основные действия. Внутри ф-ции есть кусок кода (например какая-та формула)
после вычисления которого получается результат. Т.к. для заказчика важен тот самый результат, то сама формула загружается из бинарника.
Логика программы сделана так, чтоб без бинарника, формула всегда выдает 1. т.е. ничего не вычисляет, и деления на ноль не происходит.

Если чистый код формулы где-то байтов на 100-200, то сам бинарник весит где-то 5-10 кб (мусор). Вся фишка в том, что после загрузки в память программа вычисляет и находит тот кусок, который надо загрузить. а он все время меняется при каждой загрузке (меняется и весь мусорный код).
Таким образом бинарник меняется постоянно, но здесь слабое место это программа дешифрации этого бинарника. Для взломщика - это дело времени и опыта --- тут главное вовремя выпускать апдейты ;) и модифицировать алгоритм дешифрации.

Вариантов много, главное чтоб заработало.

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re: Загрузка SLL в рантайме

Сообщение jangle » 13.03.2012 (Вт) 9:32

Про твой способ я знаю, но загрузка SLL была бы интересней


Вернуться в Power Basic

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 13

    TopList