LINUX.ORG.RU

Верификация динамически загружаемой библиотеки

 , , , ,


0

2

Предисловие:

Игровые файлы, текстуры, звуки, модели, etc компилируются в .so или .dll библиотеку которые динамически (через SDL_LoadObject()) подключаются к движку и он уже автоматически извлекает char * буферы файлов по запросу имени типа "asset/texture.dds" и посредством SDL_RWFromConstMem() передаются в обработчики. После получения ресурсов библиотека выгружается дабы не занимать память.

Суть:

Пока что у меня всё тупо, гружу библиотеку пробую загрузить от туда функцию const char * asset_lib_verify(const char * msg) если она есть передаю ей "ping" в ответ она должна отправить "pong" и если всё ок я уже запрашиваю указатель на структуру с данными.

А на будущее хочется как то проверять что библиотека с ресурсами не была подменена, ну например как мера защиты от читеров если такое потом будет нужно.

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

Но мне кажется это ненадёжным ведь sha строку в самом приложении могут вручную перебить на нужную.

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

UDP: В долгий ящик или на помойку, пока что вывод >> ненужно © <<

Ну, можно верифицировать хэши ключом. Можно запинить сертификаты и ключи. Вы же понимаете что это всё никого не остановит при минимальном желании. А активную защиту пользователи явно не оценят.

anonymous ()

Но мне кажется это ненадёжным ведь строку «pong» в самом приложении могут вручную перебить на нужную.

Пофиксил. Тебе с таким подходом нужен drm

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

А активную защиту пользователи явно не оценят.

В случае однопользовательских игр, да, это зло. А вот в случает онлайна с даже крохотной соревновательной жилкой это жизненно необходимо, ну разве что онлайн игра не HVH =). Я сейчас скорее не делаю, а думаю можно ли это сделать как то не монструозно.

LINUX-ORG-RU ()

Зачем так извращаться с хранением данным в динамической библиотеке?

И вопрос: у вас игра локальная или мультиплеер? Во втором случае придётся ооочень сильно заморочиться.

SoulThreads ()

как мера защиты от читеров если такое потом будет нужно

Ты сначала сделай что-то нужное, а не просто бесполезный «форк Corange», и потом уже будешь рассуждать о «читерах» и прочем.

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

Мне на это на всё насрать, если один игрок кинул под себя смок что-бы его не увидел другой, другой не должен иметь возможности добавить альфа канал текстурам и сделать себе WH . Ну это в идеале.

LINUX-ORG-RU ()

Если ты хочешь чтоб все пользовались только такой конкретной библиотекой с ресурсами, не могли подменить ее чем-либо еще - зачем вообще библиотека? Засунь все ресурсы в основную программу и не мучайся. И контрольную сумму пересчитывай в рантайме для всех этих данных

SZT ★★★★ ()
Ответ на: комментарий от LINUX-ORG-RU

Ну, можешь хешировать все ассеты по отдельности, и хеши хранить не просто строчками, а перевернуть и в шахамтном порядке каком-нибудь раскидывать по массиву, а потом ещё у этого массива сосчитать хеш. И данные потом поксорить с этим массивом.

Можно много конструкций запутанных соорудить, но упорных это не остановит. При условии, конечно, что это вообще кому-то нужно окажется.

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

Засунь все ресурсы в основную программу и не мучайся.

