Как стать автором
Обновить
  • по релевантности
  • по времени
  • по рейтингу

Наш опыт участия в 10K Apart или как ужать 40 Кбайт кода в 10

Разработка веб-сайтов
Не так давно на Хабре уже писали о контесте 10К Apart — соревновании на лучшее веб-приложение общим объемом до 10К, созданное с использованием только клиентских технологий: (HTML, CSS, Javascript, SVG и т.д).

image

Я хочу представить вашему внимаю нашу работу для этого контеста, которую мы с private_face делали по вечерам в течение двух недель: адвенчуру в стиле dungeon-crawler под названием «Fontanero» (исп. водопроводчик).
Читать дальше →
Всего голосов 266: ↑264 и ↓2 +262
Просмотры8K
Комментарии 123

Как обмануть NET.Reflector

.NET
Сегодня я задумался о том, как обфускаторы скрывают код методов от утилит деобфускации вроде NET.Reflector. Как ни странно, но я не нашел в интернете никакой полезной информации по этому вопросу (возможно, плохо искал) и поэтому пришлось провести маленькое исследования самостоятельно. Под катом краткая заметка о результатах. В примере кода будет снова использоваться Mono.Cecil и генерация кода, так что не забудьте прочитать мою первую статью.

Читать дальше →
Всего голосов 63: ↑55 и ↓8 +47
Просмотры14.1K
Комментарии 28

Взлом программ для чайников

Информационная безопасность.NETСофт
Tutorial
Disclaimer: всё ниженаписанное написано исключительно с просветительскими и исследовательскими целями, а также понимания механизмов защиты от взлома. Автор ни в коем случае не рекомендует использовать данную информацию для взлома программ.

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

Я не буду углубляться в детали и использовать сложные инструменты для взлома. Всё будет расписано «для чайников», т.е. все инструменты будут простыми, легкодоступными и бесплатными. А основным будет Reflector, декомпилятор программ под .NET

В качестве подопытного кролика я выбрал Expresso — анализатор регулярных выражений. Данная программа бесплатная, в лицензии вроде бы ничего не указано про взлом, но при этом без регистрации она будет работать всего 60 дней. Другими словами, вред от взлома данной программы минимальный, к тому же внутреннее её устройство очень уж хорошо подходит для тренировки. Буду надеяться, что автор данной программы не обидится на меня.
Читать дальше →
Всего голосов 147: ↑138 и ↓9 +129
Просмотры378.7K
Комментарии 47

Исходный код игры «Fontanero», победителя конкурса 10k apart

Чулан
Некоторое время назад, мы, с private_face участвовали в конкурсе 10k apart(и даже выиграли!), и наши статьи были довольно-таки тепло1 встречены2 на хабре. В комментариях, нас несколько раз просили открыть исходники, и, наконец-то, летучие обезьяны подняли мне веки к обеду, это случилось. Сегодня мы залили всё что было, включая импровизированный «тулчейн» на github. Сильно не ругайте, исхода так себе, а я на js до этого никогда не писал толком :)

Исходники и все инструкции можно получить по ссылке: https://github.com/whoozle/fontanero.
Всего голосов 18: ↑18 и ↓0 +18
Просмотры327
Комментарии 5

Защита от пиратства — мнения разработчиков ПО

Блог компании StarForce Technologies
Хотелось бы лучше понимать позицию многих разработчиков делового софта, компаний и частных лиц, в отношении внедрения каких-либо антипиратских механизмов в свои программы. Ведь проблема пиратства, по их же заявлениям, стоит чрезвычайно остро.

Общаясь со многими из них я встречал разные мнения, некоторые из которых безусловно имеют право на жизнь…
Читать дальше →
Всего голосов 14: ↑2 и ↓12 -10
Просмотры3.9K
Комментарии 28

13-14 мая КРИ. Приглашаем разработчиков на поговорить и рюмку чая

Блог компании StarForce Technologies
13-14 мая в Москве, в гостинице Космос продет очередная, девятая по счету КРИ. Думаю многие уже в курсе, так как тут активно обсуждалось мероприятие FlashGamm, которое пройдет за день до основной конференции.

StarForce традиционно принимает участие в мероприятии и ждет в гости всех наших друзей, а так же народ социальный, казуальный, браузерный и индивидуальный.
Читать дальше →
Всего голосов 5: ↑1 и ↓4 -3
Просмотры634
Комментарии 4

Cactus Obfuscator обфускатор JavaScript/CSS

JavaScript
Привет %username%,
Сегодня, я бы хотел, представить сообществу утилиту написанную мои другом Николаем Бабинским — Cactus Obfuscator.
Cactus Obfuscator — это трех-модульное приложение созданное для обфускации JavaScript и CSS кода.

Cactus Obfuscator использует:
Apache Maven — плагин для Maven версий 2-3.
YUI Compressor — js/css обфускация.
Simple XML — XML мэппинг и (де)сериализация.

Содержание:
1. Использование как Maven плагина.
2. Использование как консольного приложения.
3. Создание конфигурационных файлов(XML).


Cactus может использоваться, как Maven плагин в java-проектах, а так же, как консольная утилита.

Читать дальше →
Всего голосов 10: ↑7 и ↓3 +4
Просмотры6.7K
Комментарии 5

Обфускация строк C++ в Visual Studio

C++
Из песочницы
Бинарная защита своих программ — дело часто нелёгкое и неблагодарное, ведь если продукт кому-то нужен, его всё равно сломают, как ни старайся. При этом самая лучшая защита всегда должна писаться, ну или по крайней мере настраиваться, вручную, а всякие там пакеры/кодировщики/виртуальные машины тоже конечно помогают, но чем более автоматически работает защита, тем легче она потом ломается, к тому же если использовать какой-то известный пакер, то кракеры его уже 10 раз ломали в других продуктах, и знают что в нём к чему. К тому же все более-менее удачные пакеты защит стоят немалых денег.

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

Вот и встаёт вопрос в том чтобы найти компромис между уровнем защиты/затраченным временем/удобочитаемостью кода/стоимостью и т. д.

Хочу поделиться с вами моим собственным решением для обфускации строк в программе, которое хоть и даёт лишь минимальную защиту, но является 1) бесплатным 2) лёгким 3) почти не портящим внешний вид кода 4) новым, которое кракер скорее всего в данной конкретной конфигурации ещё не видел.

Сразу хочу сказать что это решение лишь ненадолго замедлит уверенного хакера со стажем, но является очень простым и занимает лишь от силы минут 15 в начальной настройке. Оно призвано скорее дать минимальную защиту от нубо-хакеров и скорее натолкнуть вас на более защищённый тип мышления в кодинге, и дать вам шанс самим развить этот метод и реализовать другие типы защит.
Читать дальше →
Всего голосов 9: ↑7 и ↓2 +5
Просмотры19.2K
Комментарии 0

Прячем, обфусцируем и криптуем клиентскую часть веб-приложений

Блог компании Журнал Хакер
Обфускация — это приведение исходного текста программы к виду, сохраняющему ее функциональность, но затрудняющему анализ, понимание алгоритмов работы и модификацию при декомпиляции. Применительно к JavaScript данная технология используется в таких видах теневого онлайн-бизнеса, как загрузки (iframe), спам и SEO. Наша задача на сегодня — изучить все методы скрытия JS-кода, которые, я надеюсь, ты будешь использовать только во благо.

Обфусцированный скрипт

Читать дальше →
Всего голосов 181: ↑153 и ↓28 +125
Просмотры97.8K
Комментарии 62

Международный конкурс по обфускации кода на C

Ненормальное программирование
IOCCC возвращается! Знаменитый конкурс на самый запутанный код призван «проверять компиляторы на стресс, демонстрировать тонкости языка программирования Си и важность соблюдения стиля программирования (делая обратное)».

По условиям, участвовать в конкурсе могут готовые программы размером меньше 4096 байт, при этом количество значимых символов (без учёта пробелов, знаков табуляции) и знаков ; ( ), не должно превышать 2048. Первого декабря форма заявки на участие в конкурсе будет размещена здесь.

