Hook–FAQ: Разбираемся в старых и новых способах установки системных хуков. Hook–FAQ: Разбираемся в старых и новых способах установки системных хуков Разные типы левого бокового удара




Паутина в cs1.6 или hook для cs 1.6, называйте как хотите — но это уже довольно распространённый плагин в вашей контре. Сам плагин паутины в cs, даёт вам возможность осуществлять перемещение по карте, как будто вы паук и летаете сетью. То есть перемещаетесь по паутине. Сама настройка плагина паутина в cs1.6 позволяет сделать её не только для админов, или для других лиц, но и для всех игроков. Конечно же, если вы злостный админ, то плагин паутина в cs, вы можете настроить только для себя. Тем самым отгородив нубов летать по карте как живое мясо. По самой идее этот плагин паутины в cs, давно используется ещё и в quake2, в далёком 2001 году. И это hook — плагин hook для cs 1.6 был внедрён уже позже. Но от этого сам настрой не меняется.

Как использовать паутину в cs:
Для того, чтобы пускать паутину в cs1.6, вам нужно в консоле прописать привязку к клавише. На примере возьмём «r»

Bind "r" "+rope"

После этого нажимаем на «r», и можем летать как паук по паутине.

Квары для плагина паутины в cs:

amx_rope — Включать|выключать плагин паутины.
amx_rope_count — Сколько раз можно пользоваться паутиной за раунд.

Как и было выше подмечено, что имеется и другой плагин для вашего сервера кс. Это плагин hook для cs.
В основном он используется для prokreedz мода, чтобы учиться прыгать правильно.

Как установить плагин hook для cs:
1) Копируем файлы плагина prokreedz_hook.amxx в категорию plugins cstrike/addons/amxmodx/ .
2) Далее открываем файл плагинов (plugins.ini cstrike/addons/amxmodx/configs/ ) и прописываем туда prokreedz_hook.amxx , чтобы он работал.

Как использовать hook в cs:
Биндим кнопку к хуку и летаем.

Bind "r" "+hook"

На этом всё. Вы можете на выбрать любой из двух плагинов и уже с помощью них перемещаться по карте.

В архиве файлы плагина паутины для cs1.6, и файлы плагина hook для cs

Мы рады приветствовать вас на сайте, который посвящен одной из самых популярных игр в мире – Counter Strike. Наш сайт содержит множество разных файлов для данной игры, разные моды, свежие патчи, плагины.
Паутина в Контр Страйк 1.6 – это очень популярный плагин. Сам плагин паутины позволяет вам перемещаться по карте, как будто вы паук и перемещаетесь по паутине. Плагин паутина для cs 1.6, может стать доступным не только для админов, но и для обычных игроков, при условии его правильной настройки. Естественно, если вы злостный администратор, то плагин паутина вы настроите только для себя, тем самым не давая нубам летать по карте, словно мясо. Идею этого плагина использует уже давно, еще в quake 2 (2001 год). Плагин hook для cs 1.6 был внедрен немного позже, но сам настрой от этого не меняется.
Как правильно использовать паутину в cs? В своем рассказе мы постараемся дать точный ответ на этот вопрос.
Чтобы пускать паутину в cs 1.6, необходимо в консоле прописать привязку к определенной клавише. Для примера возьмем кнопку «А».
bind «А» +rope
После этого, нажатием на клавишу «А» вы можете летать как паук.
Представляем вашему вниманию квары для плагина паутина в cs:
amx_rope – включает и выключает плагин;
amx_rope_count – показывает, сколько раз вы можете использовать паутину за один раунд.
Существует еще один плагин для вашего КС – hook. Как правило, он используется для prokreedz-мода, чтобы научиться правильно (по меркам игры) прыгать.
Для установки hook для КС, потребуется:
1) Скопировать prokreedz_hook.amxx в plugins cstrike/addons/amxmodx/.
2) Открыть (plugins. ini cstrike/addons/amxmodx/configs/) и чтобы он работал, прописать туда prokreedz_hook.amxx.
Не умеете использовать hook? Все просто, биндим кнопку к хуку и летаем, как паук – bind «А» «+hook».
Надеемся, мы дали внятный ответ для всех сайтов и держателей игровых серверов на очень популярный и часто поднимаемый вопрос о том, как правильно использовать паутину для КС, как на ней летать. Этот плагин открывает новые возможности игры и делает ее еще интереснее, тем более что пользоваться ним так просто! Открывайте для себя новые возможности, следите за новинками Контр Страйк и узнавайте много нового и интересного.

