LINUX.ORG.RU

Генерация и запуск кода на лету

 ,


0

1

Здравствуйте уважаемые программисты. Подскажите пожалуйста по следующей задаче: в GNU/Linux необходимо написать программу на C/C++, которая может на лету генерировать исполняемый код и его запускать.

Кратко погуглив тему понял лишь:

  1. fexecve - немного не о том. В идеале не обращаться к файловой системе вовсе.

  2. JavaVM не особо подходит.

  3. OSKIT - не уверен что правильное решение.

Ответ на: комментарий от shimajima

Хммм... Задача становится чуть понятнее.

apparmor, selinux - особо не спасёт.

Да, это немного не туда.

В голове возникает идея (если это не под гостайну) использовать шифрацию с применением аппаратного ключа типа yubikey. Там pgp, поэтому под гостайну не пойдёт. Но в этом случае можно распедалить приложение. Что-то можно «считать» у «пользователя», а что-то – на своём удалённом от пользователя сервере, с обменом по своему протоколу типа RPC, закрытому по tls/ssl. И отдавать пользователю только результаты расчётов. Yubikey здесь тогда нужен чтобы обеспечить доступ применяя PAM к серверу. RPC это Remote Procedure Calls. Как раз для того и создавалось.

Там ушлые ребята с флешками и узкими глазками.

Да, меня тоже частенько за китайца «в сети» принимают… На этом вот богоспасаемом сайте за еврея… =)))

Moisha_Liberman ★★
()
Ответ на: комментарий от MKuznetsov

Задача состоит в том чтобы защитить чувствительные данные, знание которых может привести к финансовым последствиям (своруют деньги). Эти данные загружаются клиенту раз в неделю. Клиент может без сети стоять трое суток.

shimajima
() автор топика
Ответ на: комментарий от shimajima

Задача состоит в том чтобы защитить чувствительные данные, знание которых может привести к финансовым последствиям (своруют деньги). Эти данные загружаются клиенту раз в неделю. Клиент может без сети стоять трое суток.

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

anonymous
()
Ответ на: удаленный комментарий

Спасибо за ваш ответ. Расскажите пожалуйста как правильно с данными работать.

shimajima
() автор топика
Ответ на: комментарий от shimajima

Тогда Вы можете...

В принципе сделать просто. Есть ФЗ про персданные. «Трансграничную обработку данных» он не запрещает. Т.е., данные у Вас на сервере в организации, а вот обработчик данных там у заказчика. Но не полностью. Критически важные вещи Вы считаете и отдаёте по RPC по запросу удалённого приложения.

В это м случае Вы можете отдать в руки исходники на обе части. Но вот данные в полном объёме Вы не отдаёте. Вы (по запросу!) удалённой системе заказчика отдаёте некий уже готовый результат.

Доступ у них с применением PAM при помощи аппаратного ключа. Это гарантирует от произвольных запусков каких-то «утекших в сеть» копий Вашего ПО, которое передавалось заказчику как клиентская часть. Ну либо пусть ребята учатся клонировать yubikey. Удачи им в этом начинании.

Moisha_Liberman ★★
()
Ответ на: Блин. от Moisha_Liberman

но для другого проекта предложенный вариант как раз подойдёт. и там как раз биометрические персональные данные =_=

shimajima
() автор топика
Ответ на: комментарий от shimajima

Вот как версия.

http://xmlrpc-c.sourceforge.net/

Тут Вам и XML, тут и RPC, тут даже свой «типа сервер» abyss есть, короче, всё как мы любим. И на С и на С++. Чисто для старта ради и рассмотрения как возможного варианта.

Успехов.

А по этой задаче, если там сеть говно, то я даже не знаю что предложить. Вся «секьюрность» кончится как только Вы отдадите данные в полном объёме (ну или в более-менее полном, позволяющем либо восстановить, либо игнорировать за незначимостью недостающие данные).

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

Moisha_Liberman ★★
()
Ответ на: Не за что. от Moisha_Liberman

Сайт это хорошо. Хотелось бы иметь ваш контакт в телеграмме. Иногда попадаются интересные проекты. @ A2154242153085202020

shimajima
() автор топика
Ответ на: комментарий от shimajima

не гостайна. чистая коммерция с участием иностранного государства

внезапно (как обычно). Требования «иного» государства к обеспечению гос.(и/или коммерческой)тайны не сильно отличаются от местных реалий. Пункта «зафигачить +x на страницу памяти» и исполнить, там гарантированно нет. Более того, за подобное могут порвать контракт к чёртовой матери.

MKuznetsov ★★★★★
()
Последнее исправление: MKuznetsov (всего исправлений: 1)
Ответ на: комментарий от shimajima

Сразу.

Нет у меня телеги. Ни вотсаппа, ни сигнала. Ни чего из этого.

Просто потому, что в Средние Века Св. Инквизиция ни одного стоящего колдуна не сожгла. На то он и «стоящий»… ;)

Так что, поищем… ;)

P.S. Да, вижу. Вы искали программиста на реализацию брокера сообщений. Ну да, согласен, ни RabbitMQ, ни Kafka тут не подойдут. Выше обсуждение примерно по этой теме было, как я понимаю? 05.02 с.г. было сообщение.

Ладно. Ниточку потом потянем. Сейчас пойду-ка я спать.

P.P.S. Так… Стоп. Пожалуй, перловика я Вам подгоню. Дяденька в принципе, как и я возрастной, но когда-то лет 10 отпахал в Лаборатории Касперского. Надо будет у него узнать есть у него работа или нет. Давненько не перезванивались.

И да, а это правда что по хентай-его-манге можно выучить японский в объёме здравствуйте, спасибо-пожалуйста и не могли бы Вы убрать своё толстое зелёное щупальце из моей задницы? =))) Надеюсь, там японский учить не надо будет, а то мы с перловиком с тем как-то к возрастной категории относимся, которой такие «эксперименты» не особо интересны… =)))

Moisha_Liberman ★★
()
Последнее исправление: Moisha_Liberman (всего исправлений: 2)
Ответ на: комментарий от shimajima

Связь в лучшем случае раз в пол часа по модему через EDGE

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

ya-betmen ★★★★★
()
Ответ на: Сразу. от Moisha_Liberman

Про щупальце шутка улыбнула. На перл человек нужен, это правда. Но задача там простая - реализовывать. API на json для торговли и логистики. Там проекты разные… абсолютно. Так у меня jabber есть 2154242153085202020 at jabber ru

shimajima
() автор топика
Ответ на: комментарий от shimajima

Я скорее говорю про возможность поставить клиенту один закриптованный сервер в сейфе и с двумя проводами вместо того чтобы защищать каждое приложение (как я понимаю при наличии доступа к железу любая защита вскрывается рано или поздно).

Хотя я хз про вашу специфику.

ya-betmen ★★★★★
()
Последнее исправление: ya-betmen (всего исправлений: 1)
Ответ на: комментарий от shimajima

Ладно.

Как говорится, напьёмся-разберёмся. Пока у меня тут по текущим проектам сохраняется состояние «просто звиздец», разбираюсь.

С перловиком я ничего гарантировать не могу. Я с ним, скажем так, знаком, но сам не работал. Просто, исходя из того, что перл это не самая распространённая в наши времена шняга, я думаю что из более молодых коллег адекватного реалиям перловика будет найти несколько затруднительно. А уж потянет он проект или нет – я без малейшего понятия. Ну и да. Перловики сами по себе это отдельная тема, т.к. язык, где одновременно можно ООП, ФП и голимую императивщину, при чём всё будет работать, это надо отдельную структуру головного мозга иметь.

Moisha_Liberman ★★
()
Ответ на: комментарий от den73

Также там есть слой абстракции, позволяющий запустить ЯОС как приложение или как ОС. Приложение может запускаться под Unix/X11 или под Windows.

Образ жёсткого диска в формате IMG занимает 150Мб. И есть своего рода «послойная файловая система» в зачаточном состоянии, когда каждый файл сначала ищется в «рабочей директории», а уже потом - в обычной. Т.е. можно сделать иммутабельный образ диска и на него мутабельную рабочую директорию и получится как бы мутабельная файловая система.

Теперь вопрос - каковы предпосылки запихать всё это в webassembly и открывать как страничку в браузере? Очевидно, нужно написать бекенд для компилятора и реализовать слой абстракции от железа.

Как оцениваете трудоёмкость? Есть ли примеры подобного? Я пытался искать какие-то эмуляторы, нашёл что-то, но не нашёл на webassembly (впрочем, искал недолго).

лучше бы Juice допиливали бы, ИМХО.

Subject: GitHub - metacore/Juice: Juice - Oberon answer to Java browser plugins (1997)

хотя. ну если так уж хочется именно WASM, нужно наверное допиливать компиляторы оберона в сторону LLVM (например: An Oberon-2 LLVM front-end , duo2c Durham University Oberon-2 Compiler ) + какой-то Sexprs на Active Oberon (вот там прямо в A2_SVN /aos/source/{LayLa*, LeoConfig.Text, редактор Leonardo вообще) есть язык DSL описания формочек наподобие лиспа:)

—LeoConfig.Text—

...
LayLa.AddToLibrary Leonardo.EditorMenu
(HLIST Panel (border=0 w=640 h=20 hdist=0 vjustify=CENTER) (ATTR Border=0 Locked=TRUE)
	(NEW NamePlate (w=110) (ATTR Name="Title"))
	(NEW Button (w=39 h=18) (ATTR Caption="Close" Cmd="Desktops.CloseDoc"))
	(NEW Button (w=39 h=18) (ATTR Caption="Hide" Cmd="Finder.Minimize"))
	(NEW Button (w=39 h=18) (ATTR Caption="Grow" Cmd="Desktops.Grow"))
	(NEW Button (w=39 h=18) (ATTR Caption="Revert" Cmd="LeoPanels.Revert"))
	(NEW Button (w=39 h=18) (ATTR Caption="Apply" Cmd="LeoPanels.Apply"))
	(NEW Button (w=39 h=18) (ATTR Caption="Ok" Cmd="LeoPanels.Ok"))
)
... и т.п.

ну то есть: какой-то парсер Sexprs есть, нехватает полноценного лиспа под Active Oberon.

WASM можно генерить двумя способами: через LLVM (имхо проще) или сразу генерить Sexprs-ы типа той же LayLa.

здесь по идее нужно бы генерить в нечто скорее LayLa-подобное чем голый WASM.

anonymous
()
Ответ на: комментарий от anonymous

ЗЫ. ВНЕЗАПНО, скачав и потыкав себе примеры из A2_SVN, осознал, зачем мне вообще нужен оберон:

  1. портировать TeX:The Program and the Book исходники из LitProg книжки + репозитория изначального TeX-на-паскале на активный оберон.

  2. портировать какое-то LitProg средство на активный оберон, например fw-utf8 (ранние исходники были на Ada) или nuweb. хотя может даже нужно что-то простое типа inweb.pl из incofom Inform7/6 compiler.

  3. пункты 1., 2. дадут возможность создавать нормальную документацию в PDF дабы писать себе понятное сразу в PDF на TeX-е.

  4. невозбранно комментируя намеренья, чего куда и зачем – написать себе эдакий метапрог на активном обероне в духе LayLa DSL (почти лисп только без eval, лол) (или портировать PicoLisp) и редактора Leonadro (в смысле, как там сделаны компонентные формы из такого вот недолиспа).

  5. прикрутить какую-то смотрелку PDF типа того же mupdf, может даже на том же самом A2 свою реализовать.

  6. написать LitProg IDE допилив простой текстовый редактор типа PET.

  7. получить минималистичное самодостаточное самодокументируемое понятное литературно-грамотное всё-в-одном:

~30 Mb минималистичный WinAos, ~100 Мб более полноценная сборка.

и далее допиливать всё вышеобозначенное.

любопытно, что в исходниках A2 вообще-то есть что-то типа смотрелки DVI, ещё чего-то на тему TeX. но сильно брошенное и недоделанное.

а так-то да – A2 идеальная самодостаточная среда для написания всяческих метапрогов.

в том смысле, что вот операционная система – мультиплексирует доступ к ресурсам, отображая виртуальные логические в реальные физические и вводя всякие лишние coarse-grained абстракции (типа процессов, драйверов) с логическими слишком абстрактными ресурсами (виртуальное адресное пространство процесса, paging, swapping, та же «одна fs на все /proc» vs. «множественные namespaces как в plan9» vs. «layered fs типа unionFs+squasfs или обероновой в A2 FS»)

операционная среда же активных объектов (не важно на чём: на обероне, InterLisp лиспе в medley, Symbolics lisp в OpenGenera, Common Lisp в LispOS, mezanno, и т.п. , сам смоллток образ, dynace, objective C и прочие SmallTalk+C+метаклассы среды) – по идее уже содержит более fine-grained абстракции типа активностей и активных объектов, более конкретных ресурсов и абстракций ну и т.п.

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

ну или вот в дисплей сервере Arcan (about, revisiting-the-arcan-project, обучающие видео ) / Durden, вот это всё с ZUI на wayland (внезапно, осознал зачем мне вообще может в принципе понадобиться wayland) :

по идее тоже пытаются делать какую-то операционную именно среду скорее чем просто систему+приложения.

повторно изобретая нечто в духе оберонов, инферно, смоллтоков с интерлиспами и прочее всякое такое.

Как оцениваете трудоёмкость?

известно как – если в лоб, то овер 10500. если же выбрать какую-то годную идею, концепцию архитектурную – то вполне feasible.

хотя опять же, имхо: лучше бы Juice до ума допилили.

anonymous
()
Ответ на: комментарий от den73

вот опять же ИМХО: миру срочно нехватает реализаций лиспов под A2 OS.

хотя бы для начала чего-то минималистичного, в духе PicoLisp или Kernel vau-exprs схемы.

типа срочно надобно взять за основу парсер из LayLa лиспового DSL и допилить туда полноценный Eval на активных объектах. чего-то простого минималистичного типа picolisp, kernel, или этот, ну как там его минилисп с 40+ реализациями).

или там smalllisp (или online, или в вебархиве покопаться):

SmallLisp – лисп на Modula-3 / TurboPascal

Modula-3: http://www.cs.sfu.ca/~cameron/smlisp/M3smlisp/

wget -k -m http://www.cs.sfu.ca/~cameron/smlisp/M3smlisp/

anonymous
()

Я сто лет назад использовал библиотеку GNU lightning. Мне понравилось, могу рекомендовать.

GNU lightning is a library that generates assembly language code at run-time; it is very fast, making it ideal for Just-In-Time compilers, and it abstracts over the target CPU, as it exposes to the clients a standardized RISC instruction set inspired by the MIPS and SPARC chips.

Legioner ★★★★★
()
Ответ на: комментарий от anonymous

Звучит интересно. Но задача подразумевает статично собранный бинарник (ELF) с некой магией внутри. Желательно чтобы до ключевых операций работы с некими важными данными был затруднён доступ.

shimajima
() автор топика
Ответ на: комментарий от shimajima

Задача состоит в том чтобы защитить чувствительные данные, знание которых может привести к финансовым последствиям (своруют деньги). Эти данные загружаются клиенту раз в неделю. Клиент может без сети стоять трое суток.

Каким образом используются эти данные?

Самый правильный способ это выделить алгоритм обработки этих данных, прошить его в специальную микросхему, устойчивую к взлому, которая подсоединяется к компьютеру с помощью USB. В микросхеме зашит закрытый ключ (уникальный для каждого устройства), ты отсылаешь данные, зашифрованные для этого ключа. Программа через USB пересылает данные микропроцессору, микропроцессор расшифровывает данные, делает нужные вычисления, всё это не покидает пределов микропроцессора, а через USB уже отдаются результаты вычислений.

