Hook-FAQ: Înțelegerea modalităților vechi și noi de a instala cârlige de sistem. Hook-FAQ: Înțelegerea modalităților vechi și noi de a instala cârlige de sistem Plugin pentru cârlige cs 1.6

Web în cs1.6 sau hook pentru cs 1.6, numiți-l așa cum doriți - dar acesta este deja un plugin destul de comun în contorul dvs. Pluginul web în sine în cs vă oferă posibilitatea de a vă deplasa pe hartă, ca și cum ați fi un păianjen și ați zbura cu o rețea. Adică te muți pe web. Însăși setarea pluginului web în cs1.6 vă permite să îl faceți nu numai pentru administratori sau pentru alte persoane, ci pentru toți jucătorii. Desigur, dacă sunteți un administrator rău intenționat, atunci pluginul web în cs, îl puteți configura numai pentru dvs. Astfel, îngrădiți-i pe noob pentru a zbura în jurul hărții ca pe carnea vie. Prin însăși idee, acest plugin web în cs a fost folosit multă vreme și în quake2, în 2001. Și acesta este un cârlig - pluginul hook pentru cs 1.6 a fost introdus mai târziu. Dar asta nu schimbă starea de spirit.

Cum se folosește web în cs:
Pentru a porni web-ul în cs1.6, trebuie să scrieți o legătură de taste în consolă. De exemplu, luați „r”

Leagă „r” „+frânghie”

După aceea, apăsați „r”, și putem zbura ca un păianjen pe pânză.

Cvars pentru pluginul web în cs:

amx_rope - Activați|Dezactivați pluginul web.
amx_rope_count - De câte ori puteți folosi web-ul pe rundă.

După cum sa menționat mai sus, există un alt plugin pentru serverul dvs. cs. Acesta este pluginul hook pentru cs.
Este folosit în principal pentru modul prokreedz pentru a învăța cum să sari corect.

Cum se instalează pluginul hook pentru cs:
1) Copiați fișierele plugin prokreedz_hook.amxxîn categorie cstrike/addons/amxmodx/.
2) Apoi, deschideți fișierul plugin ( plugins.ini cstrike/addons/amxmodx/configs/) și scrie acolo prokreedz_hook.amxx pentru a-l face să funcționeze.

Cum se folosește hook în cs:
Legați butonul de cârlig și zburați.

Leagă „r” „+hook”

Asta e tot. Puteți alege oricare dintre cele două pluginuri și le puteți utiliza pentru a vă deplasa pe hartă.

Arhiva conține fișiere de plugin web pentru cs1.6 și fișiere de plugin de cârlig pentru cs

