Защита кода QLua от компрометации

Страницы: 1
RSS
Защита кода QLua от компрометации, Есть ли возможность исключить доступ к коду на QLua брокера и разработчиков Quik
 
Планирую создать робота для торговли через терминал Quik. Хочу спросить у разработчиков Quik и у людей, работающих с QLua, насколько код на QLua, исполняемый на рабочем месте пользователя Quik, защищен от доступа к нему (просмотра, копирования) сотрудников брокера и сотрудников разработчиков Quik? Есть ли способы усилить эту защиту, оставаясь в рамках использования QLua?
 
Здравствуйте,
В случае если предполагается передавать код третьим лицам, Вы можете его скомпилировать в *.luac файл и таким образом обезопасить себя. Однако это не 100% защита т.к. есть Lua декомпиляторы (на счет их достоверности ничего сказать не можем). Что касается брокера, то он не видит Ваш код и не имеет никакой возможности его увидеть.
 
Существуют декомпиляторы  luac->lua.

Мое знакомство с некоторыми из них привело к осознанию, что никто не написал грамотного декомпилятора, который качественно восстанавливает текст скрипта из скопилированно варианта.

однако части скрипта можно увидеть прекрасно.

поэтому полагаться на компиляцию скрипта в luac вид можно условно.

если вы хотите большей надёжности, наиболее правильный путь это встраивание скрипта на луа  в dll. Этим способом пользуюсь сам.
www.bot4sale.ru

Пасхалочка для Алексея Иванникова: https://forum.quik.ru/messages/forum10/message63088/topic7052/#message63088
 
Цитата
s_mike@rambler.ru написал:
если вы хотите большей надёжности, наиболее правильный путь это встраивание скрипта на луа  в dll. Этим способом пользуюсь сам.
А можно поподробнее?... и как всё это прикручивается к Quik в конечном счёте.
 
Цитата
Suntor написал:
Цитата
   s_mike@rambler.ru  написал:
если вы хотите большей надёжности, наиболее правильный путь это встраивание скрипта на луа  в dll. Этим способом пользуюсь сам.
А можно поподробнее?... и как всё это прикручивается к Quik в конечном счёте.
есть такая штука - lua C Api.

позаолчет писать dll для луа скриптов.

в числе прочего можно создать функцию в длл и вызывать ее из скрипта. Можно также вызывать из длл функции скрипта.

ну а дальше - простор для фантазии...
www.bot4sale.ru

Пасхалочка для Алексея Иванникова: https://forum.quik.ru/messages/forum10/message63088/topic7052/#message63088
 
Цитата
s_mike@rambler.ru написал:
Цитата
Suntor   написал:
Цитата
    s_mike@rambler.ru   написал:
если вы хотите большей надёжности, наиболее правильный путь это встраивание скрипта на луа  в dll. Этим способом пользуюсь сам.
А можно поподробнее?... и как всё это прикручивается к Quik в конечном счёте.
есть такая штука - lua C Api
не... я понял фразу «встраивание скрипта на луа в dll» буквально, что вы вовнутрь DLL перенесли Lua код как он есть... на подобии двоичной компиляции... а потом это дело прикрутили к Quik...

то-есть, моя мысль состоит в том, чтобы спрятать написанный на Lua скрипт внутрь скомпилированной библиотеки, но при этом код останется тем же, какой можно напрямую запустить через диалог скриптов в Quik...

как бы это сделать по-человечески?...
 
Цитата
Suntor написал:
Цитата
то-есть, моя мысль состоит в том, чтобы спрятать написанный на Lua скрипт внутрь скомпилированной библиотеки, но при этом код останется тем же, какой можно напрямую запустить через диалог скриптов в Quik...

как бы это сделать по-человечески?...
ну собственно так оно и делается. Все возможности для этого в C API имеются.

если это будет необходимо, пишите, спрячу ваш готовый скрипт в dll, дело на пару минут.
www.bot4sale.ru

Пасхалочка для Алексея Иванникова: https://forum.quik.ru/messages/forum10/message63088/topic7052/#message63088
 
Цитата
s_mike@rambler.ru написал:
ну собственно так оно и делается. Все возможности для этого в C API имеются.

если это будет необходимо, пишите, спрячу ваш готовый скрипт в dll, дело на пару минут.
у вас там какая-то DLL-обёртка написана, которая перенаправляет OnOrder, OnTrade и пр. в одноименные вызовы скомпилированного в бинарник Lua-скрипта?
 
