Jump to content
SlicK

[RST] API Monitor

Recommended Posts

nytro, nu sunt programator, insa uite cum functioneaza chestiile astea de api hooking:

marea majoritate a apiurilor din dll-urile windowsului(cel putin XP) incep prin:

mov  edi,edi
push ebp
mov ebp, esp

win98 parca avea doar

push ebp
mov ebp,esp

si poate ca si de aceea api hookurile nu merg pe win98. POATE.

in fine,

toate 3 instructiunile se intind pe 5 bytes in total

cand se face hooking, aceste 3 instructiuni sunt suprascrise de o apelare a procedurii cu care faci hookul (in care vei spiona parametrii pasati). in acea procedura de hook, dupa ce vei lua parametrii, vei face un apel catre adevaratul API pe care l-a solicitat programul caruia ii faci hook. la intoarcerea din acel API, ai din nou controlul, ceea ce iti permite sa spionezi rezultatul APIului. apoi vei face saritura in codul programului tinta pt a-si continua executia in mod normal.

chestia asta cu interceptarea apiurilor se poate face prin injectarea unui dll, care sa faca chestiile alea de le-am, explicat mai sus.

debuggerele lucreaza in felul urmator: daca pui un breakpoint pe un API, debuggerul suprascrie prima instructiune a apiului cu int 03, iar cand aceasta instructiune este atinsa, debuggerul opreste aplicatia.

deci primele instructiuni din api-uri sunt cele mai tintite de debuggere si hookere

o metoda de a trece peste aceste api-hooking este asa-numita 'trambulina'

in ce consta:

programul nu face apel direct la API, ci va solicita executia codului dupa cele 3 instructiuni de la inceputul apiurilor. cele 3 instructiuni nu sunt neglijate, ele se vor emula in cadrul programului, dupa pasarea parametrilor. apoi se urca pe stiva adresa de intoarcere (care in cazul apelarii apiului direct este urcata implicit), iar apoi se va face saritura la urmatoarele instructiuni din api.

uite un exemplu in masm la messagebox:

                mov eax, MessageBox      ; tabela de import 
mov eax, [eax+2] ; .idata (luam decat adresa, nu si jumpul)
mov eax, [eax] ; adresa de start a procedurii messagebox
add eax, 5 ; sarim peste primele 3 instructiuni (5 bytes in total)

push 0 ;parametrii
push offset titlu
push offset unhooked
push 0


push intoarcerea ;urcam pe stiva adresa unde ne intoarcem dupa apelarea apiului

;mov edi, edi ; emularea primei instructiuni, deoarece nu face nimic o putem ignora

push ebp ; emulam a doua instructiune
mov ebp, esp ; emulam a treia instructiune

jmp eax ; sarim la messagebox+5 (adica apelam messagebox nu de la inceputul ei, ci dupa cele 3 instructiuni de la inceput

intoarcerea: ;aici windowsul va reveni dupa ce ne afiseaza mesageboxul

am facut si un foarte mic program-test: test.rar

incercati sa-i faceti hook la messagebox. puteti incerca cu debuggere sau programuri de genul hooking

-testat pe win xp

  • Upvote 1
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



×
×
  • Create New...