Suntem bucuroși să vă urăm bun venit pe site-ul dedicat unuia dintre cele mai populare jocuri din lume – Counter strike. Site-ul nostru conține multe fișiere diferite pentru acest joc, diferite moduri, patch-uri noi, plugin-uri.
Web în Counter Strike 1.6 este un plugin foarte popular. Pluginul web în sine vă permite să navigați pe hartă ca și cum ați fi un păianjen și să navigați pe web. Pluginul web pentru cs 1.6 poate deveni disponibil nu numai pentru administratori, ci și pentru jucătorii obișnuiți, cu condiția ca setare corectă. Desigur, dacă sunteți un administrator rău intenționat, atunci veți configura pluginul web numai pentru dvs., împiedicând astfel noobs să zboare în jurul hărții precum carnea. Ideea acestui plugin a fost folosită de mult timp, în cutremurul 2 (2001). Pluginul hook pentru cs 1.6 a fost introdus puțin mai târziu, dar starea de spirit în sine nu se schimbă de la aceasta.
Cum să utilizați corect web în cs? În povestea noastră, vom încerca să dăm un răspuns exact la această întrebare.
Pentru a porni web-ul în cs 1.6, trebuie să scrieți o legare la o anumită cheie în consolă. De exemplu, să luăm butonul „A”.
lega "A" + sfoară
După aceea, apăsând tasta „A”, poți zbura ca un păianjen.
Vă prezentăm atenției cvars pentru plugin-ul web în cs:
amx_rope - pornește și dezactivează pluginul;
amx_rope_count - arată de câte ori puteți utiliza web-ul într-o rundă.
Există un alt plugin pentru CS - hook. De regulă, este folosit pentru prokreedz-mod pentru a învăța cum să sari corect (după standardele jocului).
Pentru a instala cârligul pentru CS, veți avea nevoie de:
1) Copiați prokreedz_hook.amxx în pluginurile cstrike/addons/amxmodx/.
2) Deschideți (plugins. ini cstrike/addons/amxmodx/configs/) și pentru a o face să funcționeze, scrieți acolo prokreedz_hook.amxx.
Nu știi cum să folosești cârligul? Este simplu, legați butonul de cârlig și zburați ca un păianjen - legați „A” „+ cârlig”.
Sperăm că am dat un răspuns clar pentru toate site-urile și deținătorii servere de jocuri la o întrebare foarte populară și adesea ridicată despre cum să utilizați în mod corespunzător internetul pentru COP, cum să zburați pe el. Acest plugin deschide noi posibilități pentru joc și îl face și mai interesant, mai ales că este atât de ușor de utilizat! Descoperiți noi oportunități, urmăriți cel mai recent Counter Strike și învățați o mulțime de lucruri noi și interesante.

Vrei să devii Black Lordul computerului tău? Vrei să afli toate secretele dezvoltatorilor de malware și antivirus? Citește articolul, meditează, înțelege elementele de bază ale Zen și poate ca iluminarea să coboare asupra ta (toată lumea cu calm, cunoașterea Tao-ului și perforarea lui Shambhala ca urmare a citirii acestui articol nu este garantată de editori - nota redacției)!

RTFM

Ce este un cârlig? Acesta este un mecanism care vă permite să urmăriți un eveniment din sistemul de operare. A fost dezvoltat de unchii de la Microsoft cu cea mai bună intenție – pentru a permite programatorului să-și rezolve problemele mai eficient, setând controlul asupra evenimentelor de la tastatură, mouse și multe altele. A fost implementat folosind funcții binecunoscute: SetWindowsHook(Ex), UnhookWindowsHook(Ex) și CallNextHook(Ex).

Cârligul servește la interceptarea anumitor evenimente înainte ca acestea să ajungă în aplicație. Această funcție poate reacționa la evenimente și, în unele cazuri, le poate modifica sau anula. Funcțiile care primesc notificări de evenimente se numesc „funcții de filtrare” și diferă prin tipurile de evenimente pe care le surprind. Un exemplu este o funcție de filtru pentru a captura toate evenimentele mouse-ului sau tastaturii. Pentru ca Windows să apeleze o funcție de filtru, această funcție trebuie să fie instalată, adică atașată la un cârlig (de exemplu, la un cârlig pentru tastatură). Atașarea uneia sau mai multor funcții de filtru la un cârlig se numește setarea cârligului. Dacă mai multe funcții de filtrare sunt atașate la același cârlig, Windows implementează o coadă de funcții, cu ultima funcție atașată în fața cozii și prima funcție la sfârșitul cozii.

De-a lungul timpului, conceptul nobil al unui cârlig a fost pervertit, cauza căruia au fost acțiunile scriitorilor de viruși și malware. Primii viruși au fost, cum să spun... naivi, cred. Erau un fișier exe separat care apela direct funcțiile dorite sisteme. Timpul a trecut și antivirusurile, care au apărut puțin mai târziu și au devenit brusc comerciale, au învățat rapid să prindă virușii prin semnături prin simpla scanare memorie cu acces aleator sau spațiu pe disc.

Și aici, în căldura luptei eterne dintre scriitorii de viruși și „prindetorii” lor, a existat o singură problemă care este încă pe ordinea de zi și va fi în viitorul apropiat nemărginit - aceasta este problema supraviețuirii în sistemul de operare. Mai mult, este relevant și pentru antivirusi, deoarece pentru un programator de sistem bun care scrie viruși/rootkit-uri, eliminarea procesului antivirus din sistem nu este o sarcină foarte dificilă.

Prin urmare, putem spune cu siguranță că una dintre sarcinile antivirusurilor este capacitatea de a-și păstra procesul intact și în siguranță de acțiunile rău intenționate ale virusului. În general, astăzi cârligele ar trebui înțelese ca stabilirea controlului asupra principalului funcțiile sistemului sistem de operare, de care depinde viabilitatea oricărui program - vorbim, de regulă, despre funcțiile de lucru cu procese, fire, rețea și internet etc.

— Dar cum rămâne cu SetWindowsHook? - mă întrebi. „Secolul trecut”, răspund. Nu mai este cușer să le folosești.

Ce avem?

Cel mai simplu mod de a instala un cârlig în sistem este prin crearea unei așa-numite funcție proxy. Cu alte cuvinte, trebuie să decideți ce funcție interceptați și să găsiți adresa apelului acesteia. Pentru a face acest lucru, funcția GetProcAddress este de obicei utilizată astfel: GetProcAddress(GetModuleHandle("ntdll.dll"), "CsrNewThread").

Cu toate acestea, oamenii luminați știu că este aproape întotdeauna interceptat de avers și, pentru a găsi adresa funcției, folosesc parsarea tabelului de import al unei anumite biblioteci, de obicei ntdll.dll, kernel32.dll (kernelbase.dll în Windows7). ) sau advapi32.dll.

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

După aceea, ar trebui să suprascrieți adresa de apel OriginalFunction cu propria dvs. - adică cu MyNewFunction.

Acum, dacă cineva dorește să apeleze OriginalFunction pentru execuție, funcția ta proxy MyNewFunction va fi apelată mai întâi, care apoi va transfera controlul către adresa inițială. Probabil că 8 cârlige din 10 funcționează într-un mod atât de simplu.Această metodă este convenabilă doar pentru simplitatea ei, dar în același timp este un căprior teribil pentru avers. Cum? Gândiți-vă singur - tot ce are nevoie aver este să compare prima, „legitimă” adresă a funcției cu ceea ce este cu adevărat. Dacă diferă, tragem un semnal de alarmă. Apropo, apare următoarea întrebare: de unde să obțineți chiar această adresă a funcției originale? Nu este nevoie să ghiciți prea multe - se citește din fișierul dorit de pe disc. Această abordare se bazează pe presupunerea că virusul nu va corecta tabelul de export al unui fișier de pe disc, limitându-se la un patch de memorie virtuală.

Deci hai sa mergem mai departe. După cum am spus, folosirea unui cârlig ca funcție proxy, deși un lucru convenabil, este, în primul rând, căprioară și, în al doilea rând, este potrivită numai pentru începători. Asta nu este pentru tine :). Cel mai comun tip de cârlig este matisarea. Sunt sigur că ai auzit acest cuvânt de multe ori. În cazul nostru, aceasta este o înregistrare la începutul funcției unei secvențe de cinci octeți, care este o comandă jmp la adresa handler-ului de interceptare. Aici primul octet este codul operațional jmp, restul de patru octeți sunt adresa funcției dvs.

Dacă trebuie să apelați o funcție interceptată, atunci înainte de a o înlocui, trebuie să salvați octeții inițiali și să-i restaurați înainte de a o apela. Defect aceasta metoda constă în următoarele: dacă, după restabilirea începutului funcției, s-a produs o comutare de context către un alt fir de aplicație, atunci va putea apela funcția, ocolind interceptorul. Acest neajuns poate fi remediat prin oprirea tuturor firelor laterale ale aplicației înainte de apel și pornind după apel. Și, desigur, splicing, ca și funcțiile proxy, este, de asemenea, ușor de detectat prin metoda de scanare a memoriei, deoarece va fi imediat clar că apelul funcției merge în altă parte.

În general, privind în viitor, trebuie să transmit publicului larg că aproape toate metodele de interceptare a apelurilor de funcții sunt detectate cumva prin scanarea memoriei. Cu excepția a două metode, dar citiți despre asta mai jos.

IAT, EAT și alte fiare

Se pune întrebarea: ce și, cel mai important, unde îți poți pune cârligele? Primul lucru care îmi vine în minte este, desigur, să puneți interceptarea pe Tabelul de Adrese de Import (IAT). Când o aplicație folosește o funcție dintr-o bibliotecă, aplicația trebuie să importe adresa funcției. Fiecare DLL folosit de o aplicație este descris într-o structură numită IMAGE_IMPORT_DESCRIPTOR. Această structură conține numele DLL ale cărei funcții sunt importate de aplicație și doi pointeri către două matrice de structuri IMAGE_IMPORT_BY_NAME. Structura IMAGE_IMPORT_BY_NAME conține numele funcțiilor importate utilizate de aplicație.

Când sistem de operareîncarcă aplicația în memorie, structura IMAGE_IMPORT_DESCRIPTOR este citită și fiecare DLL necesară este încărcată în memoria aplicației.
Odată ce DLL-ul este mapat, sistemul de operare plasează fiecare funcție importată în memorie și suprascrie una dintre matricele IMAGE_IMPORT_BY_NAME cu adresa de execuție a funcției.

Odată ce apare un hook în spațiul de adrese al aplicației, virusul dumneavoastră va putea citi formatul PE al aplicației țintă în memorie și va putea înlocui adresa țintă a funcției din IAT cu adresa hook-ului. Apoi, când funcția hooked este apelată, funcția hook va fi executată în locul funcției originale. O opțiune ceva mai rară care apare în natură, implementată conform principiului „Dacă muntele nu merge la Magomed...” - interceptarea Tabelului de Adrese de Export (EAT), când, dimpotrivă, tabelul de export Dll este patchizat , care exportă funcția țintă.

STELTH Hooks: Prinde-mă dacă poți

După cum am scris mai sus, principalul dezavantaj al metodelor de interceptare de mai sus este modificarea forțată a memoriei, care duce inevitabil la detectarea acesteia de către avers. Există o cale de ieșire? Destul de ciudat, există. Chiar și doi. Prima este să vă înregistrați gestionarea excepțiilor, apoi să-l lăsați să obțină controlul. Acest lucru se poate face, de exemplu, prin pierderea unei zone de memorie. A doua metodă este o primă ușor modificată. Adică tu, ca și înainte, înregistrezi un handler de excepții, dar pentru a le genera folosești o tehnică cunoscută printre depanatori. După cum știți, registrele de depanare a procesorului sunt folosite pentru depanarea aplicațiilor și sunt de obicei disponibile de la kernelmod. Cu toate acestea, ele pot fi setate și din aplicațiile usermode folosind funcțiile GetThreadContext/SetThreadContext. Registrele de depanare sunt folosite pentru a seta puncte de întrerupere (puncte de întrerupere) la accesul la o locație de memorie sau la execuție.

Există în total opt registre, scopul lor este următorul:

  • DR0 - DR3 - Fiecare dintre aceste registre conține adresa liniară a unuia dintre cele patru puncte de control. Dacă paginarea este activată, atunci valorile lor sunt traduse în adrese fizice conform unui algoritm comun;
  • DR4 - DR5 - Registrele sunt rezervate și nu sunt utilizate în procesorul i486;
  • DR6 - Registrul de stare de depanare. Raportează condițiile întâlnite la aruncarea excepției de depanare (numărul 1). Biții de registru sunt setați de hardware și resetati de software;
  • DR7 - Registrul specifică tipul de acces la memorie asociat fiecărui punct de control.

Deci, tot ce trebuie să faceți este să setați un punct de întrerupere hardware (alias int 1) la începutul funcției, astfel încât procesorul să genereze așa-numita „excepție cu un singur pas” (excepție cu un singur pas) și apoi, prin setarea dvs. propriul handler de excepție: AddVectoredExceptionHandler (0, (PVECTORED_EXCEPTION_ HANDLER)DebugHookHandler), conectați același EXCEPTION_SINGLE_STEP.

Când este generat, handlerul dumneavoastră va prelua controlul asupra funcției dorite. Avantajul incontestabil al acestei metode este că este absolut nedetectabilă prin scanarea memoriei, deoarece modificarea ei nu are loc aici.

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

GetThreadContext(hThread, &ctx);
dacă(!ctx.Dr 0)
{
ctx.Dr0 = MakePtr(ULONG, adresa, 0);
ctx.Dr7 |= 0x00000001;
stare = 0;
}
altfel dacă(!ctx.Dr1)
{
ctx.Dr1 = MakePtr(ULONG, adresa, 0);
ctx.Dr7 |= 0x00000004;
stare = 1;
}
altfel dacă(!ctx.Dr2)
{
ctx.Dr2 = MakePtr(ULONG, adresa, 0);
ctx.Dr7 |= 0x00000010;
stare = 2;
}
altfel dacă(!ctx.Dr3)
{
ctx.Dr3 = MakePtr(ULONG, adresa, 0);
ctx.Dr7 |= 0x00000040;
stare = 3;
}
altfel
stare = -1;
ctx.ContextFlags = CONTEXT_DEBUG_REGISTERS;
SetThreadContext(hThread, &ctx);
CloseHandle(hThread);
}
while(Thread32Next(thSnap, &te));
starea de returnare;
}

Concluzie

După cum puteți vedea, chiar și în cele mai dificile situații, puteți găsi o oportunitate de a vă executa codul. Sunt sigur că, în acest caz, codul dvs. vizează numai rezolvarea problemelor de protecție a sistemului dvs. Succes și compilare fericită!

Legături

http://vx.netlux.org - un fel de muzeu al virușilor, motoarelor de virus și alte lucruri interesante. Trebuie vizitat, într-un cuvânt.

Deoarece mulți oameni îmi scriu și întreabă când Hook este versiunea finală, am decis să scriu un hook, dar nu Ar4Mode.
M-am decis să nu-mi trag cârligul vechi (pentru că codul de acolo este groaznic), așa că am decis să scriu unul nou. Cu unele modificari.

Există un cârlig în arhivă pentru: Ar4Mode, JBE, UJBL, JBM, precum și pentru alte moduri (dar nu sunt folosite native).
Există și un cârlig fără salvare (trebuie să îl schimbați în plugins-iHOOK.ini).

Diferențele față de vechiul cârlig:
[-] Setarea culorii cârligului.
[+] Salvare prin baza de date (MsQl).
[+] Prin setarea fișierului: viteză, tip. dimensiune, capătul sprite-ului.
[+] Puteți seta un anumit cârlig la un anumit steag.
[+] Prin setarea steagului fișierului: cobwebs/meniu/control/shutdown.
[+|-] Modificări vizuale.
[+] S-au adăugat noi sprite/sunete (deși o puteți face singur).
[+] Prin fișier, puteți seta tipul de capăt al cârligului (scatter sau single sprite).
[+] (JBE) Puteți alege când doriți de la cine va fi luat cârligul (de la toată lumea sau numai de la persoana de pe lista de dorit).
[+] Cod frumos.

Comenzi pentru consolă:
1) say / hook - meniu web
2) +cârlig / +frânghie - activarea pânzei

Nativi:
native_iHOOK_menu(id) - meniu deschis.
native_iHOOK_get_hook_sett(id, iType) - obțineți setări de cârlig [ iType: 1 - web sprite / 2 - sunet / 3 - web end sprite / 4 - dimensiune / 5 - aspect / 6 - viteză ]
bool:native_iHOOK_get_hook_player_have(id) - obțineți prezența cârligului.
================================================================



Se încarcă...
Top