.NET
Comments 47
+8
Мне иногда приходится исправлять ошибки в некоторых библиотеках, когда исходников нет, либо ими занимается коллега, который в отпуске. Но я использую немного другой подход не описанный в статье:
* У меня установлен Reflector, открываю с его помощью библиотечку
* Подключаю плагин к рефлектору sebastien.lebreton.free.fr/reflexil/
* Теперь я могу изменить/добавить/удалить ILCode с помощью неплохого редактора
* Затем сохранить полученную сборку с исправленными ошибками
0
В reflexil уже можно работать с полями/методами не из своего класса, а из его предка?
0
Последний reflexil не дружит с последним reflector'ом. Где взять совместимые версии, я не нашел. Буду премного благодарен за ссылки.
0
я скачал сорсы и перекомпилировал с новым рефлектором. все пашет
0
А можешь получившийся бинарник выложить, если не трудно?
+15
«После этого всё можно пользоваться программой до следующего срока» — я считаю, правильно, что вы предупредили всех :-)
-1
по поводу кейгена: у разработчиков phpexpert от компании Ankord для получение лицензии надо писать и они потом присылают на почту файлик с командами для реестра и самой проги. получается именно так как Вы пишите — ключ находится только у автора программы. я правильно понимаю?
извините, что немного не в тему, хотелось бы ещё такую же статью про взлом сайтов, про системы защиты для обыкновенных девелоперов.
0
Вы пишите — ключ находится только у автора программы. я правильно понимаю?
Это в контексте приватого ключа, которым генерируется код для лицензии. Т.е. не зная этого ключа нельзя создать keygen. Как поступили разработчика phpexpert — не знаю, все эти инструкции не говорят о типе алгоритма.

хотелось бы ещё такую же статью про взлом сайтов
По этому были уже статьи на хабре. Поскольку кода сайта у нас нет, то ломается уже небрежность разработчиков сайта (SQL Injection, стандартный пароль у админа, папочки от SVN). И в общем-то каждый сайт уникален.
0
«Взлом» NET-кода при помощи Reflector — дело относительно простое, если код не обфусцирован. Есть, конечно, деобфускаторы, но в любом случае это добавляет значительную порцию геморроя. Рекомендую в советы разработчикам добавить: «Не забывайте обфусцировать свои приложения».
+1
Рекомендую в советы разработчикам добавить: «Не забывайте обфусцировать свои приложения».
Это уже решение разработчика. Если программа пишется под крупного конкретного заказчика, или же она действительно бесплатна, то обфускация может принести больше вреда чем пользы (перво наперво летит сериализация от обфускатора).
Даже если программа платная, то всё равно это может быть решение разработчика, ничего не предпринимать и верить в порядочность пользователей.
+5
Скажу как девелопер ;)
Появление кряков к программе по факту (в моем случае) не снижает продажи.
Выгоднее формировать в About и создаваемом результарте ссылки — на это крякеры не покушаются.
Пусть лучше пользуют мою ломаную программу чем конкурента :)
0
Очень интересно, и цена то не маленькая… Интересно на сколько будет точным предположение о том, что Вы не занимались продвижением товара, и два эффекта продвижение за счет вареза и снижение продаж за счет вареза друг друга компенсировали. :)
На сколько я знаю продвигаемые товары сильно подвержены падению продаж после кряка. Впрочем, в любом случае спасибо за интересный опыт.
0
Цена как раз небольшая — основной продукт, к которому расширение, стоит от 1500$.
В России продаж практически нет. У нас создаются ссылки при генерации результатов — возможно, использование ломаных версий увеличивает тематическую посещаемость. На 70% пользователи — студенты универов.
Продвижением немного занимался — в основном через косвенную рекламу. Публикация результатов со ссылкой на модуль, с помощью которого это было сделано.
+1
Думаю, стоит уточнить, что не стоит думать о Reflector'е как о программе исключительно для взлома (а то по прочтению статьи очень даже легко складывается такое мнение).
Был случай, когда я писал курсовую на с# и когда она была практически готова, отправил скомпилированный вариант другу «похвастаться». Через пару дней случилось так, что вся система, включая VS и мой курсовик безвозвратно слетела. Систему поставил, но писать все с нуля сильно не хотелось. Тогда у того товарища забрал скомпилированный вариант и рефлектором за пару минут восстановил исходник. Все закончилось хорошо, курсовая была сдана вовремя. Только преподаватель сильно удивлялся шестнадцатеричным константам в коде, которые я забыл вернуть в десятеричное представление.
Как видно, рефлектор тут оказался не инструментом взлома, а хорошим созидательным помощником.
0
Ну в данной статье рефлектор только так и используется, так что не знаю как поменять впечатление :) А то, что хороший помощник — это да. Иногда лучше 1 раз увидеть код библиотеки, чем 10 раз прочитать документацию (особенно когда там поведение нелогичное).
+1
У меня тоже недавно потерялись исходники от Silverlight-сайта, пришлось скачать свое приложение с сайта и декомпилировать его, включая XAML-разметку и ресурсы локализации :). Два часа геморроя — и всё скомпилировалось (правда, были утеряны константы и коментарии).
Так что при помощью Reflector-а можно «взломывать» и Silverlight-приложения, которые очень редко обфусцируются.
+2
Почитал вас и автора коммента, который вы откомментировали: я всё понимаю, но почему не пользоваться системами контроля версий?
0
После восстановления кода старые исходники всё-таки нашлись, они были в другом SVN (я использую две разных системы контроля версий и искал не в той, протупил) :).