Инструмент, засовывающий любой скрипт луа вовнутрь dll давно написан. Рассказывать подробности не стану.
www.bot4sale.ru

Пасхалочка для Алексея Иванникова: https://forum.quik.ru/messages/forum10/message63088/topic7052/#message63088
 
Цитата
s_mike@rambler.ru написал:
Инструмент, засовывающий любой скрипт луа вовнутрь dll давно написан. Рассказывать подробности не стану.
Детский сад какой-то...
 
Добрый день.
Видимо имелась ввиду связка luac + bin2c
Сначала скрипт компилируется, затем полученный файл конвертируется с помощью bin2c или аналогичной  и встраивается в код dll
Пример можно посмотреть тут: http://lua-users.org/wiki/BinToCee
 
Цитата
Suntor написал:
Цитата
   s_mike@rambler.ru  написал:
Инструмент, засовывающий любой скрипт луа вовнутрь dll давно написан. Рассказывать подробности не стану.
Детский сад какой-то...
Suntor.

Вы получили всю необходимую информацию, чтобы суметь сформулировать в Гугле поисковую фразу " lua to c".  
www.bot4sale.ru

Пасхалочка для Алексея Иванникова: https://forum.quik.ru/messages/forum10/message63088/topic7052/#message63088
 
Всё. "Бабушка приехала".
Согласен - "Детский сад какой-то". Публично обсуждать ключевые моменты своей (и не только своей) защиты - просто невероятный абсурд! Михаилы согласованно поработали в паре. Нарочно не придумаешь.

P.S. Как только софт попадает в чужие руки - он обречен. От специалиста нет защиты.
          Недавно заметил (кажется, у команды Герчика) одно старое решение. Индикатор разбивается на две части, клиентская отдается пользователю, секретная (собственно алгоритм) остается и работает у автора на его сервере.

P.P.S. Есть несправедливая несимметричность - красивая изощренная защита, на которую потратили много времени и сил, часто преодолевается быстро и совершенно смешными приемами.
           
 
для защиты использую обфускатор https://github.com/efrederickson/XFuscator. Код на луа сначала "прогоняю" через него, потом пакую в luac.
 
Цитата
Алексей Ч написал:
для защиты использую обфускатор  https://github.com/efrederickson/XFuscator . Код на луа сначала "прогоняю" через него, потом пакую в luac.
аккуратнее с этим обфускатором. Не будет работать в длинном ряде случаев. Самомодифицируемый код - один из примеров. Любые функции типа dofile использующие upvalues, будут обработаны некорректно и так далее.
www.bot4sale.ru

Пасхалочка для Алексея Иванникова: https://forum.quik.ru/messages/forum10/message63088/topic7052/#message63088
 
Цитата
s_mike@rambler.ru написал:
Suntor.

Вы получили всю необходимую информацию, чтобы суметь сформулировать в Гугле поисковую фразу " lua to c".
Детский сад продолжается...

Цитата
Michael Bulychev написал:
Видимо имелась ввиду связка luac + bin2c
Что имелось ввиду мы уже не узнаем, ибо это большая тайна...

Что же касается связки luac + bin2c, то она не сработает в качестве защиты. Там нет компиляции кода. Там просто упаковка luac кода в секцию данных и с последующим вызовом по указателю. А это значит, что обычным Hex редактором (и/или даже 7-Zip архиватором) этот luac можно вытащить обратно.

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

Цитата
Борис Гудылин написал:
Публично обсуждать ключевые моменты своей (и не только своей) защиты - просто невероятный абсурд!
Обсуждаем технические моменты, методы, инструменты... никто не просит вываливать свой код в готовом виде. Всё же разные вещи.

Цитата
Борис Гудылин написал:
Как только софт попадает в чужие руки - он обречен. От специалиста нет защиты.
Хоть какая-то защита лучше чем вообще никакой. Тем более что часто отличная защита получается с минимальными издержками, как раз поиск таких решений и есть предмет обсуждений.

Цитата
Алексей Ч написал:
для защиты использую обфускатор  https://github.com/efrederickson/XFuscator . Код на луа сначала "прогоняю" через него, потом пакую в luac.
Обфускатор, в качестве защиты, мало что даёт на самом деле.
 
