Hook–FAQ: Розбираємось у старих та нових способах встановлення системних хуків. Hook–FAQ: Розбираємось у старих та нових способах встановлення системних хуків Плагін для кс 1.6 hook

Павутина в 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".
Сподіваємося, ми дали виразну відповідь для всіх сайтів та власників ігрових серверівна дуже популярне питання про те, як правильно використовувати павутину для КС, як на ній літати. Цей плагін відкриває нові можливості гри і робить її ще цікавішим, тим більше що користуватися ним так просто! Відкривайте нові можливості, стежте за новинками Контр Страйк і дізнавайтеся багато нового і цікавого.

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

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, одним словом.

Оскільки багато хто мені пишуть і запитують коли 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) - отримання хука.
================================================================



Завантаження...
Top