Такая схема не ломается в разумные бюджеты. Но микропроцессор, подчеркну, нужен специальный, защищённый, такие на рынке есть и стоят не дорого, в форм-факторе USB-токенов. Конечно самое главное ограничение тут в том, что микропроцессор слабенький и сложные алгоритмы не потянет. Ну и физическое устройство отсылать не всегда возможно.

Legioner ★★★★★
()
Последнее исправление: Legioner (всего исправлений: 1)
Ответ на: комментарий от shimajima

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

Для армов есть OP-TEE поверх TrustZone. Секурность чуть лучше, чем шифрование. Но отдельный сервер надёжнее.

AlexVR ★★★★★
()
Ответ на: комментарий от den73

Теперь вопрос - каковы предпосылки запихать всё это в webassembly и открывать как страничку в браузере? Очевидно, нужно написать бекенд для компилятора и реализовать слой абстракции от железа.

там, я так понимаю – можно пойти разными путями.

начиная от полноценного «в лоб»: Fox Compiler научить генерировать wasm бинарники, и/или реализовать wasm виртуальную машину под оберон, например портировав с go какой-то минималистичный wagon, gasm + обвешаться wasm-lisp + awsm + игруля с уточкой awsm-game

либо гошные васм лиспы/песочницы научить грузить *.Gof{U,Uu,W,Ww} бинарники

ну или читерский:

  1. установить нативный а2 на «голое железо» виртуалки минималистичной в духе qemu, tinyemu (см. как X512 порт Гаечки под risc-v делал, под tinyemu), и компилять в нативные бинарники обероновы

  2. прикрутить какую-то запускалку минималистичную (из webassembly) образа этой мини виртуалки, в духе порта блекбокса под линукс, гайку.

на этом этапе вообще не обязательно уметь компилять оберон в wasm бинарники

  1. портировать вот эти минималистичные го вм из го на оберон чтобы запускать бинарники из го в васм из-под оберона, генерить аналогичные го примеры васм бинарников из-под оберона

  2. реализовать полноценный бекенд в васм бинарники из-под оберона (изобрести формат обероновых бинарников какой-нибудь *.GofWasm в дополнение к *.Gof{U,Uu,W,Ww) и нативному

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

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

Канонiчный способ, ИМХО: всё-таки раскручивать компиляцию в wasm text format как лиспового Sexpr DSL представления.

и далее какой-то недолисп под А2 реализовать, и в нём уже wasm vm минималистичную в духе gasm / wasm-lisp реализовать, и через неё запускать.

но это, навскидку, как бы не дольше второго способа.

anonymous
()
Ответ на: комментарий от den73

что самое смешное, что Juice+NPAPI+старый netscape 3.02 (хотя нужен не совсем он а просто какая-то запускалка со старым NPAPI) похоже компактнее всего этого wasm’a в разы.

исходники старого netscape 3.02 опубликовали на интернетархиве. но там навскидку каких-то файлов не хватает чтобы всё полностью собиралось.

вот он, прогресс хренов. всё то же, только на васме – только толще.

хипстеры такие хипстеры: я уже давно подозреваю что никакого такого прогресса особого толком и нетути. ежели современные технологии всё ещё ниасилили делать всё то же что и старые – и при этом эти новые в разы громоздче и толще.

ну зато новые модно-молодёжнее, ога. лолъ.

anonymous
()
Ответ на: комментарий от anonymous

Мммдддааа...

я уже давно подозреваю что никакого такого прогресса особого толком и нетути

И тут, на третьи сутки, индеец Зоркий Глаз увидел что в амбаре, куда его посадили, нет одной из стен…

Биииидаааа-пичаааль… =)))

Moisha_Liberman ★★
()
Ответ на: комментарий от invy

Спасибо за ссылку. Изучаю. В очередной раз убеждаюсь что коллективный разум это сила.

shimajima
() автор топика
Ответ на: комментарий от pon4ik

пропатчить бинарник

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

dvetutnev
()
Ответ на: Сразу. от Moisha_Liberman

Передавай Сергею привет из солнечного Берлина.

2ТС: О каких объемах данных идёт речь? Возможно, аппаратное решение действительно будет самым простым.

aTanzu
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.