Цитата
Suntor написал:
Что же касается связки luac + bin2c, то она не сработает в качестве защиты. Там нет компиляции кода. Там просто упаковка luac кода в секцию данных и с последующим вызовом по указателю.
luac на выходе даст вам как раз байт-код.
Например файл hello.lua содержащий строку print "hello" bin2c представит в виде :
Код
/* code automatically generated by bin2c -- DO NOT EDIT */
{
/* #include'ing this file in a C program is equivalent to calling
  if (luaL_loadfile(L,"hello.lua")==0) lua_call(L, 0, 0);
*/
/* hello.lua */
static const unsigned char B1[]={
112,114,105,110,116, 32, 34,104,101,108,108,111, 34,
};

 if (luaL_loadbuffer(L,(const char*)B1,sizeof(B1),"hello.lua")==0) lua_call(L, 0, 0);
}

тот же файл, но скомпилированный luac:
Код
/* code automatically generated by bin2c -- DO NOT EDIT */
{
/* #include'ing this file in a C program is equivalent to calling
  if (luaL_loadfile(L,"luac.out")==0) lua_call(L, 0, 0);
*/
/* luac.out */
static const unsigned char B1[]={
 27, 76,117, 97, 81,  0,  1,  4,  4,  4,  8,  0, 11,  0,  0,  0, 64,104,101,108,
108,111, 46,108,117, 97,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  2,  2,  4,
  0,  0,  0,  5,  0,  0,  0, 65, 64,  0,  0, 28, 64,  0,  1, 30,  0,128,  0,  2,
  0,  0,  0,  4,  6,  0,  0,  0,112,114,105,110,116,  0,  4,  6,  0,  0,  0,104,
101,108,108,111,  0,  0,  0,  0,  0,  4,  0,  0,  0,  1,  0,  0,  0,  1,  0,  0,
  0,  1,  0,  0,  0,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
};

 if (luaL_loadbuffer(L,(const char*)B1,sizeof(B1),"luac.out")==0) lua_call(L, 0, 0);
}
 
Цитата
Michael Bulychev написал:
Цитата
Suntor   написал:
Что же касается связки luac + bin2c, то она не сработает в качестве защиты. Там нет компиляции кода. Там просто упаковка luac кода в секцию данных и с последующим вызовом по указателю.
luac на выходе даст вам как раз байт-код.
Вернулись к началу темы... по кругу ходим. Уже же выяснили что luac не выход. Даже если его просто в редакторе открыть, видно, что все имена сохранены.

Я пробовал свои luac файлы декомпилировать через unluac обратно в lua, результат поразительный. Получил точную копию исходного lua файла. Отличие только в отсутствие комментариев. Даже структура отступов совпала.

То-есть для «вскрытия алгоритма» это более чем достаточно, фактический исходный код как он есть. Уж лучше тогда оставить Lua код с комментариями, в которых хотя бы можно авторские права указать. )))
 
Цитата
Suntor написал:
Цитата
Алексей Ч   написал:
Цитата
для защиты использую обфускатор   https://github.com/efrederickson/XFuscator  . Код на луа сначала "прогоняю" через него, потом пакую в luac.
Обфускатор, в качестве защиты, мало что даёт на самом деле.
Вы его уже пробовали, надеюсь? Да, с ним есть проблемы, но он добавляет 10 Х г...внокода от исходного. Итого 20кб исходного кода превращается 200кб невнятного луатекста
 
Цитата
Suntor написал:
             Цитата Борис Гудылин написал:
             Публично обсуждать ключевые моменты своей (и не только своей) защиты - просто невероятный абсурд!
Обсуждаем технические моменты, методы, инструменты... никто не просит вываливать свой код в готовом виде. Всё же разные вещи.
Обеспечение защиты и ее преодоление, оценка стойкости и трудоемкости - две стороны одного процесса. Хотите научить всех преодолевать защиту?
Асимметричность, "ломать - не строить". Здесь не то, что код в готовом виде, но даже намек или просто привлечение внимания может иметь фатальные последствия для защиты.
Лучше перестраховаться и закруглить дискуссию.

 
 
 
Цитата
Анатолий написал:
Планирую создать робота для торговли через терминал Quik.
Поверьте, когда вы его допишите вы узнаете, что защищать там было особо и нечего :).  Тут многие поначалу думают, что напишут роботов, которые им заработают миллиард-два.  Некоторые потом еще пытаются продать другим (как в той притче про "Искусство убивать драконов").  Хотя опять же, некоторые из таких товарищей как раз и прячут код, чтобы не было очевидно, что он, собственно, ничего не делает...

Но тем не менее, по вашему вопросу: формально терминал Quik загружает файл с вашим кодом и может сделать с ним все, что угодно, в том числе передать по сети.  Некоторые предлагают компилировать сишный код - не поможет, читать ассемблер не так уж и сложно.  Всякая обфускация (то есть намеренное усложнение и запутывание кода) тоже не поможет, ибо для reverse engineering важно только то, что код делает, а не то, как именно он написан.  А что код делает - это можно узнать, прогоняя его на туче примеров и параллельно подсматривая врутрь дебагером (что можно и не полениться сделать для робота, который уверенно генерирует прибыль).  Да и вообще, зачем код изучать?  Украл, запустил, уехал на острова...

Поэтому если ваш код выполняется терминалом Quik то он по определению потенциально скомпромитирован.  Отсюда вывод: нужно выполнять его в другом процессе, с которым QLua будет общаться через, например, named pipes или socket.  Но даже и тогда, если вы и запустете все это на настоящей операционной системе (а не Windows, которая даже названием выбрала образ эдакой большой дыры в стене) - все равно гарантий не будет, ибо в код системы, даже если он открытый, вы едва ли заглядывали, так что это будет скорее вопрос самоуспокоения, а не реальной защиты.

В общем, оно того не стоит, но если вам очень хочется, то выполняйте робота в отдельном процессе.
 
Можно еще запустить Quik в отдельной виртуальной машине, а робота - вовне, и общаться через сокет.  А то вдруг Quik вообще любые файлы с вашей машины отсылает брокеру - потенциально может ведь :).
 
Цитата
Алексей Ч написал:
Вы его уже пробовали, надеюсь? Да, с ним есть проблемы, но он добавляет 10 Х г...внокода от исходного. Итого 20кб исходного кода превращается 200кб невнятного луатекста
Нет, не пробовал... но суть не в конкретном обфускаторе как таковом, а в самом способе защиты алгоритма. Алгоритм остаётся открытым, его можно вытащить. Причём, по сути, пошаговым рефакторингом обфускаренного кода. Отрезая лишнее и ненужное. Многие сочтут такую работу за удовольствие, и с радостью поработают над вашими 200 КБ превращая их обратно в исходные 20 КБ.. )))

Цитата
Борис Гудылин написал:
Здесь не то, что код в готовом виде, но даже намек или просто привлечение внимания может иметь фатальные последствия для защиты.
Лучше перестраховаться и закруглить дискуссию.
Абсолютно неправильная точка зрения. Безопасность как раз и начинается с открытого обсуждения способов защиты. Специалисты устраивают конференции ежегодные, доклады готовят, а не сидят по домам втихую пряча все свои секреты.

Цитата
kroki написал:
Поэтому если ваш код выполняется терминалом Quik то он по определению  потенциально  скомпромитирован.  Отсюда вывод: нужно выполнять его в другом процессе, с которым QLua будет общаться через, например, named pipes или socket.
Как раз думаю над подобным способом, но только через общую (разделяемую, shared) память процессов. Это наиболее быстрый способ обмена. Делал его 20 лет назад ещё на VS6.0 через директивы компилятора. Но тут речь о том, как бы не городить огород. Хочется оставить Lua в обороте с одной стороны имея возможность прямой загрузки скрипта в Quik, а с другой стороны возможность быстро пересобрать проект в защитной конфигурации. Пока что вижу только реально практически удобный способ с делением кода на две части, как наименее затратный для реализации подобной схемы защиты. Фактически «иерархия конечных автоматов» биржевого протокола и обмена с Quik остаётся в Lua скрипте, а сама торговая стратегия уходит в отдельную DLL с мостом через shared-память.

Цитата
kroki написал:
Можно еще запустить Quik в отдельной виртуальной машине, а робота - вовне, и общаться через сокет.  А то вдруг Quik вообще любые файлы с вашей машины отсылает брокеру - потенциально может ведь :).
Да, может. )))
Единственно что не все файлы, так как такую дисковую активность несложно отследить, и палиться так разработчики Quik'а не станут, я полагаю. Но вот, то что уже загружено в Quik, то-есть сами .lua и .luac файлы без проблем могут передаваться на строну сервера Quik, и отследить такую активность не взломав протокол Quik'а с сервером уже невозможно.
Страницы: 1
Читают тему
Наверх