Как стать автором
Обновить

Комментарии 26

Сталкивались ли вы с crackMe программами реализованными в рамках использования какой то модели вычислителя (вне родного нативного кода), виртуальной машины и насколько это сложнее/проще ломать в сравнении с представленным в статье крякми?

Да, вот пример такого crackme на основе виртуальной машины https://habr.com/ru/articles/712290/ .

Байт-код виртуальной машины - не сложнее x86 ассемблера. ВМ шагает по строке байтов, интерпретирует команды из одного или нескольких байтов и выполняет действия.

string program = "...";
for (char code: program) {
	switch (code) {
		case 0x1: f1(); break;
		case 0x2: f2(); break;
		/* ... */
		default: /* invalid opcode */
	}
}

Изучаем систему команд ВМ и дальше изучаем алгоритм защиты.

А что если внутри ВМ написана еще одна ВМ?

Повторять, пока ВМ не закончатся?

А вот это уже интересней :)

Нашел решение crackme c France Cybersecurity Challenge 2021: ВМ в 5 слоев виртуализации.
https://mrt4ntr4.github.io/FCSC21-CTF-VMV/
Жаль, не нашел сам бинарник.

Еще по теме: Tuts 4 You - Learn to devirtualize x86 code

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

Статья озаглавлена "Исследуем защиту программ на практике" и задача поставлена "Исследую защитные алгоритмы на практике". Статья решила маленькую часть большой проблемы. Предстоит еще много работы.

А почему не купить готовую защиту или даже взять из open source, если есть?

Любую защиту можно сломать. Где ваш порог трудоёмкости на создание защиты?

Мой порог трудоемкости - "столько, сколько потребуется" :) Чем тщательней защищаю секреты, тем крепче сплю. Хочешь сделать хорошо - делай сам.

Можно купить иллюзию безопасности. Когда ломают свежую версию условного AutoMegaSuperProtect 3.5, ломают и ПО, которое им защитили. Для навесных протекторов выходит AutoMegaSuperProtectUnpack 3.5 или руководство по распаковке, для аппаратных защит - эмулятор. Разработчик защиты пустит ваши деньги на разработку AutoMegaSuperProtect 3.6, продаст вам ее снова и... новую версию ждет та же судьба.

Open-source - открытое и бесплатное ПО. Например, UPX - упаковщик, но его задача - не защита ПО, а сжатие файла.

Хорошая защита вплетена в функции программы и неотделима от них. Если хакер пропустит хотя бы одно, сломанная программа будет работать нестабильно или откажет вовсе. Каждую следующую версию программы придется ломать снова.

Программа защищена, когда ломать защиту дороже, чем купить программу.

Программа защищена, когда ломать защиту дороже, чем купить программу.
Ну это если программа уникальная и дорогая.
А есть же программы которые нужны многим. Взять тот же Cubase, нормально взломана была только 5-я версия 2010 года. Потом на много лет - тишина. Главный хакер группы которая занималась Кубейсом разбился в аварии, и... всё. Ну там кстати был аппаратный ключ. Вроде последние версии всё же взломали.
Вопрос кто получает прибыль за взлом такого софта? Приходит в голову, что только владельцы трекеров зарабатывающих на рекламе.

Борьбе капиталистов с пиратами вечна :)

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

Лоуренс Лессиг в книге «Свободная Культура» поясняет, что качают люди все подряд, потому что могут, потому что любопытно. Закроют торрент - человек найдет другое занятие, а капиталист так и не дождется ни копейки.

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

программа уникальная и дорогая

Корпорации скупают патенты на алгоритмы, душат конкуренцию и творчество - оттого их программы "уникальны".

Лоуренс Лессиг в книге «Свободная Культура» поясняет, что качают люди все подряд, потому что могут, потому что любопытно. Закроют торрент - человек найдет другое занятие, а капиталист так и не дождется ни копейки.

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

Слушайте, а мне прям очень любопытно, как управляется 911 GTS3, может ли кто-нибудь для меня проучить клятого капиталиста и угнать для меня Порше у какого-нибудь миллиардера? Или это не так работает?

Любопытство - это здорово, осваивайте тему :)

Вы подменяете понятия: машина - не программа.

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

Вы потратили деньги и время - написали программу. Вы не несете затрат на копирование программы.

Жадность - когда вы хотите бесконечно тиражировать копии программы и каждую продавать. Жадность - когда вы запрещаете создавать аналоги своей программы, прикрываясь патентами. Людям нужна программа, но правообладатель задирает цену. Что мешает ему раздавать программу за скромную цену или бесплатно, продавая услуги по технической поддержке?