Перед вами – полное руководство по правильному нанесению левого бокового удара (левый хук). Эта статья поможет тем начинающим боксерам, которым не нравится их левый хук, и, быть может, даже экспертам, желающим усилить и подправить уже поставленный удар. Изучите 4 разных вида левого хука и потренируйтесь правильно выбирать момент для его нанесения.

Я проработал с боксерами достаточно для того, чтобы понять, что для некоторых поставить левый боковой удар не представляет проблемы, а для других – это очень трудно. Это — как бег или танцы. Некоторые люди имеют врожденные данные и их тело имеет прекрасную механику и движется красиво, а другие «деревянные» от природы. Хорошая новость в том, что поставить левый хук можно.

Разные типы левого бокового удара

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

  1. Силовой левый хук – вы наклоняетесь (вкладываете корпус) в удар, голова движется чуть назад и вправо, все тело находится в движении и его вес переносится на заднюю ногу. Это я называю силовым хуком.
  2. Проникающий левый хук — во время удара голова идет вперед, но остается рядом с противником; корпус вращается (скручивается). Обычно этот удар наносится по туловищу противника в ближнем бою (ваша голова находится рядом с противником и поэтому ему трудно нанести контрудар). Проникающий хук хорош тем, что его можно повторять снова и снова, потому, что ваш корпус почти не теряет исходной позиции для повторного удара. (Некоторые боксеры наносят этот удар в форме «хукеркота» — т.е. как нечто среднее между левым хуком и левым апперкотом)
  3. Хук на вращении – при нанесении этого удара боксер вращает корпус вокруг своей левой стопы – т.е. смещается по часовой стрелке, уходя с линии ответного удара противника. Этот удар может быть очень сильным и вместе с тем позволит избежать контрудара. Это прекрасный встречный удар, который поможет вам «закрутить» оппонента в ринге.
  4. Хук в выпадом – при нанесении этого удара вы делаете выпад вперед и вытягиваете тело в направлении противника, а ваша левая рука летит по краектории петли. Левая рука начинает движение от вашего лица, затем быстро смещается влево и вылетает в направлении лица оппонента. Особенность этого удара состоит в том, что ваша левая рука выпрямляется как можно сильнее, чтобы достать противника. Этот левый хук больше похож на левый кросс. Некоторые боксеры при выполнении этого удара делают небольшой наклон вперед и используют свою спину, как пружину, выталкивающую левую руку. Этот удар не относится к ударам, которым обучают в залах, однако, при хорошем расчете времени, он очень опасен и эффективен.

Идеальным примером силового левого хука являются удары Майка Тайсона или Артуро Гатти. Посмотрите, как они вкладывают в левый хук все свое тело.

Идеальный пример проникающего левого хука можно подсмотреть у Марко Антонио Барреры, Микки Уорда или Рикки Хаттона. Обратите внимание, что голова остается на месте при вращении корпуса в момент удара.

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

Идеальные примеры левого хука с выпадом можно увидеть у Рикки Хаттона, Роя Джонса Младшего, Принца Нассима.

Для тех, кому трудно или больно бить левый хук по корпусу

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

Побробуйте следующее:

  • Не бейте хук строго горизонтально. Попробуйте бить полухук и полуапперкот. Пусть при в ударе будет некоторое движение вверх («хукеркот»).
  • Расслабьтесь и опустите плечо и локоть при ударе по корпусу.
  • Обе ноги при ударе должны повернуться и смотреть вправо.
  • У вас слишком сильно двигается рука. Делайте больше движение корпусом (скручивание), а не рукой.
  • В начале удара не отводите руку назад, а приопустите ее перед собой и наносите удар из этого положения.

Порядок нанесения левого хука (для мощного удара по корпусу)

  1. Станьте в свою обычную стойку.
  2. Чуть согните колени, голова и левая рука смещаются чуть влево и вниз.
  3. Быстро проверните корпус вправо одновременно выбрасывая левую руку.
  4. Все тело повернется вправо вместе с вашим крюком.
  5. Ваша правая пятка должна быть на полу, а левая поднимется от пола, выталкивая руку.
  6. Кулак сжимается практически в момент контакта с противником и ОСТАНАВЛИВАЕТСЯ сразу после удара.
  7. Остановите свой удар до того, как ваш корпус «перекрутит», иначе нарветесь на контрудар. Не надо бить с максимальной амплитудой.
  8. В конце удара ваша голова, левый кулак и ноги должны «смотреть» вправо.

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

Если бьете проникающий хук, вращайте корпус, но голова пусть останется на месте. В большинстве случаев лучше приопустить голову поближе к локтю противника, так чтобы можно было реально воткнуть свой удар и не слишком волноваться о возможном контрударе противника с его правой руки. Можно попробовать нанести этот хук в виде «хукеркота», чтобы придать удару по-настоящему проникающий эффект. Попробуйте!

Если бьете хук с вращением, пусть ваша рука летит чуть прямее. То есть это будет уже больше левый кросс, чем хук. Для усиления удара левую руку надо выбрасывать от лица. При нанесении этого хука все ваше тело вращается, левую руку выбрасываете прямо перед собой и одновременно ваша правая нога уходит влево и назад. Таким образом вы уходите с линии контратаки. Ваше тело сделает поворот вокруг левой стопы на 60-80 градусов по часовой стрелке.

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

Повторяющиеся хуки

Если вы поэкспериментировали с приведенными выше рекомендациями, вам наверняка стало понятно, что нанести два мощных левых хука подряд очень трудно. Наиболее распространенный способ нанести два хука подряд – это выбросить сначала проникающий хук, а потом силовой.

Итак, вы смещаете голову влево-вперед и наносите пронимкающий хук, оставляя голову на месте, а потом делаете резкое движение головой и всем телом вправо и наносите силовой хук. Можно нанести проникающий хук по корпусу и за ним хук на вращении в голову. Понаблюдайте как боксирует Шейн Мозли. Он любить выбрасывать по три проникающих левых хука подряд.

Советы по нанесению левых хуков:

  • Слабый и сильный — Пусть одинваш хук будет слабым, а второй сильным. Цель первого хука – заставить противника поставить защитный блок и перенести вестела в неподходящий момент. Можно также нанести сначала сильный, а потом слабый хук.
  • Медленный и быстрый — Нанесите медленный хук, а потом сразу очень быстрый. Можно наоборот.
  • Низко и высоко — Нанесите хук по корпусу, а второй в голову. Можно наоборот.

Когда наносить хук слева

Многие боксеры имеют хорошо поставленный левый хук, но так и не научились правильно расчитывать время его нанесения. Они готовы ждать весь день, пока представится возможность пробить левый хук, а она может и не представиться. Левый хук – это больше, чем просто оружие. Его можно использовать для нанесения ущерба, вскрытия защиты противника (для последующих сильных ударов с правой руки) и чтобы отвлечь оппонента. Важно иметь уверенность и бросать хук не боясь контрудара.

Отличные комбинации с левым хуком:

  • После правого кросса — Эта комбинация очевидна. Практически каждый боксер бьет левый хук после правого кросса.
  • После левого хука — Это – тоже очевидная вещь. Всех учат защищаться по принципу «слева-справа», поэтому двойной хук слева может иметь успех.
  • Хук на вращении и сразу мощный правый кросс. После хука не забудьте поставить обе пятки на пол, чтобы увеличить эффект от мощного кросса справа.
  • Быстрый хук по корпусу, чтобы опустить защиту оппонета и сразу джеб в голову.
  • Мощный хук по корпусу, чтобы опустить защиту оппонета (его правую руку) и сразу хук с выпадом в голову. После него – удар на ваше усмотрение.
  • Если ваш оппонент держит правую перчатку близко к лицу, бросьте свой хук по перчатке. Ущерб все равно будет ощутимым.
  • Сделайте сайд степ вправо, а потом нанесите быстрый левый хук с вращением. Это эффективно, когда ваш оппонент преследует вас с опущенными руками. Можно также опустить защиту противника, опустив свою собственную, но на долю секунды.
  • Легкий левый хук в голову и быстрый джеб, а затем правый кросс.
  • Когда противник преследует вас или же когда вас прижали к канатам, нагнитесь и нанесите правый боковой в корпус и, разгибайтесь вместе с левым хуком на выпаде в голову.

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

Так как многие мне пишут и спрашивают когда Hook финальная версия, решил всё-таки написать хук, но не Ar4Mode.
Старый свой хук решил не долбать (т.к. код там ужасен), по-этому решил написать нью. С некоторыми изменениями.

В архиве хук есть для: Ar4Mode, JBE, UJBL, JBM, так же для других модов (но нативы никакие не используются).
Так же есть наличие хука без сохранения (надо в plugins-iHOOK.ini поменять).

Отличия от старого хука:
[-] Настройка цвета хука.
[+] Сохранение по БД (MsQl).
[+] Через файл настройка: скорости, вида. размера, конца спрайта.
[+] Можно настроить определённый хук на определённый флаг.
[+] Через файл настройка флага: паутинки/меню/контроля/выключение.
[+|-] Визуальные изменения.
[+] Добавил новые спрайты/звуки (хотя вы и сами можете).
[+] Через файл можно настроить тип конца хука (разброс или же одиночный спрайт).
[+] (JBE) Можно выбрать при розыске у кого заберет хук (у всех или же только у человека в розыске).
[+] Хороший код.

Консольные команды:
1) say /hook - меню паутинки
2) +hook / +rope - активация паутинки

Нативы:
native_iHOOK_menu(id) - открытие меню.
native_iHOOK_get_hook_sett(id, iType) - получение настроек хука [ iType: 1 - Спрайт паутинки / 2 - звук / 3 - спрайт конца паутинки / 4 - размер / 5 - вид / 6 - скорость ]
bool:native_iHOOK_get_hook_player_have(id) - получение наличия хука.
================================================================

Хочешь стать Черным Властелином своего компьютера? Хочешь знать все тайны разработчиков малвари и антивирусов? Читай статью, медитируй, постигай азы дзена, и да снизойдет на тебя прозрение (всем спокойно, познание Дао и прободение Шамбалы в результате прочтения этой статьи редакцией не гарантируется - прим. ред)!

RTFM

Что такое хук (hook - крючок, англ.)? Это механизм, позволяющий отследить некое событие в операционной системе. Было оно разработано дяденьками из Microsoft с самыми благими намерениями - позволить программисту более эффективно решать свои задачи путем установки контроля над событиями клавиатуры, мыши и многого другого. Реализовался он при помощи всем известных функций: SetWindowsHook(Ex), UnhookWindowsHook(Ex) и CallNextHook(Ex).

Хук служит для перехвата неких событий до того, как они дойдут до приложения. Эта функция может реагировать на события и, в некоторых случаях, изменять или отменять их. Функции, получающие уведомления о событиях, называются «фильтрующими функ циями» и различаются по типам перехватываемых ими событий. Пример - фильтру ющая функция для перехвата всех событий мыши или клавиатуры. Чтобы Windows смогла вызывать функцию-фильтр, эта функция должна быть установлена, то есть, прикреплена к хуку (например, к клавиатурному). Прикрепление одной или нескольких фильтрующих функций к какомунибудь хуку называется установкой хука. Если к одному хуку прикреплено несколько фильтрующих функций, Windows реализует очередь функций, причем функция, прикрепленная последней, оказывается в начале очереди, а самая первая функция - в ее конце.

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

И вот тут-то, в пылу извечной борьбы между писателями вирусов и их «ловцами» встал один-единственный вопрос, который стоит на повестке дня до сих пор и будет стоять в ближайшем необозримом будущем - это вопрос выживания в операционной системе. Причем он также актуален и для антивирусов, ведь для хорошего системного программиста, пишущего вирусы/ руткиты, вынести процесс антивируса из системы - не слишком сложная задача.

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

«А как же SetWindowsHook?» - спросишь ты меня. «Прошлый век», - отвечу я. Использовать их давно уже не кошерно.

Что имеем?

Проще всего установить хук в системе путем создания так называемой прокси-функции. Иначе говоря, тебе надо определиться, какую функцию ты перехватываешь, и найти адрес ее вызова. Для этого обычно используется функция GetProcAddress примерно вот так: GetProcAddress(GetModuleHandle("ntdll.dll"), "CsrNewThread").

Однако просвещенные знают, что она практически всегда перехватывается аверами, и для нахождения адреса функции используют парсинг таблицы импорта той или иной библиотеки, обычно ntdll.dll, kernel32.dll (kernelbase.dll в Windows7) или advapi32.dll.

int MyNewFunction(void *param1,
int param2, bool param3)
{
return OriginalFunction(param1,
param2, param3);
}

После этого следует перезаписать адрес вызова OriginalFunction на свой - то есть, на MyNewFunction.

Теперь, если кто-либо захочет вызвать для исполнения OriginalFunction, сначала будет вызвана твоя прокси-функция MyNewFunction, которая уже потом передаст управление на оригинальный адрес. Вот таким вот нехитрым образом действуют, наверное, 8 хуков из 10. Этот способ удобен лишь своей простотой, но при этом представляет собой ужасное палево для аверов. Как? Поразмысли сам - все, что аверу нужно, это сравнить прежний, «законный», адрес функции с тем, что есть на самом деле. Если они отличаются - бьем тревогу. Кстати, встает и следующий вопрос: откуда взять этот самый адрес оригинальной функции? Тут особо гадать не надо - его считывают с нужного файла на диске. Этот подход основывается на том предположении, что вирус не будет патчить таблицу экспорта файла, лежащего на диске, ограничившись патчем виртуальной памяти.

Итак, едем дальше. Как я уже говорил, использование хука в виде прокси-функции хоть и удобная вещь, но, во-первых, палевная, а во-вторых, подходит лишь для начинающих. То есть не для тебя:). Самый распространенный вид хука - это сплайсинг. Уверен, ты не раз слышал это слово. В нашем случае это запись на начало функции пятибайтовой последовательности, которая представляет собой команду jmp по адресу обработчика перехвата. Здесь первый байт - опкод jmp, оставшиеся четыре байта - адрес твоей функции.

Если необходимо вызывать перехватываемую функцию, то перед заменой необходимо сохранить ее начальные байты и перед вызовом восстанавливать их. Недостаток данного метода состоит в следующем: если после восстановления начала функции произошло переключение контекста на другой поток приложения, то он сможет вызвать функцию, минуя перехватчик. Этот недостаток можно устранить, останавливая все побочные потоки приложения перед вызовом, и запуская после вызова. Ну и конечно, сплайсинг, как и прокси-функции, тоже легко выявляется методом сканирования памяти, так как сразу будет видно, что вызов функции идет куда-то в другое место.

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

IAT, EAT и другие звери

Возникает вопрос: а на что и, самое главное, где можно ставить свои хуки? Первое, что приходит на ум - конечно же, поставить перехват на Import Address Table (IAT). Когда приложение использует функцию из библиотеки, приложение должно импортировать адрес функции. Каждая DLL, используемая приложением, описана в структуре, называемой IMAGE_IMPORT_DESCRIPTOR. Эта структура содержит имя DLL, чьи функции импортированы приложе нием, и два указателя на два массива структур IMAGE_IMPORT_BY_ NAME. Структура IMAGE_IMPORT_BY_NAME содержит имена импортированных функций, используемых приложением.

Когда операционная система загружает приложение в память, читается структура IMAGE_IMPORT_DESCRIPTOR и каждая требуемая DLL загружается в память приложения.
Как только DLL отображена (mapped), операционная система располагает каждую импортированную функцию в памяти и записывает поверх одного из массивов IMAGE_IMPORT_BY_ NAME с исполнительным адресом функции.

Как только hook-функция появляется в адресном пространстве приложения, твой вирус сможет прочесть формат PE целевого приложения в памяти и заменить целевой адрес функции в IAT адресом hook-функции. Тогда, когда перехватываемая функция будет вызвана, твоя hook-функция будет выполнена вместо первоначальной функции. Чуть более редкий вариант, встречающий в природе, реализованный по приниципу «Если гора не идет к Магомеду...» - перехват Export Address Table (EAT), когда патчится, наоборот, таблица экспорта Dll, которая экспортирует целевую функцию.

STELTH-хуки: поймай меня, если сможешь

Как я уже писал выше, главный недостаток вышеуказанных методов перехвата - это вынужденная модификация памяти, что неизбежно ведет к ее детекту со стороны аверов. Есть ли выход? Как ни странно, есть. Даже два. Первый из них - это зарегистрировать свой обработчик исключений, затем добиться, чтобы он получил управление. Это можно сделать, например, потерев какой-либо участок памяти. Второй способ представляет собой несколько видоизмененный первый. То есть, ты, как и раньше, регистрируешь обработчик исключений, но для их генерирования ты используешь прием, известный среди дебаггеров. Как ты знаешь, дебагрегистры процессора используются для отладки приложений и доступны, как правило, из кернелмода. Однако их можно устанавливать и из юзермодных приложений путем использования функций GetThreadContext/ SetThreadContext. Используются дебаг-регистры для установки точек останова (Breakpoints) на доступе к участку памяти или исполнении.

Всего имеется восемь регистров, их назначение следующее:

  • DR0 - DR3 - Каждый из этих регистров содержит линейный адрес одной из четырех контрольных точек. Если подкачка страниц разрешена, то их значения транслируются в физические адреса по общему алгоритму;
  • DR4 - DR5 - Регистры зарезервированы и в процессоре i486 не используются;
  • DR6 - Отладочный регистр состояния. Он сообщает об условиях, выявленных во время генерирования отладочного исключения (номер 1). Биты регистра устанавливаются аппаратно, а сбрасываются программно;
  • DR7 - Регистр задает вид доступа к памяти, связанный с каждой контрольной точкой.

Итак, все, что тебе нужно сделать - это установить хардварный бряк (hardware breakpoint, он же int 1) на начало функции, чтобы процессор сгенерировал так называемое «одношаговое исключение» (single step exception) и затем, путем установки своего обработчика исключения: AddVectoredExceptionHandler(0, (PVECTORED_EXCEPTION_ HANDLER)DebugHookHandler), перехватить этот самый EXCEPTION_SINGLE_STEP.

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

int SetDebugBreak(FARPROC address)
{
int status = -1;
HANDLE thSnap = CreateToolhelp32Snapshot(
TH32CS_SNAPTHREAD, NULL);
THREADENTRY32 te;
te.dwSize = sizeof(THREADENTRY32);
Thread32First(thSnap, &te);
do
{
if(te.th32OwnerProcessID != GetCurrentProcessId())
continue;
HANDLE hThread = OpenThread(
THREAD_ALL_ACCESS, FALSE, te.th32ThreadID);
CONTEXT ctx;

GetThreadContext(hThread, &ctx);
if(!ctx.Dr 0)
{
ctx.Dr0 = MakePtr(ULONG, address, 0);
ctx.Dr7 |= 0x00000001;
status = 0;
}
else if(!ctx.Dr1)
{
ctx.Dr1 = MakePtr(ULONG, address, 0);
ctx.Dr7 |= 0x00000004;
status = 1;
}
else if(!ctx.Dr2)
{
ctx.Dr2 = MakePtr(ULONG, address, 0);
ctx.Dr7 |= 0x00000010;
status = 2;
}
else if(!ctx.Dr3)
{
ctx.Dr3 = MakePtr(ULONG, address, 0);
ctx.Dr7 |= 0x00000040;
status = 3;
}
else
status = -1;
ctx.ContextFlags = CONTEXT_DEBUG_REGISTERS;
SetThreadContext(hThread, &ctx);
CloseHandle(hThread);
}
while(Thread32Next(thSnap, &te));
return status;
}

Заключение

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

Links

http://vx.netlux.org - своеобразный музей вирусов, вирусных движков и прочей интересной ерунды. Must visit, одним словом.