Builder.cz - Informacni server o programovani

Odběr fotomagazínu

Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!

 

Zadejte Vaši e-mailovou adresu:

Kamarád fotí rád?

Přihlas ho k odběru fotomagazínu!

 

Zadejte e-mailovou adresu kamaráda:



Hook funkce

Seznam témat     Nová odpověď

Přihlásit se     Registrace     Zapomenuté heslo

Re: Hook funkce

Autor: veix

22:59:53 25.05.2008

Ak som to spravne pochopil chces toto:
Injektujes svoju dll do adresneho priestoru ineho procesu a chces presmerovat niektore volania na svoju funkciu.

Su na to rozne postupy spomeniem :
1. Zmenenie adresy priamo v IAT.
2. Patchnutie prvych 5 bajtov funkcie ktoru chces presmerovat skokom na svoju funkciu
a ta sa potom postara o zavolanej povodnej funkcie a opravenie tich 5bajtov.

Tu sa dostavame k pravej podstate fungovania userland rootkitov , preto ta presmerujem na vyborny clanok jedneho znameho rkits autora (napisal hacker defender).

http://vx.org.ua/29a/29a-7/Articles/29A-7.019

co sa tyka stacku staci respektovat calling conventions a byt obozretny s push .pop.

Citovat příspěvek

 

Re: Hook funkce

Autor: vrtulex

0:37:42 23.05.2008

Myroun Napsal:
-------------------------------------------------------
> > Nebezpečí multithreadu se odvrátí pomocí
> synchronizačních primitiv (event, semafor,
> mutex...)
>
> to prave nemusi fungovat, pokud hostitelsky
> program nepocita se "sdilenim" dane promene mezi
> vlakny, tedy pokud pristupuje k promene jen z
> jednoho vlakna a nepouziva synchronizaci.

Já tohle myslel spíš na to, aby se zabránilo ve volání té hookovací funkce ve více vláknech najednou. Jinak samozřejmě máš pravdu.

Citovat příspěvek

 

Re: Hook funkce

Autor: Myroun

10:45:57 21.05.2008

> Nebezpečí multithreadu se odvrátí pomocí synchronizačních primitiv (event, semafor, mutex...)

to prave nemusi fungovat, pokud hostitelsky program nepocita se "sdilenim" dane promene mezi vlakny, tedy pokud pristupuje k promene jen z jednoho vlakna a nepouziva synchronizaci.

Citovat příspěvek

 

Re: Hook funkce

Autor: vrtulex

15:21:15 18.05.2008

Nebezpečí multithreadu se odvrátí pomocí synchronizačních primitiv (event, semafor, mutex...)

Jinak tomu, co cheš udělat, se říká "inline hooking", Google by měl něco vyhodit...

Trocha znalosti ASM a mechanismů, jak se vykonává kód je v téhle oblasti téměř nutná.

Ale myslím, že moc lidí ti tady neporadí, protože dobrých důvodů pro užití inline hooků je pramálo.

Citovat příspěvek

 

Re: Hook funkce

Autor: Myroun

14:37:18 06.05.2008

> 2)Tato aplikace spouští určitou funkci na místě A funkc na místě B
Tomu moc nerozumim.

Chapu to tak, ze chces zamenit jedno konkretni volani za volani tve injektovane funkce, ze ktere potom zavolas tu originalni funkci.

Nejsou v tom zadne cary, dulezite je, abys nenarusil zasobnik. Pri volani te originalni funkce musis zajistit, aby byly na zasobniku vsechny jeji parametry a aby pri navratu z tve (injektovane) funkce byl zasobnik v takovem stavu, v jakem by byl pri navratu z funkce originalni.
Take bys mel asi zachovat navratovou hodnotu te originalni funkce (pokud neni zamerem ji zmenit).


> ale vzhledem k problemy s multithread safety potřebuji zaručit, aby se mi určitý kód volal bezpečně.

To bys musel napsat, co konkretne ma ta injektovana funkce delat.


>spadlo už při pokusu přepsat tu adresu.

viz funkce VirtualProtectEx()

Citovat příspěvek

 

Hook funkce

Autor: kovarex

22:25:39 05.05.2008

Zdravím, o asm vím jen pramálo a potřebuji vyřešit následující problém.

1)Mám aplikaci ke který jsem si injectnul dll, a mohu tam tedy dělat co chci, ale vzhledem k problemy s multithread safety potřebuji zaručit, aby se mi určitý kód volal bezpečně.
2)Tato aplikace spouští určitou funkci na místě A funkc na místě B

Já by jsem chtěl dosáhnout toho, aby se místo B spustila moje funkce, a ta by na konci zavolala B, a aby se to potom vrátilio normálně za místo A a proces pokračoval, v této funkci B by jsem tedy mohl volat další funkce aplikace bez starosti z crashe.

Funkce B nemá žádné parametry, nejspíš ani nic nevrací (to už v tom ollydbg nepoznám).

Zkoušel jsem nějaké naivní metody jako změnit v C++ adresu toho callu na moji funkci a v moji funkci pak volat zpět funkci B, ale to spadlo už při pokusu přepsat tu adresu.

předem děkuji za jakoukoliv radu.

Citovat příspěvek

 

 

 

Přihlášení k mému účtu

Uživatelské jméno:

Heslo: