Путь изучения С++ для написания нативных dll библиотек?
Здравствуйте. Возможно, что вопрос очень простой и много уже где задавался.
Суть вопроса такова. На данный момент я изучаю .NET, а именно язык программирования C# для написания прикладного ПО. Проблема в том, что приложения на этой платформе достаточно сложно защитить от просмотра исходного кода и взлома системы лицензирования. После изучения различных методов защиты (обфускация, протекторы, пакеры, виртуализация кода) выбрал для себя несколько продуктов: Themida и Enigma Protector. Оба продукта основным своим преимуществом позиционируют виртуализацию кода на своих виртуальных машинах. Хотя оба они поддерживают .NET приложения, но виртуализация работает только с нативными кодом, т.е. .NET в этом плане не поддерживается.
Поэтому из всех вычитанных статей и форумов было принято решение, что часть кода вместе с лицензированием должна быть вынесена в dll написанную на компилируемом ЯП и уже после накрыта одним из этих протекторов. Из наиболее распространённых и развитых компилируемых в машинный код языков был выбран С++.
Сам же вопрос относится к списку литературы, которая необходима для изучения языка в необходимом для решения этой задачи объёме.
Сейчас остановился на книге "Язык программирования C++. Лекции и упражнения" Стивен Прата.
Стоит ли ещё обратить внимание на какие-то дополнительные пособия или данной книги + практики по ней будет достаточно?
Если вы считаете свой Шарповый код недостаточно защищенным, то, собирая секрет лицензирования в одну внешнюю библиотеку, вы просто облегчаете работу взломщика. Ему всего-то и потребуется, что подсунуть свою библиотеку, делающую вид, что с лицензией все в порядке.
Adamos, всё верно, но для этого ему будет необходимо снять навесную защиту в виде Themida или Enigma, отредактировать библиотеку при этом не затронув важный код, который содержит в себе часть логики (лиценизрование и логика будут идти в перемешку для усложнения взлома). А это гораздо сложнее, чем копаться в обфусцированном .NET коде. Понимаю, что в итоге защита всё равно не идеальна и по хорошему нужно выносить часть логики на сервер, но к этому я пока не готов, т.к. 1) Ещё не тот уровень знаний, чтобы это сделать. 2) Не всегда есть возможность это сделать, если нужна производительность. Дёргание сервера может очень сильно её порезать.
Hurum4Burum, надо искать "болевую точку", некритичную при постоянной работе, но в итоге все-таки портящую малину тем, кто жмется на лицензию.
Потому что, во-первых, тренд развития ПО все равно и дальше будет направлен на сеть, а во-вторых, достаточно и во-первых ;)
Сеть, вообще говоря, сплошь и рядом становится главным тормозом просто из-за неудачной архитектуры. Как первая сетевая 1С, работавшая с файловой БД по сети. А потом во время еды приходит аппетит, и оказывается, что сеть имеет и другие плюсы, о которых при сугубо десктопной модели и задумываться не приходилось...
Adamos, в любом случае вынос части логики в нативную библиотеку и ещё части на сервер не противоречат друг другу. Основной вопрос. Достаточно ли будет книги ""Язык программирования C++. Лекции и упражнения" Стивен Прата для изучения этой темы или ещё на что-то обратить внимание? Учитывая, что цели писать приложения полностью на С++ нет. Можете написать в ответах, чтобы я мог отметить его как решение вопроса.
Hurum4Burum, учитывая, что вы в Крестах ни бум-бум, а результат работы должен успешно противостоять анализу разбирающихся людей - вам лучше делегировать эту задачу кому-то другому.
Мне по сути просто нужна часть моего приложения в нативном виде. Смотрел в сторону CoreRT, который позволяет компилировать .NET в машинный код, но пока что проект выглядит достаточно сырым.