Любопытство - это здорово, осваивайте тему :)

Вы подменяете понятия: машина - не программа.

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

Какой прекрасный образец ничем не прикрытой демагогии.

Как было бы прекрасно жить в мире, в котором RnD случается бесплатно, а все проекты заканчиваются успехом. Интересно, каким образом наш маленький коммунистический друг планирует покрывать издержки на неудачные проекты? Валютные риски? Инвестиции в собственное развитие? За каждым экономическим гением Маркса где-то должен стоять условный Энгельс, снабжающий "творца" невозвратными кредитами. Попробуйте почитать что-нибудь про ваших кумиров, откроете массу нового.

Обратите внимание, где я завершил мысль и о чем говорю. Я пояснил разницу между материальной вещью - машиной - и интеллектуальным произведением - программой.

Вы продали машину - у вас ее больше нет. Вы продали одну копию программы - у вас еще бесконечное число ее копий.

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

издержки на неудачные проекты

Не это ли называется венчурные инвестиции?;)

Инвестиции в собственное развитие?

А насколько велики ваши потребности? Они адекватны способностям покупателей? Это ведь предприниматель планирует, сколько он хочет заработать и в какие сроки. Что вами движет - личные амбиции, жажда сесть в 911 GTS3 или вам по кайфу оттого, что вы смогли решить сложную задачу и решить проблему других людей, которые вам за это даже заплатили?

наш маленький коммунистический друг

Авторитетом давите?:) Если у вас есть успешные программные проекты, это здорово - я ваш опыт не оспариваю. Между нами нет спора: мир не идеален и у бизнеса масса проблем.

Каково ваше личное мнение - где грань между прибылью и сверхприбылью?:)

Хочешь сделать хорошо - делай сам.

Машину, компьютер, телевизор, клавиатуру, мышку, ботинки, часы, трусы и всё остальное - тоже сам? ?

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

Машину, компьютер, телевизор, клавиатуру, мышку, ботинки, часы, трусы и всё остальное - тоже сам?

Не перегибайте :)

Машины собирают на заводе, код пишут, сидя на стуле пятой точкой.

Выбор за вами. Знаете, как устроена машина, мышка, телевизор - не купите хлам, вас не обманет наклейка "Трусы успеха!". Знаете, как устроена защита - не отдадите деньги за кота в мешке.

Вы спросили, почему не готовые защиты и не open-source, я ответил. Убеждать - не моя работа :)

Если вам интересно, погрузитесь в тему, попробуйте что-то сломать или защитить, почитайте книги по ассемблеру, реверсу, C/C++, компиляторам, статьи на WASM. А, может, вам интересней право - возьмите курс на законодательство в IT. А, может, вам интересны мотивы людей - добро пожаловать в психологию и психопатологию :) Вокруг столько всего интересного. Успехов вам во всех начинаниях :)

Не перегибайте :)

Хорошо, тогда сузим - написать самому защиту, текстовый редактор, IDE программисте, базу данных, операционку - тоже сам?

Предположу, что защиту для игр пишут многие человеко-месяцы множество профессионалов по защите. И игры взламывают практически в день публикации. Так что это такое "столько, сколько потребуется"?

Насчёт же ассемблера, реверса и взлома, я все это делал еще в конце 80-х начале 90-х.

Удачи в написании своей 1С ;)

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

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

Давайте на конкретных примерах - какие именно игры, на каких платформах, от какой студии и реально ли у них потеют над защитой. Не потому ли, что люди полагаются на защиту из коробки - protect.dll или steam_api.dll?

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

Удачи в написании своей 1С ;)

Напишу и 2C и 3C, если потребуется :)

Прекрасный выбор. Потратьте пару лет на защиту и профукайте весь рынок и бабки)

Так не поручайте защиту программы Unity-программисту - конечно, он будет год и 11 месяцев учиться ;)

Он и сейчас есть :)

Ничего не поделаешь - Хабр не дает удалить комментарий :)

Мне нравится ваш подход, спасибо за статью.

Лично я больше смотрю в сторону выноса части функционала на сервер. По мне так проще на начальном этапе.

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

Если программа подключается к серверу только для проверки лицензионного ключа, тогда цель остается та же - изменить флаг "программа зарегистрирована" с 0 на 1. Только бороться будем с сетевыми функциями :)

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации