Pull to refresh
  • by relevance
  • by date
  • by rating

Help: будет ли работать хук клавиатуры Win32 под Win64?

Lumber room
Здравствуйте! Публикую пост от безысходности — никто из знакомых не подсказал, у самого Windows 32-битная, а Google даёт мусор. Итак…

Отладчик Builder 2010 подсказал мне: DLL, в котором устроен хук WinAPI, просто-напросто вставляется в адресное пространство каждой программы. В связи с этим возникают пара вопросов.

1. Будет ли работать 32-битный хук клавиатуры под 64-битной версией Windows?
2. Будет ли наоборот: 64-битный хук клавиатуры под 64-битной виндой, но в 32-битных программах? Если нет — как корректно сделать двойной хук?
Total votes 15: ↑6 and ↓9 -3
Views426
Comments 12

Перенаправление функций в разделяемых ELF-библиотеках

Website development
Все мы пользуемся динамически-компонуемыми билиотеками. Их возможности поистине великолепны. Во-первых, такая библиотека загружается в физическое адресное пространство только один раз для всех процессов. Во-вторых, можно расширять функционал своей программы, подгружая дополнительную библиотеку, которая и будет этот функционал обеспечивать. И все это без перезапуска самой программы. А еще решается проблема обновлений. Для динамически компонуемой библиотеки можно определить стандартный интерфейс и влиять на функционал и качество своей основной программы, просто меняя версию библиотеки. Такие методы повторного использования кода даже получили название «архитектура plug-in’ов». Но топик не об этом.

Кстати, нетерпеливые могут все скачать и попробовать прямо сейчас.

Осторожно, много текста!
Total votes 81: ↑75 and ↓6 +69
Views26.8K
Comments 30

Как я наказал Firaxis или история о том, как перебрать бинарный движок через глушитель

Abnormal programming
Sandbox
image

Речь пойдёт о далёком 2005 году, когда только-только вышла Civilization4 от Sid Meier. К тому времени я плотно висел в Civilization3, прошёл её раз дцать на самых разных картах, и тут вышла долгожданная четвёрка. Это были годы P3-512Mb для mid-end и P4-1Gb в hi-end. Только топовые конфиги в те годы имели два гига памяти на борту.

Civilization 4 вышла с графикой уровня года 2002-2003го, что в принципе нормально для мэинстрима тех времён, особенно учитывая что это пошаговая стратегия, а не шутер. Но жрала с течением игры до 900Mb оперативки, что приводило к жуткому свопу, особенно на больших картах, особенно к концу игры, особенно на ноутбуках. Народ недоумевал, я тоже. Учитывая, что в те же годы вышел Far Cry с куда более красивой графикой, и который вполне игрался на максимуме даже с 512Mb на борту, такое поведение Civilization 4 выглядело крайне странным. Захотелось разобраться и покарать…
Читать дальше →
Total votes 551: ↑547 and ↓4 +543
Views104.5K
Comments 177

Перенаправление функций в Mach-O библиотеках

Development for iOS
В предыдущей статье был описан метод перехвата вызовов для разделяемых библиотек ELF. А сейчас мы посмотрим как сделать то же самое с библиотеками в формате Mach-O.

Вкратце напомню ситуацию. Имеем программу под Mac OS X, которая пользуется множеством сторонних динамически-компонуемых библиотек, которые, в свою очередь, также пользуются функциями друг друга.

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

Как обычно, нетерпеливые могут все скачать и попробовать прямо сейчас.
Решение и много картинок
Total votes 37: ↑32 and ↓5 +27
Views7.2K
Comments 14

Хуки — это просто

Инфопульс Украина corporate blogProgrammingSystem Programming
Tutorial


Хуки — это технология перехвата вызовов функций в чужих процессах. Хуки, как и любая достаточно мощная технология, могут быть использованы как в благих целях (снифферы, аудио\видеограбберы, расширения функционала закрытого ПО, логирование, багфиксинг) так и со злым умыслом (трояны, кряки, кейлоггеры). О хуках уже не раз писали и на Хабре и не на Хабре. Но вот в чём беда — почему-то каждая статья о хуках буквально со второго абзаца начинает рассказывать о «таблице виртуальных функций», «архитектуре памяти» и предлагает к изучению огромные блоки ассемблерного кода. Известно, что каждая формула в тексте снижает количество читателей вдвое, а уж такие вещи — так и вовсе вчетверо. Поэтому нужна статья, которая расскажет о хуках просто. Под катом нет ассемблера, нет сложных терминов и буквально два десятка строк очень простого кода на С++. Если вы давно хотели изучить хуки, но не знали с чего начать — начните с этой статьи.
Читать дальше →
Total votes 94: ↑84 and ↓10 +74
Views106.7K
Comments 63

Хуки — это просто (часть 2)

Инфопульс Украина corporate blogProgrammingSystem Programming
Tutorial
image

Некоторое время назад я писал вводную статью о хуках (что это, зачем нужно, Hello world). Статья задумывалась простой, минималистичной и, вроде бы, такой и получилась. Единственный упрёк, который я услышал в комментариях — «Зачем же брать библиотеку Microsoft Detours, которая для коммерческого использования стоит 10 000$ ?». Замечание справедливое. В этой статье я приведу тот же пример с использованием другой библиотеки ценой примерно в 20 раз меньше (что уже вполне себе в рамках разумного) — madCodeHook.

Для лучшего понимания данной статьи рекомендуется сначала прочитать первую часть.
Читать дальше →
Total votes 25: ↑23 and ↓2 +21
Views18.1K
Comments 12

Особенности внедрения DLL и установки хуков в Modern-приложениях Windows 8/10

Инфопульс Украина corporate blogInformation SecurityC++System ProgrammingDevelopment for Windows
Tutorial
Для чего вообще нужно внедрять свои DLL-ки в чужие процессы и устанавливать там хуки? Для того, чтобы понять какие функции будет вызывать это приложение, с какими параметрами и что эти функции вернут. Таким образом мы можем понять внутреннюю логику работы этого приложения, узнать к каким файлам оно пытается получить доступ, какие данные пересылает по сети, мы можем добавить в него логирование, профилирование, отладить баг, получить из приложения некоторые данные или наоборот — добавить в его интерфейс что-нибудь нужное нам. Хуки использует известная утилита Spy++ для работы с окнами приложений, DirectX-отладчики вроде RenderDoc, некоторые утилиты от SysInternals, программы типа ApiMonitor и т.д.

Некоторое время назад я писал вводные статьи об использовании хуков на примерах библиотек Microsoft Detours и madCodeHook (если вы совсем не знакомы с хуками — это то, с чего можно начать). Описанных там техник достаточно для работы с обычными приложениями, но время не стоит на месте и вот сегодня у нас уже есть Metro Modern-приложения, входящие в комплект Windows 8 и Windows 10, а также распространяющиеся через Microsoft Store программы сторонних производителей. К примеру, новый браузер Spartan — это Modern-приложение. Внедрение DLL в эти процессы имеет свои особенности и на первый взгляд может даже показаться невозможным, но это не так. В этой статье я расскажу, как мы можем залезть внутрь Modern-приложения и установить в нём хуки в своих коварных целях.
Читать дальше →
Total votes 24: ↑23 and ↓1 +22
Views15.3K
Comments 1

Хуки — это просто (часть 3)

Инфопульс Украина corporate blogPythonC++System ProgrammingDevelopment for Windows
Tutorial
image

Как-то так получилось, что я написал на Хабре уже несколько статей о библиотеках для хуков. Первая была об общих принципах и реализации на базе Detours, вторая — о более дешевой (но не менее функциональной) библиотеке madCodeHook. Сегодня я расскажу об ещё одном варианте — библиотеке Deviare от компании Nektra. «Ещё одна точно такая же библиотека для хуков?» — спросите вы. «Такая же, да не такая» — отвечу я. У Deviare есть несколько особенностей, отличающих её и от Detours и от madCodeHook и делающей её в некоторых случаях намного более полезной.
Читать дальше →
Total votes 13: ↑11 and ↓2 +9
Views17.9K
Comments 2

Перехват функций в ядре Linux с помощью ftrace

System Programming*nixCDevelopment for Linux
Tutorial
ниндзя-пингвин,  En3lВ одном проекте, связанном с безопасностью Linux-систем, нам потребовалось перехватывать вызовы важных функций внутри ядра (вроде открытия файлов и запуска процессов) для обеспечения возможности мониторинга активности в системе и превентивного блокирования деятельности подозрительных процессов.

В процессе разработки нам удалось изобрести довольно неплохой подход, позволяющий удобно перехватить любую функцию в ядре по имени и выполнить свой код вокруг её вызовов. Перехватчик можно устанавливать из загружаемого GPL-модуля, без пересборки ядра. Подход поддерживает ядра версий 3.19+ для архитектуры x86_64.
Читать дальше →
Total votes 20: ↑20 and ↓0 +20
Views7.5K
Comments 4

Разработка формы на React. Принципы KISS, YAGNI, DRY на практике

JavaScriptPerfect codeReactJS
Sandbox
Здавствуйте, в этом туториале мы рассмотрим как разработать очень простую, но контролируемую форму в React, сфокусировавшись на качестве кода.

При разработке нашей формы мы будем следовать принципам «KISS», «YAGNI», «DRY». Для успешного прохождения данного туториала вам не нужно знать этих принципов, я буду объяснять их по ходу дела. Однако, я полагаю, что вы хорошо владеете современным javascript и умеете мыслить на React.
Читать дальше →
Total votes 11: ↑11 and ↓0 +11
Views9.8K
Comments 34

Почему я разочаровался в хуках

OTUS corporate blogJavaScriptProgrammingReactJS
Translation
Перевод статьи подготовлен в преддверии старта курса «React.js Developer».





Чем полезны хуки?


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

Я часто слышу, что хуки создали для замены классовых компонентов. К сожалению, пост «Введение в хуки», опубликованный на официальном сайте React, рекламирует это нововведение, прямо скажем, неудачно:

Хуки — нововведение в React 16.8, которое позволяет использовать состояние и другие возможности React без написания классов.
Читать дальше →
Total votes 26: ↑18 and ↓8 +10
Views7.9K
Comments 24

Кастомные хуки. Part 1

Website developmentJavaScriptProgrammingReactJS


Доброго времени суток, друзья!

Представляю вашему вниманию первую десятку пользовательских хуков.

Оглавление


Читать дальше →
Total votes 8: ↑6 and ↓2 +4
Views8.5K
Comments 6

Эпическая сага про маленький custom hook для React (генераторы, sagas, rxjs)

JavaScriptReactJS
Sandbox

Стояла задача реализовать прелоадер с обратным отсчетом на реакте. Т.к. гуглить не умею и очень люблю лепить велосипеды (хороший двухместный получился из двух велосипедов "Украина"), то я был обречен глубоко копать на полях асинхреньщины. Забегу наперёд и скажу, что реализовал этот прелоадер с помощью генераторов, redux-saga, rxjs. Очень интересный опыт и хотелось бы поделиться, учитывая, что в процессе разбирательств, кроме статей, описывающих очевидные вещи, и обрывков сугубо специфической информации на stackoverflow, не находил.

Часть первая - создание кастомного хука прелоадера.

Копнуть глубже
Total votes 2: ↑1 and ↓1 0
Views2.2K
Comments 4

Эпическая сага про маленький custom hook для React (генераторы, sagas, rxjs) часть 2

JavaScriptReactJS

Генераторы - это новый вид функций, который появился в ES6. О них написано немало статей и приведено множество теоретических примеров.

Представим, что генератор (функция в объявлении, которой есть *) - это некое электрическое устройство с дистанционным пультом управления. После создания и монтирования генератора (объявления функции) нужно его "крутануть" (выполнить эту функцию), чтобы он вращался на холостых оборотах и "запитал" пульт управления собой (при выполнении функции-генератора возвращает итератор). На этом пульте управления две кнопки: Пуск (вызвать первый раз метод next итератора) и Next (последующие вызовы метода next итератора). Далее с этим пультом управления можно носиться по всей электростанции (по нашему приложению) и когда понадобиться электрическая энергия (некие значения из функции-генератора) нажимать на пульте кнопку next (выполнять метод next() генератора). Генератор производит нужное количество электроэнергии (возвращает некое значение через yield) и опять переходит в холостой режим (функция-генератор ждёт следующего вызова next от итератора). Цикл продолжается, пока генератор может производить электричество (имеются операторы yield) или он не остановится (в функции-генераторе встретится return).

Копнуть ещё глубже
Total votes 1: ↑0 and ↓1 -1
Views937
Comments 9

Как Runescape ловит ботоводов, и почему она не поймала меня

Information SecurityAntivirus protectionReverse engineeringGames and game consoles
Translation

Автоматизация действий игрока всегда была серьёзной проблемой таких MMORPG, как World of Warcraft и Runescape. Подобный взлом игр сильно отличается от традиционных читов, например, в шутерах.

В один из выходных я решил изучить системы обнаружения, используемые Jagex для предотвращения автоматизации действий игрока в Runescape.

Ботоводство


Последние несколько месяцев аккаунт sch0u круглосуточно играл на сервере world 67, выполняя такие монотонные задачи, как убийство мобов и сбор ресурсов. На первый взгляд, этот аккаунт похож на любого другого игрока, но есть одно важное отличие: это бот.


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

Поэтому единственное, что я смог понять — это важность перемещений мыши, но так ли это на самом деле?
Читать дальше →
Total votes 11: ↑11 and ↓0 +11
Views7.6K
Comments 3

Заметка о том, как работают хуки в React

Website developmentJavaScriptProgrammingReactJS


Доброго времени суток, друзья!

Хочу поделиться с вами некоторыми наблюдениями относительно того, как работает React, а именно: предположениями о том, почему хуки нельзя использовать в if, циклах, обычных функциях и т.д. И действительно ли их нельзя использовать подобным образом?

Вопрос звучит следующим образом: почему хуки можно использовать только на верхнем уровне? Вот что по этому поводу говорит официальная документация.

Начнем с правил использования хуков.
Читать дальше →
Total votes 16: ↑12 and ↓4 +8
Views6.3K
Comments 4