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

XmlSerializer — Assembly Leak без спроса :)

Время на прочтение 5 мин
Количество просмотров 5.4K
.NET *

Коротко о главном


В некоторых частях .NET Framework, таких как XmlSerializer, используется внутреннее динамическое создание кода.XmlSerializer создает временные файлы C#, компилирует результирующие файлы во временную сборку и затем загружает эту сборку в процесс. Такое создание кода тоже стоит сравнительно дорого, поэтому XmlSerializer размещает временные сборки в кэш, по одной на каждый тип. Это значит, что в следующий раз при создании кода XmlSerializer для класса Х не будет создаваться новая сборка, а будет использована сборка из кэша. Однако, не все так просто.
В некоторых случаях происходят утечки сборок...
Всего голосов 31: ↑29 и ↓2 +27
Комментарии 5

От чего защищает strong name в .net cборках?

Время на прочтение 4 мин
Количество просмотров 15K
.NET *
Основная цель strong name или подписи сборки это ее уникальность в GAC(Global assembly cache). На основании сборки во время подписи вычисляется криптографический открытый ключ, закрытый хранится в секрете у производителя сборки, хеш-функция от которого и составляет public token, что, по сути, есть strong name для сборки. Public token сохраняется в метаданных сборки и в паре с именем сборки, версией, и культурой, и служит для уникальной ее идентификации.

Несомненно, что для уникальной идентификации сборок и использования одной и той же сборки разными приложениями такой механизм очень даже подходит.

Но многие заблуждаются думая, что сборка со строгим именем защищена от модификации. Справедливости ради, стоит заметить, что если производитель сборки опубликовал public token или открытый ключ, например на своем сайте, то всегда можно проверить соответствует ли этот ключ или токен тому ключу, который зашит в используемые сборки, но это скорее придется проверить вручную. Важно другое, что строгое имя не защитит сборку от модификации, как многие думают, и соответственно механизм в CLR не отработает, как положено и загрузит модифицированную сборку.
Читать дальше →
Всего голосов 42: ↑26 и ↓16 +10
Комментарии 28

SCENE #21

Время на прочтение 1 мин
Количество просмотров 879
Демосцена
Команда demoscene.ru выпустила новый видеоподкаст. Tone рассказывает о поездках на зарубежные демопати — Breakpoint и Assembly. Что интересного происходит на зарубежных «фестивалях компьютерного искусства», как в них поучаствовать, кого можно встретить, кого лучше не встречать и прочее, и прочее.

image

Посмотреть в он-лайне: scene.rpod.ru/161682.html
Скачать файлом: rpod.ru/get/161682/113500/download/scene21-breakpoint.mp4 (385.7 Мб)

Оставляйте отзывы о подкасте, это помогает и авторам, и демосцене :)
Всего голосов 6: ↑6 и ↓0 +6
Комментарии 0

Документальный фильм о группе Future Crew

Время на прочтение 1 мин
Количество просмотров 1.9K
Демосцена
На демопати Assembly 2010, проходившем в эти выходные в Хельсинки, состоялась премьера проекта The Demoscene Documentary. Авторы задались целью создать серию короткометражных документальных фильмов об истории демосцены. Героями первой серии цикла стали Future Crew и их легендарная работа Second Reality (1993 г., PC).



К сожалению, авторы проекта решили делать его на «родном» для европейской демосцены финском языке, но своевременно догадались снабдить видеоряд английскими субтитрами. Уверяю, 17 минут suomi вполне терпимы, ради возможности «заглянуть в глаза» легендам.

UPD: Для настоящих фанатов отдельным роликом выложено home video о создании Second Reality (его фрагменты фигурируют в фильме).
Всего голосов 43: ↑37 и ↓6 +31
Комментарии 26

Исходный код Second Reality передан в общественное достояние

Время на прочтение 1 мин
Количество просмотров 17K
Open source *Assembler *
Пару дней назад Mika Tuomi, известный как Trug, передал исходный код Second Reality в общественное достояние.



