Такое ощущение что вы спорите со своей же расшифровкой вакансии, а не с тем, что там написано.
1. Ок.
2. Более вероятный вариант, что есть проекты с интерфейсом на QtWidgets, а есть на QML. И хотят, чтобы кандидат мог помогать и там и там.
3. Я могу согласится, что не самое удачное хотеть одновременно и интерфейсника, и программиста, и архитектора в одном кандидате, но ваши вопросы как-то о другом. Не думаю, что вакансия стала бы лучше от формулировки «Участие в проектировании клиент-серверной архитектуры трех систем.»
4. Вы акцентируетесь на словах «C++», а мне кажется, что стоило бы на слове «опыт». От кандидата ждут именно опыт создания программ, а не 10-дневного курса формошлепства.
5. Вы же помните, что Qt это не только формочки? Там хватает и работы с файлами, сетью, массивами.
6. Опять у вас все свалилось в интерфейс, хотя семафоры, атомарные операции и прочие примитивы синхронизации более уместно было бы вспомнить.
7. «Понимать ООП», «писать используя ООП», «писать на c++» и «использовать ООП в c++» это все довольно разные понятия.
8. Вакансия указывает среду, а в вас какие-то параноидальные мысли сразу.
Довольно необычная претензия к статье старше двух лет при очевидной временности ссылки. Разработчиков на Питоне не настолько мало, чтобы вакансия висела годами.
Но правда ваша, ссылку стоило удалить, как она потеряла актуальность. Удалил сейчас.
Типовой сценарий атаки dll hijack подразумевает, что есть некоторое приложение по фиксированному пути, например сервис, который запускается с высокими правами. «Подложив» dll к такому приложению мы получим запуск своего кода с теми же правами.
В таком сценарии нет смысла копировать приложение к dll, поскольку его кроме нас запускать не будет, а значит и права будут те же. Но в случае, как в статье, это дает возможность запускать свой код от имени подписанного бинаря.
В первом сценарии можно рассматривать проверку подписи, но там есть свои особенности, например, загрузка dll происходит до работы основного кода, поэтому нельзя добавить проверку подписи к загружаемым dll из таблицы импорта. А во втором сценарии это все и вовсе бессмысленно — все действия проходят под контролем пользователя и легко динамически правятся.
Спасибо. Да, вы верно описали механизм который позволил внедрить свой код в приложение с подписью. В общем смысле, это можно назвать «обратный dll hijack» — мы не dll подкладываем к приложению, а приложение к dll.
В моем понимании от этого нет смысла защищаться — даже если руками в файле прописать все зависимости по полным путям (я проверял — можно прописать полные пути в таблице импорта и все будет работать). Если приложение работает от имени пользователя, то он имеет почти полный контроль над всем, что происходит в адресном пространстве этого приложения. Не было бы возможности подменить dll — поставил бы хук или просто OpenProcess + WriteProcessMemory.
Тут скорее дело в самой архитектуре фон Неймана — подпись хорошо работает если файл рассматривается как данные. Если файл рассматривается как код, то тут уже все печально.
Другие антивирусные продукты я не рассматривал, а среди не антивирусов я подобную проверку встречал в 3 продуктах — во всех сработал обход типа «обратный dll hijack».
У меня проблем в прикладывании файлов не было. Отвечали, в общем-то не шустро, но в части отчета меня это не беспокоило, поскольку я всегда вместе с отчетом прикладываю дату до которой я жду реакции (45 дней). В указанный срок, я все ответы получил.
Не знаю что вам ответить.
Из 15 минут что я потратил на квест жалко только те 5, что ушли на перебив в предыдущем задании.
Как только задачи выходят за рамки онлайн-сервисов и условно базового софта (архиватор, просмотрщик картинок, хекс-редактор) — такая задача для меня автоматически становится плохой.
Пронумеруем бутылки от 1 до 1000. Для удобства сразу запишем номера бутылок в бинарном виде: 0000000001, 0000000010, 0000000011, ..., 1111101000.
Для каждой бутылки будем трактовать эту последовательность как инструкцию для того, кому из крыс давать вино из этой бутылки. Например, для бутылки номер 2 — 0000000010 — первым 8 крысам ее не даем, девятой — даем, десятой не даем.
После смерти крыс переводим их состояние в обратной последовательности. Грубо говоря, если умерли первые две и последняя крысы, значит отравленная бутылка имела номер 1100000001 — бутылка номер 301.
Разрешите дополнить ответ, просто для точности.
Докажем, что 9 и меньше крыс не хватит.
Рассмотрим пространство событий. У нас есть исходная ситуация — 1000 бутылок, среди которых одна отравлена. У нас есть 9 и меньше крыс, на которых мы опробуем вино тем или иным образом. Через час у нас будет не более 512 различных ситуаций (для каждой из 9 крыс будет известно мертва она или выжила). По принципу Дирихле в таком случае у нас будет не менее двух исходных событий, которые соответствуют некоторому результату. Простым языком это означает, что вне зависимости от того, как поить крыс, при каком-то из исходов будет ситуация в которой этот исход возможен если отравлена одна из двух бутылок, что не дает нам различить ответ.
Значит 9 крыс не хватит, а пример для 10 строится тривиально бинарным кодированием.
Мне кажется, что для иллюстрации статьи отлично подойдет вот это видео.
Вкратце — видео рассказывает о том, как поймали на жульничестве игрока в дум, анализируя его демку. Анализ показал, что, скорее всего, файл был изменен снаружи, а не записан в игре.
Все проблемы можно решить WD-40, скотчем или отладчиком. И если проблема не решается, значил мало WD-40 или мало скотча или отладчик не той разрядности.
1. Ок.
2. Более вероятный вариант, что есть проекты с интерфейсом на QtWidgets, а есть на QML. И хотят, чтобы кандидат мог помогать и там и там.
3. Я могу согласится, что не самое удачное хотеть одновременно и интерфейсника, и программиста, и архитектора в одном кандидате, но ваши вопросы как-то о другом. Не думаю, что вакансия стала бы лучше от формулировки «Участие в проектировании клиент-серверной архитектуры трех систем.»
4. Вы акцентируетесь на словах «C++», а мне кажется, что стоило бы на слове «опыт». От кандидата ждут именно опыт создания программ, а не 10-дневного курса формошлепства.
5. Вы же помните, что Qt это не только формочки? Там хватает и работы с файлами, сетью, массивами.
6. Опять у вас все свалилось в интерфейс, хотя семафоры, атомарные операции и прочие примитивы синхронизации более уместно было бы вспомнить.
7. «Понимать ООП», «писать используя ООП», «писать на c++» и «использовать ООП в c++» это все довольно разные понятия.
8. Вакансия указывает среду, а в вас какие-то параноидальные мысли сразу.
Но правда ваша, ссылку стоило удалить, как она потеряла актуальность. Удалил сейчас.
В таком сценарии нет смысла копировать приложение к dll, поскольку его кроме нас запускать не будет, а значит и права будут те же. Но в случае, как в статье, это дает возможность запускать свой код от имени подписанного бинаря.
В первом сценарии можно рассматривать проверку подписи, но там есть свои особенности, например, загрузка dll происходит до работы основного кода, поэтому нельзя добавить проверку подписи к загружаемым dll из таблицы импорта. А во втором сценарии это все и вовсе бессмысленно — все действия проходят под контролем пользователя и легко динамически правятся.
В моем понимании от этого нет смысла защищаться — даже если руками в файле прописать все зависимости по полным путям (я проверял — можно прописать полные пути в таблице импорта и все будет работать). Если приложение работает от имени пользователя, то он имеет почти полный контроль над всем, что происходит в адресном пространстве этого приложения. Не было бы возможности подменить dll — поставил бы хук или просто OpenProcess + WriteProcessMemory.
Тут скорее дело в самой архитектуре фон Неймана — подпись хорошо работает если файл рассматривается как данные. Если файл рассматривается как код, то тут уже все печально.
Другие антивирусные продукты я не рассматривал, а среди не антивирусов я подобную проверку встречал в 3 продуктах — во всех сработал обход типа «обратный dll hijack».
Обычно такие проверки обходятся очень легко.
Из 15 минут что я потратил на квест жалко только те 5, что ушли на перебив в предыдущем задании.
Как только задачи выходят за рамки онлайн-сервисов и условно базового софта (архиватор, просмотрщик картинок, хекс-редактор) — такая задача для меня автоматически становится плохой.
Для каждой бутылки будем трактовать эту последовательность как инструкцию для того, кому из крыс давать вино из этой бутылки. Например, для бутылки номер 2 — 0000000010 — первым 8 крысам ее не даем, девятой — даем, десятой не даем.
После смерти крыс переводим их состояние в обратной последовательности. Грубо говоря, если умерли первые две и последняя крысы, значит отравленная бутылка имела номер 1100000001 — бутылка номер 301.
Докажем, что 9 и меньше крыс не хватит.
Рассмотрим пространство событий. У нас есть исходная ситуация — 1000 бутылок, среди которых одна отравлена. У нас есть 9 и меньше крыс, на которых мы опробуем вино тем или иным образом. Через час у нас будет не более 512 различных ситуаций (для каждой из 9 крыс будет известно мертва она или выжила). По принципу Дирихле в таком случае у нас будет не менее двух исходных событий, которые соответствуют некоторому результату. Простым языком это означает, что вне зависимости от того, как поить крыс, при каком-то из исходов будет ситуация в которой этот исход возможен если отравлена одна из двух бутылок, что не дает нам различить ответ.
Значит 9 крыс не хватит, а пример для 10 строится тривиально бинарным кодированием.
Вкратце — видео рассказывает о том, как поймали на жульничестве игрока в дум, анализируя его демку. Анализ показал, что, скорее всего, файл был изменен снаружи, а не записан в игре.
1984
Мастер и маргарита
Пираты карибского моря
Алиса в стране чудес
Большая перемена
Звездный путь
Золушка
Голодные игры
Из сомнительного:
В клубе
Синьор Робинзон
КЯВВМ
Моана
Аквамен
Вечера на хуторе близ Диканьки