Международный конкурс на самый запутанный код проходил ежегодно с 1984 года, но с 2006-го мероприятие удалось организовать впервые.
Читать дальше →
Всего голосов 51: ↑44 и ↓7 +37
Просмотры6.1K
Комментарии 12

Эволюция систем защиты на электронных ключах

Блог компании «Актив»
Эта статья посвящена развитию систем защиты на аппаратных ключах, видам атак, с которыми пришлось столкнуться за последние годы, и тому, как им удалось противостоять. Рассмотрены возможности электронных ключей, которые напрямую влияют на степень защиты программного обеспечения, и основные проблемы, присущие данной технологии. Автор статьи является ведущим разработчиком проекта Guardant, компания «Актив».

Современные электронные ключи подразделяются на ключи с симметричной криптографией, ключи с асимметричной криптографией и ключи с загружаемым кодом. Последний тип устройств требует более детального анализа, выходящего за рамки данной статьи.

Рассмотрим защиту Windows-приложений, разработанных с использованием компилируемых языков программирования (C, C++, Pascal, Delphi, Fortran и т.д.).
Читать дальше →
Всего голосов 15: ↑14 и ↓1 +13
Просмотры8.3K
Комментарии 14

Прячем Bash скрипты

Настройка LinuxСистемное администрирование
Из песочницы
Очень часто на фрилансе бывает, так что заказчик просит сделать некоторую работу, получив тестовую версию, принимает её и отказывается платить
Я на фрилансе достаточно часто делаю скрипты под заказ, администрирование серверов и тд, автоматизация неких процессов на сервер, уловив основную идею написания, как правило, заказчик пропадает, решив что это все так просто и не за что платить.
Столкнувшись с понятием Обфуска́ция в С, решил поискать аналогичное решение и для своего любимого Bash.
Читать дальше →
Всего голосов 73: ↑65 и ↓8 +57
Просмотры14.2K
Комментарии 24

Итоги 20-го международного конкурса непонятного кода на C

Ненормальное программированиеC
Организаторы IOCCC (Международный конкурс на самый непонятный код C) нажали кнопку «турбо». Если результаты прошлого конкурса опубликовали спустя четыре года после проведения, теперь прошло всего два месяца — и вот они.

Участвовать в конкурсе могут готовые программы размером меньше 4096 байт, при этом количество значимых символов, без учёта пробелов, знаков табуляции и знаков ; ( ), не должно превышать 2048. Задачей конкурса является «проверять компиляторы на стресс, демонстрировать тонкости языка программирования Си и важность соблюдения стиля программирования (делая обратное)».
Читать дальше →
Всего голосов 52: ↑48 и ↓4 +44
Просмотры13.3K
Комментарии 29

Облачная защита для .NET приложений

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

Да, C++ был почти идеальным языком в этом плане. Но времена меняются, старые технологии уходят и на их место приходят новые более продуктивные и удобные. Так наша команда перешла на .NET. Но в обмен на простоту разработки и удобство отладки, мы в придачу получили в довесок и простоту декомпиляции нашего ПО. Теперь хакер мог не просто обойти лицензионные ограничения, но и получить почти полный исходник нашей программы просто скормив ее рефлектору.
Разумеется, в качестве решения этой проблемы на рынке было представлено множество различных обфускаторов. Но, как ни странно, большинство из них разочаровывали меня сразу с двух сторон: и ценовой политикой (даже минимальная лицензия некоторых превосходила стоимость нашего ПО в несколько раз), и «интеллектуальностью» алгоритма. Так, после некоторых обфускаторов, умудрялись падать даже простые WinForms приложения. Что же касалось WPF, то без долгого-долгого черного шаманства над эксклудами, запустить среднего размера программу не представлялось возможным в принципе.

Так сформировалось понимание проблемы и четкое желание создать свой продукт, сводящий озвученные выше проблемы к минимуму. И появился SaaS обфускатор и протектор .NET кода AppFuscator.com

Обфускатор и протектор .NET кода appfuscator


Читать дальше →
Всего голосов 50: ↑39 и ↓11 +28
Просмотры3.3K
Комментарии 37

Итоги 21-го конкурса IOCCC

Ненормальное программированиеBrainfuckC
Объявлены победители 21-го международного конкурса обфусцированного кода на C. Как обычно, участники удивили способностью втиснуть совершенно невероятные вещи в программы до 4096 байт. Чтобы получить максимальное удовольствие, организаторы конкурса рекомендуют смотреть версию без спойлеров и пытаться понять по коду программы, что она делает.

Например, что делает такая программа?
             main(l
        ,a,n,d)char**a;{
    for(d=atoi(a[1])/10*80-
   atoi(a[2])/5-596;n="@NKA\
  CLCCGZAAQBEAADAFaISADJABBA^\
  SNLGAQABDAXIMBAACTBATAHDBAN\
  ZcEMMCCCCAAhEIJFAEAAABAfHJE\
  TBdFLDAANEfDNBPHdBcBBBEA_AL\
   H E L L O,    W O R L D! "
     [l++-3];)for(;n-->64;)
        putchar(!d+++33^
             l&1);}

Ответ
Правильно, печатает карту мира.



И не просто печатает, но ещё отмечает на карте место (символ " или # с координатами, которые можно указать при запуске).
Кстати, это «лучшая маленькая программа» на IOCCC 1992 года.

Другие спойлеры
Всего голосов 59: ↑56 и ↓3 +53
Просмотры22.8K
Комментарии 27

Защита в облаках: AppFuscator 2.0

Я пиарюсь
И вот минуло уже почти три месяца с момента нашего первого анонса облачная защита для .NET приложений. Все это время мы не теряли времени даром и активно работали над улучшением нашего продукта. В выявлении приоритетных направлений и обнаружении наиболее острых проблем нам очень помогло активно включившееся в испытания первой публичной версии хабросообщество. Большое спасибо Вам, от лица нашей команды!

В новой версии



Новое ядро WPF обфускации

  • Теперь классы, задействованные в WPF, не исключаются, а обфусцируются наравне со всеми остальными. WPF ресурсы при этом пересобираются
  • Поддерживается линкинг сборок содержащих WPF (что невозможно сделать в ILMerge)
  • Умные автоматические исключения классов и полей недопустимых к переименованию, в том числе для сложных выражений типа PropertyPath
  • BAML ресурсы переименовываются


image

(нажмите для увеличения)

Поддержка Unity 3D

  • Переименовываются все внутренние методы, поля и классы
  • Поддерживаются все режимы, включая String Encryption, External Method Call Hiding, Decomposition

Для того, чтобы защитить Unity 3D приложение, достаточно отправить на обфускацию сборки с пользовательским кодом из папки Managed, и затем заменить их на защищенные версии.

Полная совместимость с .NET Framework 4.5

  • Теперь обфускатор одинаково хорошо работает с .NET 2.0, 3.0, 3.5, 4.0, 4.5.
  • Корректно обфусцируется код с async/await
  • Осуществлен переход на последнюю версию Mono Cecil


Читать дальше →
Всего голосов 2: ↑1 и ↓1 0
Просмотры1.6K
Комментарии 0

AppFuscator — облачная защита .NET

Я пиарюсь
Привет Хабр! Мы плодотворно трудились над нашим продуктом, и сегодня я хочу поделиться новостями. Для тех, кто не читал предыдущих топиков (1 и 2), напомню, что мы разрабатываем онлайн сервис для защиты .NET приложений. Процесс обфускации происходит непосредственно в облаке по модели SaaS.

Расскажу немного о нововведениях.

Программа-клиент


Для тех кто обфусцирует свои программы постоянно мы существенно упростили этот процесс — теперь Вы можете воспользоваться специальной программой-клиентом для работы с нашим сервисом. Созданную конфигурацию можно сохранить в проект, и затем обфусцировать Ваши программы в один клик.

obfuscation program C#

Программа распространяется как OpenSource (лицензия MIT), все желающие могут ознакомиться с исходниками. В дальнейшем, мы планируем вынести API в отдельный модуль, для легкой интеграции с другими программами.

Программа пока бета, заранее приносим извинения за возможные баги.

Control flow obfuscation


В AppFuscator добавлен новый алгоритм защиты Control flow obfuscation — запутывание потока управления. Суть этого метода заключается в разделении алгоритма программы на отдельные компоненты и построение из них сложно-связанного графа переходов. В итоге логику работы кода понять становиться весьма не просто.
Читать дальше →
Всего голосов 10: ↑8 и ↓2 +6
Просмотры4K
Комментарии 24

Об одном способе защиты исходников Python-программы

Python
Из песочницы
Tutorial

Как всё начиналось


Однажды мне пришлось участвовать в разработке одного небольшого проекта для научных расчётов, который разрабатывался на языке программирования Python. Изначально Python был выбран как удобный и гибкий язык для экспериментов, визуализации, быстрого прототипирования и разработки алгоритмов, но в дальнейшем стал основным языком разработки проекта. Надо заметить, что проект был хоть и не большим, но довольно насыщенным технически. Для обеспечения требуемой функциональности, в проекте широко применялись алгоритмы теории графов, математическая оптимизация, линейная алгебра и статистика. Также использовались декораторы, метаклассы и инструменты интроспекции. В процессе разработки пришлось использовать сторонние математические пакеты и библиотеки, например, такие как numpy и scipy, а также многие другие.

Со временем стало ясно, что переписывать проект на компилируемом языке слишком затратно по времени и ресурсам. Скорость работы и потребление памяти не являлись критичными показателями в данном случае и были вполне приемлемыми и достаточными. Поэтому было принято решение оставить всё как есть, и продолжить разработку и поддержку проекта на языке Python. К тому же, документация по большей части уже была написана с использованием Sphinx.

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

Здесь сразу обозначилась новая проблема: как защитить исходные коды нашей Python-библиотеки? Может быть, в ином случае никто бы не стал этим заниматься, я бы уж точно, но в библиотеке были реализованы некоторые ноу-хау, и руководители проекта не хотели, чтобы данные наработки попали к конкурентам. Так как я был одним из исполнителей, мне пришлось озаботиться данной проблемой. Далее я постараюсь рассказать об основной идее, что из этого вышло, и как нам удалось скрыть Python-исходники от лишних глаз.
Читать дальше →
Всего голосов 82: ↑71 и ↓11 +60
Просмотры66.1K
Комментарии 41

Деобфускация бэкдора без единого буквенно-цифрового символа

Разработка веб-сайтовPHP
Месяц назад я увидел интересный пост про PHP-шелл без единого буквенно-цифрового символа и сильно захотел понять, что же он делает. Кому интересно — под кат!
Читать дальше →
Всего голосов 105: ↑100 и ↓5 +95
Просмотры31.3K
Комментарии 28

Еще раз об обфускации JavaScript или сказ о том, как я обфускатор писал. Часть 1

Ненормальное программированиеJavaScript
Из песочницы
Возникла тут задача, написать код на php, который принимает js-код и обфусцирует его по самое не балуй. После курения гугла и хабра (в том числе, как правильно подсказывает monolithed, вот этой статьи) я приступил к работе. Как и следовало, я начал того, что запустил консоль JS в хроме и начал пытаться получать строки из месива символов, вот что получилось (с пояснениями):
(![]+[])

«false»
[] — пустой массив
! — операция логическое НЕ, особенность js (и не только), в том, что при булевых операциях если операнд равен 0, false, undefined, null, '' (пустой строке), то он приводится к false. Во всех остальных случаях — к true. (спасибо oshibka404 за поправки)
То есть (![]) = false
+ — операция сложения и объединения строк, если оба операнда числа, то произойдет сложения, иначе это будет объединение строк с приведением типов. Кстати, тут есть особая магия типов, но это позже.
Читать дальше →
Всего голосов 44: ↑34 и ↓10 +24
Просмотры12.9K
Комментарии 37