Second Reality — это демо, занявшее первое место на демопати Assembly '93. Оно было создано командой Future Crew, которая на тот момент состояла из 12-ти человек. Впоследствии ее члены основали такие компании как Futuremark и Remedy Entertainment. Считается, что это демо оказало огромное влияние на развитие демосцены.

Статья о Future Crew в Википедии (англ.)
Статья о Second Reality в Википедии
Бинарники
Исходный код на Гитхабе
Всего голосов 52: ↑50 и ↓2 +48
Комментарии 29

dotPeek 1.1: обновление бесплатного декомпилятора от JetBrains

Время на прочтение 2 мин
Количество просмотров 14K
Блог компании JetBrains .NET *C# *
Давно мы не выпускали обновлений для декомпилятора.
А вчера выпустили: dotPeek 1.1 теперь доступен для широкой публики.

dotPeek 1.1: бесплатный .NET-декомпилятор от компании JetBrains

Напомним, dotPeek — это бесплатный декомпилятор .NET-сборок, который показывает результирующий код на языке C# и позволяет изучать его с помощью многообразных функций навигации и поиска, что знакомы и, будем надеяться, симпатичны пользователям другого нашего продукта, ReSharper. В частности, в dotPeek можно проводить поиск конкретного типа, символа или члена класса во всех загруженных сборках; переходить от деклараций символов к их использованиям и наоборот; анализировать иерархии наследования. Кроме того, при наличии файлов отладочной информации (.pdb) dotPeek показывает оригинальный исходный код сборок и дружит с серверами символов, такими как Microsoft Reference Source Center и SymbolSource.org, с которых при необходимости может скачивать исходный код различных библиотек.
Читать дальше →
Всего голосов 54: ↑53 и ↓1 +52
Комментарии 39

Бутлоадер с AES-128 и EAX на AVR Assembler в 1024 байта

Время на прочтение 23 мин
Количество просмотров 78K
Ненормальное программирование *Криптография *

Или как я перестал бояться и полюбил ассемблер

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

Хорошая мера защиты — обновления программного обеспечения. Китайские клоны автоматически отмирают после каждой новой прошивки, а лояльные пользователи получают нашу любовь, заботу и новые возможности. Робин Гуды при таком раскладе, естественно, достанут свои логические анализаторы, HEX-редакторы и начнут ковырять процесс прошивки с целью ублажения русско-китайского сообщества.

Хоть у нас и не было проектов, которые требуют подобных мер защиты, было понятно: заняться этим надо, когда-то это пригодится. Погуглено — не найдено, придумано — сделано. В этой статье, я расскажу, как уместить полноценное шифрование в 1 килобайт и почему ассемблер — это прекрасно. Много текста, кода и небольшой сюрприз для любителей старого железа.
Читать дальше →
Всего голосов 152: ↑151 и ↓1 +150
Комментарии 75

Return oriented programming. Собираем exploit по кусочкам

Время на прочтение 8 мин
Количество просмотров 26K
Информационная безопасность *Системное программирование *
Туториал
Введение
В этой статье мы попробуем разобраться как работает Return Oriented эксплоит. Тема, в принципе, так себе заезженная, и в инете валяется немало публикаций, но я постараюсь писать так, чтобы эта статья не была их простой компиляцией. По ходу нам придется разбираться с некоторыми системными особенностями Linux и архитектуры x86-64 (все нижеописанные эксперименты были проведены на Ubuntu 14.04). Основной целью будет эксплуатирование тривиальной уязвимости gets с помощью ROP (Return oriented programming).
Читать дальше →
Всего голосов 39: ↑38 и ↓1 +37
Комментарии 4

30 лет работы сисадмином

Время на прочтение 10 мин
Количество просмотров 49K
Блог компании ua-hosting.company
Sandra Henry-Stocker (Unix Dweeb, в данный момент работает в компании TeleCommunication Systems, разрабатывающей инновационные технические решения).

Оглядываясь в прошлое, спустя более 30 лет работы системным администратором Unix, я могу сказать, что это был долгий и интересный путь. В эти годы я конечно не выполняла одно и тоже. Развитие технологий приводили к невероятным изменениям в моей работе. Это были впечатляющие улучшения в “железе”, которое я обслуживала, и изобретение новых программных инструментов, которые я изучала и применяла на практике. На протяжении многих лет я получала невероятное наслаждение от того, насколько много работы я могла сделать в командной строке для выявления и устранения различных проблем и понимания того, как наилучшим образом обеспечить защиту данных моих работодателей. В течении 30 лет я работала с удивительными людьми, при этом была уволена однажды, а также узнала много нового о том, что работает и не работает, как с технической точки зрения, так и с точки зрения карьерного роста.
Профессия и все с ней связанное меняется драматичным образом, но она всегда приносила и будет приносить мне море удовольствия.
Вот мои размышления об изменениях, которые я увидела и тех, которые еще увижу.
Читать дальше →
Всего голосов 51: ↑44 и ↓7 +37
Комментарии 11

Новый курс по микроконтроллерам — совместный проект индустрии и университетов

Время на прочтение 2 мин
Количество просмотров 19K
Assembler *Параллельное программирование *Программирование микроконтроллеров *
Британская компания, две американские компании и 18 университетов (включая российские МИЭТ, ИТМО, СГАУ, ННТУ) сотрудничали, чтобы выпустить современный курс по микроконтроллерам c небольшой привязкой к интернету вещей. Об этом – сегодняшний пресс-релиз Imagination Technologies, Microchip Technology и Digilent (отделения National Instruments). Главный автор — профессор Александр Дин из университета Северной Каролины. В отличие от более легковестных курсов интернета вещей, новый курс подводит под предмет твердую инженерную базу – в нем подробно обсуждается использование RTOS-ов, архитектура микропроцессорного ядра микроконтроллера, протоколы периферии и даже оптимизация алгоритмов при программировании.

07_Communications

Скачать курс можно здесь:

https://community.imgtec.com/downloads/connected-microcontroller-lab-v1.2/

В пресс-релизе, помимо цитат из США, Великобритании, Германии, Китая, есть и цитата из России:
“MIET is part of Imagination’s MIPSfpga and Connected MCU Lab beta-testing programs. Our students have benefited from the MIPSfpga hands-on workshops and we are looking forward to implementing the Connected MCU Lab at our university because this course offers an up-to-date and well-structured curriculum for teaching embedded solutions to future engineers.”

– Alexey Pereverzev, Head of Computer Engineering, National Research University of Electronic Technology (MIET), Russia



Пару десятков слайдов из курса, чтобы вы почувствовали его вкус:

Читать дальше →
Всего голосов 16: ↑16 и ↓0 +16
Комментарии 37

Каламбуры типизации функций в C

Время на прочтение 8 мин
Количество просмотров 22K
Ненормальное программирование *C++ *Assembler *C *
Перевод

У C репутация негибкого языка. Но вы знаете, что вы можете изменить порядок аргументов функции в C, если он вам не нравится?


#include <math.h>
#include <stdio.h>

double  DoubleToTheInt(double base, int power) {
    return pow(base, power);
}

int main() {
    // приводим к указателю на функуцию с обратным порядком аргументов
    double (*IntPowerOfDouble)(int, double) =
        (double (*)(int, double))&DoubleToTheInt;

    printf("(0.99)^100: %lf \n", DoubleToTheInt(0.99, 100));
    printf("(0.99)^100: %lf \n", IntPowerOfDouble(100, 0.99));
}

Этот код на самом деле никогда не определяет функцию IntPowerOfDouble — потому что функции IntPowerOfDouble не существует. Это переменная, указывающая на DoubleToTheInt, но с типом, который говорит, что ему хочется, чтобы аргумент типа int шел перед аргументом типа double.


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


Попробуйте — вы увидите одинаковый результат в обоих строчках.


emiller@gibbon ~> clang something.c 
emiller@gibbon ~> ./a.out 
(0.99)^100: 0.366032 
(0.99)^100: 0.366032 
Читать дальше →
Всего голосов 78: ↑74 и ↓4 +70
Комментарии 38

ГОСТ Р 34.12 '15 на SSE2, или Не так уж и плох Кузнечик

Время на прочтение 18 мин
Количество просмотров 31K
Криптография *Assembler *Алгоритмы *C *

На Хабре уже как минимум дважды упоминался новый отечественный стандарт блочного шифрования ГОСТ Р 34.12 2015 «Кузнечик», ru_crypt в своем посте рассмотрел основные механизмы и преобразования нового стандарта, а sebastian_mg занимался пошаговой трассировкой базового преобразования. Но многие вопросы остались без ответа. Насколько быстр новый ГОСТ? Можно ли его оптимизировать, эффективно реализовать, ускорить аппаратно?


GOST R 34.12 2015 with SSE2

А если можно, то как?
Всего голосов 55: ↑53 и ↓2 +51
Комментарии 51

Java с ассемблерными вставками

Время на прочтение 11 мин
Количество просмотров 24K
Блог компании JUG Ru Group Java *.NET *C++ *C# *



Как известно, на любом языке можно писать, как на Java, а первая любовь джависта — это написание Garbage Collectors и JIT Compilers. С этим связано множество восхитительных вопросов, например: каким образом можно из управляемого кода напрямую работать с машинным кодом и ассемблером?


Кроме того, в этой статье будет небольшой пример на C#. В какой-то момент стало понятно, что нельзя всегда изучать одну Java. Рантаймы динамических языков используют общую теорию и на практике работают в рамках похожих проблем. Самый простой способ продвинуть свою работу — посмотреть, как там у соседей, и скопировать себе что-нибудь хорошее.


Теперь про ассемблер и машинный код. Зачем это нужно — вопрос открытый. Например, вы наслушались о Meltdown и хотите написать для него красивое API :-) Ну, и не надо забывать, что Oracle — не боги, поддержку того же AVX-512 добавили только в Девятке, прямое управление аппаратной транзакционной памятью не ложится на язык, часть стандартных методов можно реализовать лучше, чем это сделали в SDK и т.п. — у нас всегда есть с чем покопаться!

Читать дальше →
Всего голосов 74: ↑71 и ↓3 +68
Комментарии 32

Демопати в Хельсинки «Assembly 2018», фотоотчёт, день первый

Время на прочтение 2 мин
Количество просмотров 3K
Конференции Демосцена


Всё тоже самое, что и в прошлом году, только ещё больше и лучше. Фестиваль компьютерного искусства, не нуждающийся в представлении. Посвящается всем тем, кто очень хотел поехать, но не смог.
Под катом много фотографий
Читать дальше →
Всего голосов 19: ↑16 и ↓3 +13
Комментарии 4

Демопати в Хельсинки «Assembly 2018», фотоотчёт, день второй

Время на прочтение 4 мин
Количество просмотров 2.6K
Конференции Демосцена


День второй. Наевшись пиццы за углом торго-выствочного комплекса, вновь прошлись по дороге, исписанной графити. Так же погуляли по второму этажу города (да, это Helsinki — многоэтажный город, cyber punk iz n0w!) и нашли ещё больше шедевров. Патиплейс под катом.
Читать дальше →
Всего голосов 19: ↑17 и ↓2 +15
Комментарии 3

Эзотерический язык LMC

Время на прочтение 15 мин
Количество просмотров 6.7K
Программирование *Assembler *Компиляторы *C *DIY или Сделай сам
Часть I
Часть II
Часть III
Часть IV
Часть V

Данная статья посвящена созданию интерпретатора некого эзотерического языка, в основе которого лежит архитектура Little Man Computer.
Фактически, это эмулятор ассемблера для LMC, только здесь вместо ассемблерных команд
INP (загрузить число в аккумулятор из устройства ввода),
STA (сохранить число из аккумулятора в память),
ADD (прибавить к числу в аккумуляторе число из памяти),
SUB (вычесть из числа в аккумуляторе число из памяти),
OUT (вывести число в аккумуляторе устройство вывода)
… используются спец-символы.
Команды переходов от ячейки к ячейке в памяти команд соответствуют командам, сдвигающим считывающую головку машины Тьюринга в языках brainfuck и P′′.
В языке bf команда + (плюс) производит замену текущего символа $ c $ следующим за ним (в ASCII-таблице) символом $ c_{n+1} $. Так, если на ленте Тьюринга изначально находится символ «0», то команда $ c \rightarrow c_{n+1} $ запишет вместо него символ «1».
Читать дальше →
Всего голосов 18: ↑16 и ↓2 +14
Комментарии 4

История взлома классической игры на Dendy или Contra на 100 жизней

Время на прочтение 7 мин
Количество просмотров 12K
Assembler *Игры и игровые консоли
Из песочницы

Поскольку некоторая японская компания, до сих пор тщательно бдит свои авторские права. Я не могу предоставить вам ни мою версию рома ни использованный мною исходник. Скажу лишь, что нашёл его в торрент сборнике "Все игры на Dendy". Взяв оттуда переведённую на русский язык японскую версию игры "Contra (J) [T+Rus_Chronix]" я несколько раз её прошёл и будучи крайне любознательным человеком решил немного расковырять ROM образ, в частности подарить немного жизней игрокам.

Читать дальше →
Всего голосов 21: ↑19 и ↓2 +17
Комментарии 19

История взлома классической игры на Dendy или Contra со спрэдганом в начале

Время на прочтение 6 мин
Количество просмотров 9.1K
Assembler *Игры и игровые консоли
Туториал

Раз уж прошлая моя статья, к моему большому удивлению, вас заинтересовала. Я решил дополнить её результат, хакнутую версию игры "Contra (J) [T+Rus_Chronix]", небольшим функционалом, заодно показав "code injection" на NES. В этот раз я сделаю так, чтоб игроки начинали игру с прокачанным Spreadgun, для его получения в игре нужно подобрать иконку "S", а за ней "R".



Все заинтересовавшиеся welcome под кат.

Всего голосов 30: ↑27 и ↓3 +24
Комментарии 9

Индексаторы в C# под капотом: индексируем лучше Доу-Джонса

Время на прочтение 7 мин
Количество просмотров 12K
Высокая производительность *.NET *Assembler *C# *
Доброго времени суток. В данной статье я предлагаю ознакомиться с индексаторами в различных типах. Посмотрим код языка ассемблера для данных индексаторов и характеристики каждой инструкций по ее скорости. Также я предложу несколько очевидных выводов. Но что именно использовать в конкретно вашей ситуации решать вам — стоит ли жертвовать удобством ради скорости или наоборот.

image
Читать дальше →
Всего голосов 33: ↑32 и ↓1 +31
Комментарии 5

Адаптация программ для ZX Spectrum к TR-DOS современными средствами. Часть 1

Время на прочтение 5 мин
Количество просмотров 13K
Программирование *Assembler *Реверс-инжиниринг *Старое железо
Туториал

В отличие от современных компьютеров, на спектрумах понятия файловой системы не было как такового. Это значит, что загрузка с каждого типа носителя требовала отдельной реализации и в большинстве случаев программу нельзя было просто так скопировать с кассеты на дискету. В случаях, когда загрузчик программы был написан на бейсике, его можно было адаптировать к TR-DOS довольно простой доработкой. Однако ситуация осложнялась тем, что во многих играх (как фирменных так и взломанных) загрузчики были написаны в машинных кодах и иногда содержали защиту от копирования.


5.25" Floppy


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


В этой статье я расскажу, как выполнить такую адаптация на примере игры Pac-Man, а именно, оригинального образа Pac-Man.tzx.

Читать дальше →
Всего голосов 36: ↑35 и ↓1 +34
Комментарии 52
1