А еще был случай: знакомый нашел у себя мою программу, которую я «для души» писал несколько лет назад, еще на Framework 1.0, без всяких репозиториев. Исходники давно где-то потеряны, а прога классная, восстановил Reflecto-ом, «допилил», скомпилировал под Framework 4, теперь вот пользуюсь :)
0
Лень было ради курсача. Для серьезных проектов, да — использую.
0
А я вообще всё в контроле версий храню :-)
Плоть до «одноразовых» todo.txt
0
Как я заметил — ещё и дело инструмента :-)

В свн создание репозитория — дорогой процесс, в hg и git — дешёвый.

Потому я и делаю репозиторий на каждый чих, потому как это дело 1 команды.
0
У меня есть опыт защиты Windows-приложений при помощи цифровых подписей сборок (ассиметричного шифрования). Однако даже этот способ не спасал от декомпиляции и переподписывания. Вобщем, вывод такой, что надежной защиты кода для .NET-сборок нет. Единственный вариант — это вынести существенную часть функциональности приложения на подконтрольные вам веб-сервисы, которые заодно будут проверять лицензионность (по IP или номеру лицензии), вести черные списки. Понятно, что это подходит не для всех заказчиков.
+2
Да, как всё просто стало. Эээххх молодость молодость — где же ты, защита от трассировки, самомодифицирующийся код…
+1
Слышал еще вариант — при помощи nGen скомпилировать «управляемый» .NET-код в обычное «неуправляемое» x86- или x64-приложение. Правда, сам так никогда не делал.
0
Управляемый код при этом никуда не девается, а nGen нужен только для ускорения запуска (пропускается этап предварительной компиляции в натив)
0
Нет, нельзя. nGen только для пропуска JIT нужен (ускорение запуска), но все метаданные, без которых программа работать не будет, будут по-прежнему лежать в .NET сборке. Т.е. код от ngen это некий хитрый кеш, но никак не рабочее приложение.
+6
«Чайник» может еще попробовать сломать триал без просмотра кода — при помощи ProcessMonitor-а посмотреть к каким ключам реестра и файлам обращается приложение при запуске и удалить их. Впрочем, если отсутствие ключа реестра приводит к продлению триала на 60 дней — это означает что защита в приложении сделана формально, и в ней наверняка есть еще куча дыр.
+3
Справедливости нужно заметить что подобный уровень защит использовался в коммерческих продуктах около 5-6 лет назад (времена .Net 1.0 и 1.1).
Обратная сборка ilasm убивается даже бесплатным обфускатором встроенным в VStudio. Одним из примеров такой обфускации является шифрование всех текстовых строк.Если отбросить обфускацию и поговорить лишь о защите как таковой то наиболее используемый сейчас метод — рассылка файла лицензии ввиде открытого XML файла подписанного приватным ключом создателя программы. При этом в программу встроен public ключ служащий для проверки подписи стандартными средствами .Net framework. При это сборка подписана (Strong Name) и сделаны референсы на нее из как можно более большого количества сборок программы. Само понятие Strong Name было успешно взломано дружественными китайскими ломателями еще во времена 1.1 сменой 1 (одного) байта в файле. Microsoft признали свою ошибку и исправили среду RunTime если не ошибаюсь с 2.0SP1. Поэтому остается 2 пути преодолеть Strong Name:
1. Запустить sn.exe -v имя сборки — при этом Framework не будет проверять подпись.
2. Переподписать сборку своим ключом — наиболее часто используюмый способ. Генерируем с помощью sn.exe новый ключ и с помощью спец утилит подписываем.
Проблемы что мы должны подписать и изменить все сборки программы использующие данную dll, хотя это тоже не проблема.

Все кому интересны вопросы защиты советую почитать отличный обзор обфускаторов на хабре.
0
Меня больше волновала лицензия Expresso, а лицензия рефлектора, это немного отдельный разговор.
0
Пардон, перепутал немного :)

Вы говорите про эту лицензию — pdf?
Там есть такое предложение: You may not rent or lease this software, nor reverse engineer it, nor create other software programs that are in some way derived from Expresso.
0
Честно, не заметил данного пункта. Но он относится к разделу Unregistered User, так что если стать зарегистрированным то пункт не действует. :) Но если серьёзно, то я понимаю что тема скользкая, но на чём-то надо демонстрировать.
0
Эта программа имеет формальную регистрацию. Я сам написал письмо разработчику, сказал что мне нравится его программа, за это он выслал мне регистрационный код.
+2
Тот, кто дошёл до физического взлома программы, вполне мог бы и сам такую программу написать.
Вот здесь как раз и начинается та самая граница, когда стоимость взлома становится выше стоимости программы.
Only those users with full accounts are able to leave comments. , please.