Ну у меня 3 типа ресурсов, с ФС, из so/dll либ и да есть статические ресурсы которые из тойже библиотеки только скомпилированной в виде объектника есть. Динамические для памяти, загрузил получил данные и выгрузил. Для чего-то мелкого да, можно по сути просто выбрать режим компиляции прямо в исполняемый файл, а вот для чего-то большого уже лучше загружать и выгружать + иметь разные версии для разных режимов, например несколько so`шек c разными по качеству текстурами. Работать с этим всем легко и удобно.

LINUX-ORG-RU ()
Ответ на: комментарий от SoulThreads

При условии, конечно, что это вообще кому-то нужно окажется.

Пока в этот лютый ПриветМир «играет» ровно один человек. Надеюсь, не нужно объяснять кто это?
https://www.youtube.com/watch?v=cLt57H5NXZE&feature=youtu.be&t=186

ОСТОРОЖНО ПО ССЫЛКЕ ШОК КОНТЕНТ!

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

но упорных это не остановит

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

andreyu ★★★★★ ()
Ответ на: комментарий от LINUX-ORG-RU

ахахах

В моем понимании ты такой себе Metaprog Junior. Я бы выдал тебе серебряную медаль за почетное второе место в номинации «Засирание форума своим ПриветМир'ом».

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

ахахах

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

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

Ну, ты можешь понимать что хочешь, я пилю просто ради интерса и фана. У меня всё скромно, маленькая игрушка для забавы, так что медальки себе оставь. Ну, а на счёт засирания форума привет миром, ну есть такая штука как наглядность, легче показать проблему и привести пару простых строчек, чем выкидывать ссылку на гитхаб и сказать памагитэ у мене э работаит эээ. Успокойся уже. Уж какая никакая техническая тема, а не очередной флуд про то какой дистрибутив лучше выбрать. =) Добра и мира, харе уже долбить одно и тоже

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

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

Да, именно прям ждать ничего не стоит. Что можно ждать от любительского проекта? Я ничего не анонсировал и не раз упоминал что будет готово к пенсии :D А может вообще всё брошу и удалю.

LINUX-ORG-RU ()
Ответ на: комментарий от LINUX-ORG-RU

А вот в случает онлайна с даже крохотной соревновательной жилкой

Тоже нахер не нужно. Я же хочу игрокам сделать себе яркие скины, вырезать бамп с карт, етц. При этом игровой код даже не трогаю.

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

Наконец-то до тебя дошло. Пора делать форк форка Corange - «Egnarocorange».

Ну, я могу. А вот ты нет. Так что не завидуй :D Ну и если бы хоть каплю понимал то знал что использовать Corange без серьёзных доработок нельзя. Поэтому если ты на нём что-то хочешь делать у тебя просто выбора нет как пилить отдельную ветку где придётся ломать совместимость.

И да, ща бы ещё про Форки юморить, чуть ли не половина всего чем ты пользуешься на скойм ПК в том или ином виде форки. Если ты конечно не виндузятник =)

LINUX-ORG-RU ()
Ответ на: комментарий от LINUX-ORG-RU

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

У тебя каша в голове. Нормальные люди в таких случаях создают минимальный рабочий пример на gist.github или в виде отдельного мини-проекта, и начинают вести предметную дискуссию в стиле «было-стало», с наглядными результатами, а не твоё типичное «ууу, у меня здесь не работает, но что именно не работает я вам не покажу».

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

использовать Corange без серьёзных доработок нельзя.

Перевожу на русский: «Использовать любительский, экспериментальный игровой движок, написанный автором для улучшения его навыков программирования на C, а также для использования в сугубо ЛИЧНЫХ целях, без серьёзных доработок нельзя.»

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

Покажи мне хоть один такой тред… где всё по нормальному это раз. И любую мою тему поймёт любой технарь это два, если задавать вопрос то по узкой конкретной цели, а не сваливать на людей целый минипроект в котором им ещё разбираться нужно будет, людям это нахрен не надо. Ну разве что протестировать уже что-то готовое. Короче анон, не знаю чем я тебя так привлёк, но выглядит это странно. В маленькой програмульке иногда проблемы советы для решения которой я иногда ищу на форуме. И чего тебя так от этого бомбит даже не представляю. =) Странный нынче анонимус пошёл. Ты бы хотя бы потролил чтоль =) А то ни туды ни сюды.

LINUX-ORG-RU ()
Ответ на: комментарий от LINUX-ORG-RU

А вот в случает онлайна с даже крохотной соревновательной жилкой это жизненно необходимо

Если теоретически что-то можно сделать на клиенте, то у тебя не игра, а кнопкодроч, как csgo или любой другой шутан. Придумай нормальную игру и надобность отпадёт.

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

Да это просто мысли в слух, нормальную сетевуху я не осилю. От затеи я уже полностью отказался (от огораживания, но не от компиляции ресурсов в библиотеки). А касательно нормальной игры, эх кто-бы знал, что это такое нормальная, я уже две 90 листовые тетради исписал и изрисовал концептами, 100500 прототипов налабывал и удалял, сё хирня какая то =)

LINUX-ORG-RU ()
Ответ на: комментарий от LINUX-ORG-RU

А касательно нормальной игры, эх кто-бы знал, что это такое нормальная

Основа - turn based strategy с минимальным рандомом или вообще без него. Да, по сути это будет вариация шахмат, но всё остальное - это задротство и читеры

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

но всё остальное - это задротство и читеры

Ну почему же, сразу задроство, есть просто для веселья, типа osu! Там конечно можно задротить огогого, но можно под музыку просто поклацать, минут 5 потыкал и настроение как-то поднимается, потому что активность и ритм!

Я было хотел сделать что-то подобное, но не тыкалку, а прыгалку =)

А стратегии, стратегии это хорошо, но это тонна механик, взаимодействий и прочего. У меня цели более простые и скромные =) У меня и так высеры получаются, на стратегии замахиваться рановато )

LINUX-ORG-RU ()
Ответ на: комментарий от crutch_master

Так tbs в разы проще сделать

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

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

Если в игре нужно докатить шарик из точки А в точку Б и всё это скучно, а если Шарик в точке А хочет к маме в точку Б и плачет его нужно докатить, но сын шарик в силу своей природы и юнного возраста имеет свойство телепортироватся в ритм звуков окружающего мира и телепортируется он на 1 метр в лево при Басах и на 1 в право когда поёт девушка, это свойство всех шариков деток…. Ну а теперь врубается вокал околодабстеп и теперь попробуй докати телепортирующегося сыну шарика до мамы =)

LINUX-ORG-RU ()
Ответ на: комментарий от LINUX-ORG-RU

В разы не в разы, для TBS какой бы он ни был нужно много-много-много хорошего арта,звуков,анимации.

В шахматы, шашки и нарды играют тысячелетиями и никакой графон там не нужен, так что можешь хоть на псевдографике делать, главное система. А сюжет онлайн игре нужен как порнухе.

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

Ну, я понял какие тебе игры нравятся =) Таких уже очень много и очень много качественных и хороших, как визуально так и по механикам. Повторюсь я конечно больше ради интереса делаю, но выше головы не прыгаю, ну если конечно загорится в глазах. А пока нет. Пока есть другие задумки, которые просто интересны.

Короче у меня планов нет, я тупо играюсь и экспериментирую, завтра может вообще всё удалю нахрен, а может внезапно начну мега стратерию пилить. Чёрт, его, короче, знает. И это прикольно =)

LINUX-ORG-RU ()