Однажды была поставлена задача написать некую небольшую программу, она должна была что-то делать, но при это требовалось максимально усложнить процесс анализа кода при дизассемблировании. Один из методов это убрать из exe все упоминания об используемых WinApi функциях, и было принято решение хранить не названия WinApi функций, а некие хэш-коды, вычисляемые каким-нить несложным алгоритмом. Потом при перечислений всех функций dll библиотеки находить нужные по этим хэш-кодам. Один из часто применяемых способов, это написать небольшую утилитку, подать ей на вход список названий нужных функций, она вычисляет их хэш-коды и на выходе выдает исходник в котором находится готовая таблица с кодами. Потом этот исходник подключается к проекту и дальше во всю используется. Но как всегда вмешалась лень. Лень было писать такую утилитку, да и еще прописывать необходимые действия в make файле. Хотелось чтобы все вычислялось во время компиляции. Вот тогда был брошен взгляд на шаблоны С++ …
Сергей Павлов @shrikus
User
Пути к файлам
4 min
67KКазалось бы — что может быть проще, чем работа с файлами в C++. Но отдельные личности поражают своей находчивостью в поиске наихудшего подхода.
Не стоит делать так:
Не стоит делать так:
std::string filepath("C:\\тест");
std::ofstream file(filepath.c_str());
+41
Кодировки
6 min
61KВсем рано или поздно приходится работать с различными кодировками. Заметив в коде своей команды различные, порой странные, подходы к решению этих проблем, пришлось провести разъяснительную беседу. Ниже поделюсь своим видением правильной работы с не-ASCII символами в коде. Буду рад конструктивной критике.
+70
Рейтрейсер на JavaScript
8 min
21KЗнаете ли вы что такое рейтрейсер? Это программа которая рисует трёхмерную сцену на экране так, как её бы увидели вы. Конечно, не совсем так, но некоторые рейтрейсеры умеют рисовать очень правдоподобные картинки, например как в "Аватаре".
Идея рейтрейсера очень простая и в этой статье я раcскажу как устроен этот алгоритм и даже напишу его на JavaScript. Картинки и пример прилагаются.
+245
Уязвимость эмулятора в антивирусе Касперского
4 min
4.4KНа данный момент в мире создаётся всё большее количество вирусов, за количеством которых невозможно успеть. Поэтому современные технологии «облачных сетей» и эвристических анализаторов кода призваны обеспечить защиту от совершенно новых угроз до того, как аналитики добавят образцы в антивирусные базы.
Не для кого не секрет, что в каждой системе всегда найдется пара дырок, которые рано или поздно выплывут наружу. Иногда это связано с ошибками программистов, иногда — из-за развития технологий вирмейкерства. В данной статье я покажу Вам один из способов обхода эмулятора в последних версиях антивируса Касперского.
Не для кого не секрет, что в каждой системе всегда найдется пара дырок, которые рано или поздно выплывут наружу. Иногда это связано с ошибками программистов, иногда — из-за развития технологий вирмейкерства. В данной статье я покажу Вам один из способов обхода эмулятора в последних версиях антивируса Касперского.
+43
«Облегчённая» реализация контейнера vector
6 min
16K Шаблон vector библиотеки STL выигрывает почти по всем параметрам у обычного С++ массива. Он позволяет добавлять и удалять элементы, освобождает выделенную память при уничтожении, позволяет контролировать выход за пределы массива и т.д. Тем не менее, у него есть один недостаток – для его работы требуется дополнительная память, небольшая, но в ряде случаев существенная. Ниже рассмотрена реализация контейнера, позволяющая немного снизить затраты памяти и повысить производительность.
+41
Kernel Pool Overflow: от теории к практике
10 min
41KЯдро Windows всегда было лакомым кусочком для хакера, особенно при наличии законченных методик его эксплуатирования, приводящих к повышению прав. Учитывая тот факт, что за последние несколько лет количество уязвимостей, связанных с переполнением динамической памяти ядра, резко возросло, я активно заинтересовался данным направлением и, к собственному удивлению, в конечном итоге накопал столько материала, что его хватит не на один 0day-баг.
+154
Обфускация JavaScript
5 min
195KВ статье собраны всем известные методы и предельно извращенные. Эту статью я решил написать после недавнего прочтения поста в блоге Badass JavaScript и решил её дополнить своими находками.
Он всем известен — обфускация минимизаторами такими как JS Packer, JSmin, YUI Compressor, Closure compiler или можно просто пугуглить «JavaScript Obfuscator» и найдется ещё сто штук разных обфускаторов.
Они превращают существующий код
В какой-то такой вид:
Или такой:
Или вот такой:
Но ничего не стоит его восстановить с помощью jsbeautifier.org либо просто убрать eval и получить исходный код, многое потеряем, но смысл кода восстановим. Ну и с первого взгляда мы видим, что перед нами JavaScript.
Все это были цветочки под катом жесткие методы обфускации.
Первый способ
Он всем известен — обфускация минимизаторами такими как JS Packer, JSmin, YUI Compressor, Closure compiler или можно просто пугуглить «JavaScript Obfuscator» и найдется ещё сто штук разных обфускаторов.
Они превращают существующий код
function MyClass(){
this.foo = function(argument1, argument2){
var addedArgs = parseInt(argument1)+parseInt(argument2);
return addedArgs;
}
var anonymousInnerFunction = function(){
// do stuff here!
}
}
В какой-то такой вид:
function MyClass(){this.foo=function(c,b){var d=parseInt(c)+parseInt(b);return d};var a=function(){}};
Или такой:
var _0xd799=["\x66\x6F\x6F"];function MyClass(){this[_0xd799[0]]=function (_0xefcax2,_0xefcax3){var _0xefcax4=parseInt(_0xefcax2)+parseInt(_0xefcax3);return _0xefcax4;} ;var _0xefcax5=function (){} ;} ;
Или вот такой:
eval(function(p,a,c,k,e,d){e=function(c){return c};if(!''.replace(/^/,String)){while(c--){d[c]=k[c]||c}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('4 0="3 5!";9 2(1){6(1+"\\7"+0)}2("8");',10,10,'a|msg|MsgBox|Hello|var|World|alert|n|OK|function'.split('|'),0,{}))
Но ничего не стоит его восстановить с помощью jsbeautifier.org либо просто убрать eval и получить исходный код, многое потеряем, но смысл кода восстановим. Ну и с первого взгляда мы видим, что перед нами JavaScript.
Все это были цветочки под катом жесткие методы обфускации.
+159
Выпуск пиратской версии для повышения продаж на AppStore
1 min
1.3KУровень пиратского использования платных программ с AppStore у некоторых программ доходит до 70%. Но никто не замерял, насколько это увеличивает количество продаж. Разработчик игры Punch ‘Em! выложил статистику за период, когда в интернете появилась нелегальная версия его игры. Продажи выросли вдвое.
Причина в том, что нелегальные пользователи способствуют бесплатной рекламе и проводят эффективный вирусный маркетинг. Таким образом, имеет смысл выпускать и даже рекламировать пиратскую версию игры наравне с лицензионной (разумеется, их рекламировать нужно по отдельности на разных форумах).
Причина в том, что нелегальные пользователи способствуют бесплатной рекламе и проводят эффективный вирусный маркетинг. Таким образом, имеет смысл выпускать и даже рекламировать пиратскую версию игры наравне с лицензионной (разумеется, их рекламировать нужно по отдельности на разных форумах).
+88
Знакомство с WebGL
6 min
44KВведение
Статья создана с целью показать основные действия, необходимые для отображения 3d в современном браузере, используя технологию WebGL. Для достижения цели рассмотрим задачу построения нескольких линий в трехмерном пространстве.
Схема работы:
- Получаем WebGL контекст из canvas'а.
- Загружаем программу шейдеров. А именно:
- создаем программу шейдоров;
- получаем исходный код отдельно для вершинного и фрагментного шейдеров;
- компилируем коды шейдеров;
- присоединяем к программе;
- активируем программу.
- Устанавливаем две матрицы: model-view и projection.
- Размещаем, заполняем, активируем буферы данных вершин.
- Рисуем.
+66
Генетический алгоритм на примере бота Robocode
13 min
47KКогда писалась эта статья, хабрапоиск по словосочетанию «Генетический алгоритм» выдавал благородную пустоту. Однако недостаточный уровень *вырезано цензурой* отодвинул дату публикации, и вот только сейчас после позорного нудливого попрошайничества с моей стороны эта статья получила возможность показать себя миру. За этот промежуток времени успели выйти в свет как минимум три (столько мне на глаза попалось) статьи на подобную тему, и, вполне вероятно, что-то из написанного ниже вы прочитаете не впервые. Таким людям я предлагаю не хмурить носики от очередной попытки неопытного юнца научно-популярно объяснить ГА, а проходить
Часть первая. Жизнь и творчество генетического алгоритма.
Начнем издалека. Есть некоторый набор задач, которые требуют решения. Наша цель — найти действия, которые смогут преобразовать Дано (начальные условия задач) в Ответ (целевое состояние).
Если ситуация простая, и решение такой задачи можно явно посчитать из условий при помощи этих ваших матанов, то и славно, тут и без наших премудростей все хорошо,
+101
Дайте мне железа! Часть 1
4 min
19KЧасть 2
На хабре есть много статей, посвященных созданию прикольных самопальных девайсов на базе микроконтроллеров, взять хотябы замечательную серию про необычный подарок (1, 2, 3) и дополнение про сенсорную клавиатуру. Они вызывают энтузиазм, побуждают к экспериментам, но вот возникает примерно такая фраза: «А теперь, значит, рисуем схему, разводим плату, травим, запаиваем, пишем прошивку, заливаем, и дело в шляпе». Вот тут-то у меня, как кодера, ни разу не державшего в руках паяльника, эти самые руки и опускались, ибо все пункты кроме написания прошивки были недоступны.
Но все меняется, когда желание пересиливает лень! В этой статье я расскажу, с чего начать, чтобы приобщиться к экспериментам с микроконтроллерами.
Под катом чуть менее мегабайта картинок
+109
Разоблачение алгоритмов растеризации шрифтов (1/2)
15 min
14KTranslation
Попытка улучшить алгоритмы растеризации шрифтов, пользуясь исключительно общедоступной информацией.
В первый раз я столкнулся с этой статьей в 2008 году. С тех пор я неоднократно задумывался о переводе (так как лучшего материала по теме не найти), и вдруг ссылка на оригинал всплыла на Хабре в обсуждении топика «Сглаживание шрифтов, анти-алиасинг, и субпиксельный рендеринг». Это стало решающим фактором (раз на материал ссылаются, значит, он кому-то нужен), и работа была, наконец, закончена.
От переводчика
В первый раз я столкнулся с этой статьей в 2008 году. С тех пор я неоднократно задумывался о переводе (так как лучшего материала по теме не найти), и вдруг ссылка на оригинал всплыла на Хабре в обсуждении топика «Сглаживание шрифтов, анти-алиасинг, и субпиксельный рендеринг». Это стало решающим фактором (раз на материал ссылаются, значит, он кому-то нужен), и работа была, наконец, закончена.
+128
Разоблачение алгоритмов растеризации шрифтов (2/2)
14 min
10KTranslation
(вторая часть перевода статьи Разоблачение алгоритмов растеризации шрифтов)
Windows растеризует шрифты плохо, Linux ещё хуже. Во всех Linux-системах, которые я видел, используется FreeType [10] Дэвида Тёрнера, Роберта Вильгельма и Вернера Лемберга. Это отличная библиотека, но способ её использования, к сожалению, нельзя назвать удачным. Типичный скриншот Linux выглядит так:
Вот полный скриншот:
ссылка
Сразу заметна проблема — чёрные пятна в скругленных углах, образовавшиеся в результате сглаживания. Вцелом, можно сказать, что косые штрихи выглядят тяжелее чем вертикальные, что в регультате производит впечатление «грязи». Вы можете возразить, что FreeType и Linux могли бы использовать схожую с ClearType субпиксельную растеризацию, но по мне это не даёт заметных преимуществ.
Linux
Наследуя худшее
Windows растеризует шрифты плохо, Linux ещё хуже. Во всех Linux-системах, которые я видел, используется FreeType [10] Дэвида Тёрнера, Роберта Вильгельма и Вернера Лемберга. Это отличная библиотека, но способ её использования, к сожалению, нельзя назвать удачным. Типичный скриншот Linux выглядит так:
Вот полный скриншот:
ссылка
Сразу заметна проблема — чёрные пятна в скругленных углах, образовавшиеся в результате сглаживания. Вцелом, можно сказать, что косые штрихи выглядят тяжелее чем вертикальные, что в регультате производит впечатление «грязи». Вы можете возразить, что FreeType и Linux могли бы использовать схожую с ClearType субпиксельную растеризацию, но по мне это не даёт заметных преимуществ.
+118
Использование bulkloader для бэкапа, восстановления и миграции данных
13 min
1.5KBulkloader — это интерфейс в Google App Engine для загрузки данных из/в хранилище на серверах Google. Bulkloader удобно использовать для бэкапа/восстановления/миграции данных приложения, однако документации и примеров использования катастрофически мало, а на сложном приложении придётся натыкаться на разнообразные проблемы и баги. Сам я довольно долго раскапывал разные источники информации, копался в исходном коде SDK, читал баги, писал свои воркараунды; и теперь готов представить некоторые плоды в виде подробной статьи.
Статья очень большая, имейте в виду.
Статья очень большая, имейте в виду.
+33
Полулегальное воровство печеньками
Easy
5 min
56KAnalytics
Часть хабралюдей честные и бескорыстные и привлекают их всякие техническия штучкэ. Но кое-кто кое-где у нас порой и не столь бескорыстен. Честно жить не хочет. Я расскажу вам о том, как можно по сути воровать, но при этом не выходя за рамки уголовного кодекса. Эдак с $15,000,000.
+278
Закономерные случайности
3 min
4.3KУвлекаясь компьютерной графикой, заметил, что комбинация правил и случайности может давать неожиданно красивые результаты.
С одной стороны, глядя на такие изображения очевидно их компьютерное происхождение, с другой — фактор случайности делает их неповторимыми и непредсказуемыми.
Еще подметил, что многократное повторение даже неказистых форм создает гармоничные рисунки, если видеть их целиком.
С одной стороны, глядя на такие изображения очевидно их компьютерное происхождение, с другой — фактор случайности делает их неповторимыми и непредсказуемыми.
Еще подметил, что многократное повторение даже неказистых форм создает гармоничные рисунки, если видеть их целиком.
+138
MemcacheDB против Kyoto Tycoon — экспресс тестирование
4 min
3.4KНедавно, чисто случайно, попался на глаза продукт от FAL Labs — Kyoto Tycoon, легкий сервер данных. В основе данного продукта — QDBM (Quick Database Manager) — хранилище данных типа ключ-значение. Зацепило меня то, что с этим «Магнатом из Киото» можно общаться по memcached-like протоколу.
Поскольку уже некоторое время использую MemcacheDB, захотелось сравнить их характеристики (протокол общения один, и там и там NoSQL-хранилище ключ-значение). Недавно подвернулся удобный случай — экспортировал некоторый объем данных из одного самопального хранилища в MemcacheDB. Для тестирования осталось только развернуть на том-же сервере Kyoto Tycoon.
Вот что у меня получилось:
Поскольку уже некоторое время использую MemcacheDB, захотелось сравнить их характеристики (протокол общения один, и там и там NoSQL-хранилище ключ-значение). Недавно подвернулся удобный случай — экспортировал некоторый объем данных из одного самопального хранилища в MemcacheDB. Для тестирования осталось только развернуть на том-же сервере Kyoto Tycoon.
Вот что у меня получилось:
+35
Концепт трояна, распознающего голос и тоновые сигналы со смартфона
1 min
732Интересный концепт трояна продемонстрировала группа исследователей из Городского университета Гонконга и Университета Индианы в Блумингтоне (PDF). Программа Soundminer активируется, когда пользователь звонит в автоматическую службу своего банка, вводит номер кредитной карточки и пинкод. Распознаются и голосовой ввод, и тоновый набор.
+38
Цифровые подписи в исполняемых файлах и обход этой защиты во вредоносных программах
8 min
80KХабрапривет!
Ну вроде как удалось решить вопросы с кармой, но они ником образом не касаются сегодняшней темы, а лишь объясняют некоторое опоздание её выхода на свет (исходные планы были на ноябрь прошлого года).
Сегодня я предлагаю Вашему вниманию небольшой обзор по системе электронных подписей исполняемых файлов и способам обхода и фальсификации этой системы. Также будет рассмотрен в деталях один из весьма действенных способов обхода. Несмотря на то, что описываемой инфе уже несколько месяцев, знают о ней не все. Производители описываемых ниже продуктов были уведомлены об описываемом материале, так что решение этой проблемы, если они вообще считают это проблемой, на их ответственности. Потому как времени было предостаточно.
+54
Information
- Rating
- Does not participate
- Location
- Санкт-Петербург, Санкт-Петербург и область, Россия
- Date of birth
- Registered
- Activity