Судя по моему последний вопрос, большая часть имена участников, кажется, включается в выходные данные проекта.
Глядя на некоторые декомпиляторы, такие как 9 лучей, Саламандра, Джунгли, кажется, что многие методы запутывания уже побеждены, есть одно особенно пугающее заявление:
Automatically removes string encryptions injected by obfuscators ~ Salamander
Так является ли ручной, обфускация на уровне исходного кода более эффективна, чем пост-компиляция / середина компиляции, «поверхностная» обфускация хорошо известными (легко побеждаемыми ??) программами запутывания?





Проблема в том, что ради этого вы пожертвуете удобочитаемостью. Если ваш проект так свято защищать, я считаю, что можно с уверенностью предположить две вещи:
"Умилостивление", похоже, было запутано компилятором комментариев SO. Вы имеете в виду «проприетарный»?
Я думаю, что «невозможно понять» - очень относительный термин. У каждого всегда есть доступ к какому-то ассемблерному коду. Все, что я говорю, это то, что если то, что вы пытаетесь защитить, стоит всех усилий по его запутыванию, то разобрать на другом конце того же стоит.
это зависит от усилий, необходимых для декомпиляции. Если мне придется провести год с очень опытными разработчиками, чтобы превратить asm обратно в C++, я бы не стал беспокоиться. Если я могу добавить dll в приложение, и это произойдет через полчаса - я сделаю это.
Может быть, спорный, но вы будете уничтожать ремонтопригодность, чтобы сделать это.
Это действительно того стоит?
На самом деле это просто сводится к безопасность через безвестность, т.е. это вовсе не безопасность, а просто неудобство. вы должны работать, исходя из предположения, что любая сторона, достаточно заинтересованная будут, декомпилирует ваш код, если они могут получить к нему доступ. Не стоит причинять себе боль, чтобы злые хакеры отнимали немного больше времени. Решите реальные проблемы безопасности доступа.
На удобочитаемость это не влияет. Комментарии могут заменить великие имена участников.
И вы собираетесь помещать комментарий с объяснением «какого черта» рядом с каждой ссылкой на IFoogleBargle, а вы?
Обфускация исходного кода приведет к провалу с точки зрения обслуживания.
Если ваш проект такой «секретный», я думаю, у вас есть два варианта:
Разместите «секретный» код собственности за сервисом на сервере, которым вы управляете.
Закодируйте его на языке, который нелегко декомпилировать, например C / C++.
Есть ли какие-нибудь обфускаторы перед компиляцией? Чтобы вы получили как бы промежуточный исходный код, имена членов которого (предпочтительно рандомизированные, а не зашифрованные), например, будут видны только в IL в режиме выпуска?
аннаката верна. На самом деле все, что вы можете сделать, - это сделать более трудным (и дорогостоящим) перепроектирование программного обеспечения для человека.
Моя компания определила несколько областей, в которых мы хотели максимально усложнить обратный инжиниринг. Например, наши файлы представляют собой двоичный формат, в котором каждый объект в нашей иерархии отвечает за сохранение и считывание правильной версии. Это означает, что для чтения наших файлов человек будет копировать всю нашу иерархию в коде, который они создают для чтения наших файлов. Кроме того, большая часть информации в файле проекта полезна без соответствующего бита в файлах стандартов магазина. Таким образом, они должны проделать эту работу дважды, чтобы понять, о чем говорится в файле вакансии.
Несколько критических областей (защита электронного ключа, связь с нашими станками для резки металла) находятся в Win32DLL. Это означает, что они должны знать сборку и то, как создавать DLL, реплицирующие сигнатуры других DLL, чтобы реконструировать наше программное обеспечение. Плюс наша конструкция с нашим программным обеспечением CAM заключается в том, что оно очень интерактивно с режущим станком (происходит постоянный обмен информацией).
Из того немногого, что мы слышали о том, что конкуренты пытаются справиться с нашими машинами в одиночку, они в конечном итоге заменили электронику своей собственной, чтобы закончить работу. Крупные деньги для этого.
Часть предпринятых нами шагов была основана на нашем собственном опыте борьбы с машинами и программным обеспечением конкурентов. Мы воспользовались этим опытом и научились настраивать наши настройки. Конечно, у нас есть ограничения в том, что мы не собираемся жертвовать надежностью или обслуживанием только ради победы над реверс-инжинирингом.
В вашем случае вам нужно будет спросить себя, какая часть вашего программного обеспечения будет интересна вашим конкурентам, и исходить из этого. Если вы являетесь разработчиком вертикального рынка (управление станками, специализированный учет и т. д.), Я предлагаю использовать USB-ключ для управления программным обеспечением.
В противном случае используйте систему серийных номеров и примите тот факт, что люди собираются украсть ваше программное обеспечение и встроить это в вашу бизнес-модель. Назначение схемы серийного номера состоит в том, что она относительно ненавязчива и препятствует причинному копированию, а также дает вам отдаленный шанс отследить, откуда поступила копия.
Как говорят люди, обфускация - это поднять планку. Если вы запутаете свою сборку, вы остановите случайного разработчика, которому просто любопытно, но вы не остановите слегка мотивированного человека от реверс-инжиниринга.
Если вы хотите немного поднять планку, многие инструменты обфускации позволяют использовать непечатаемые символы в качестве имен членов. используйте рефлектор на себе, чтобы посмотреть. Это остановит гораздо больше людей, я мог бы посмотреть на запутанный код, чтобы понять его, но если я не могу его прочитать, я не собираюсь переносить боль, сбрасывая его в IL и переименовывая всех участников вручную, у меня нет мотивации тратить так много времени.
Однако у некоторых людей есть мотивация, поэтому вам нужно сделать еще один шаг, если ваши бизнес-требования этого не требуют. Но независимо от того, что вы делаете, если компьютер может это прочитать, найдется кто-то, кто тоже сможет это прочитать. Цель состоит в том, чтобы уменьшить количество людей, которые могут его прочитать или у которых будет мотивация прочитать его.
Есть также некоторые уловки, которые вы можете использовать, чтобы сломать рефлектор (Obfuscator из PreEmptive в некоторых случаях ломает рефлектор, но, конечно, вы все равно можете прочитать IL). Однажды у меня был интересный разговор с разработчиком инструмента обфускации, и я не смогу передать его должным образом, но у него был способ заставить рефлектор полностью сломаться, заставив код динамически прыгать. Например, в один момент в вашей функции a вы перейдете к середине функции b. Doign это заставляет PEVerify вызывать ошибки, поэтому они никогда не реализовали это, но это своего рода изящная идея.
Я обеспокоен тем, что вы даже рассматриваете обфускацию на уровне кода. Не хотите ли вы запутывать код и для себя? Как ты собираешься когда-нибудь работать над этим снова? Из соображений ремонтопригодности этого делать не следует.
Но учтите это:
Предположим, существует сценарий / приложение, которое вы можете запустить, чтобы открыть ваш проект и ловко запутать каждое имя строки / переменной в вашем проекте, и вы скомпилировали его позже, пока исходный код не был затронут в отдельном месте.
Вот такая идея.
Я работал над исходным кодом, который обрабатывался подобным образом в прошлом, где исходный код был доставлен, потому что он работал на интерпретаторе BASIC (да, много лет назад). По крайней мере, мой считать автоматически запутался.
Я думаю, что это именно то, что имел в виду аннаката ... он не хотел уничтожить свой собственный код, но добавил слой обфускации на уровне «прекомпилятора».
На самом деле обфускация на уровне кода - это менее безопасный, чем то, что могут сделать обфускаторы. Это в первую очередь потому, что обфускаторы могут использовать строгие детали реализации CLI, которые не разрешены языковыми компиляторами. Например, для частных полей вполне законно иметь одно и то же имя, но не существует компилятора, который позволил бы вам это сделать.
Ага - это не лучше, чем то, что может сделать любой дешевый обфускатор. И вы не можете делать такие вещи, как имена нулевой ширины, такие как наш инструмент DeployLX CodeVeil.
вы можете использовать такую технику: http://g.palem.in/SecureAssembly.html, используя это, вы пишете в .net, но вы встраиваете в исполняемый файл С ++ свой исполняемый файл .net,
3. Поскольку мы используем методы и алгоритмы умилостивления, это становится практически невозможным, и декомпиляторы просто отказываются от этого.