Thread View: pl.comp.lang.asm
15 messages
15 total messages
Started by Matuzalem
Thu, 31 Aug 2006 10:47
Wywołania funkcji...
Author: Matuzalem
Date: Thu, 31 Aug 2006 10:47
Date: Thu, 31 Aug 2006 10:47
14 lines
1617 bytes
1617 bytes
Witam Windows W jaki sposób wykryć, czy program wywołał jakąś funkcję taką jak np. CreateWindow, CreateThread, TextOut itd. Powiedzmy, że w naszym programie chcielibyśmy 'zainstalować' właśnie coś takiego. Na pewno prościej było by zrobić jakiś plik dziennika i przed/po każdej wywołanej funkcji dokonać wpisu (albo np. skorzystać z funkcji: OutputDebugString). Mnie właśnie chodzi o ten pierwszy sposób, o wykrycie. Pozdrawiam
Re: Wywołania funkcji...
Author: Bogdan (bogdro)
Date: Sat, 02 Sep 2006 09:00
Date: Sat, 02 Sep 2006 09:00
23 lines
1967 bytes
1967 bytes
Matuzalem napisał(a): > Witam > > Windows > > W jaki sposób wykryć, czy program wywołał jakąś funkcję taką > jak np. CreateWindow, CreateThread, TextOut itd. > Powiedzmy, że w naszym programie chcielibyśmy 'zainstalować' > właśnie coś takiego. > Na pewno prościej było by zrobić jakiś plik dziennika i przed/po > każdej wywołanej funkcji dokonać wpisu (albo np. skorzystać z > funkcji: OutputDebugString). > Mnie właśnie chodzi o ten pierwszy sposób, o wykrycie. Chodzą mi po głowie funkcje z "Hook" w nazwie. Nie wiem, czy takie coś w ogóle istnieje, ale proces przechwytywania wywołań nazywa się właśnie 'hooking' (tu już może Google cos da). Ale mówię DUŻE 'CHYBA'. -- Pozdrawiam, Bogdan (Linux i FreeDOS) Kurs assemblera x86 (DOS i Linuks): http://rudy.mif.pg.gda.pl/~bogdro Grupy dyskusyjne o asm: pl.comp.lang.asm alt.pl.asm alt.pl.asm.win32 Prawdziwy, bezpieczny komunikator: www.JabberPL.org
Re: Wywołania funkcji...
Author: Matuzalem
Date: Sat, 02 Sep 2006 09:26
Date: Sat, 02 Sep 2006 09:26
30 lines
2460 bytes
2460 bytes
Bogdan (bogdro) napisał(a): > Matuzalem napisał(a): > > Witam > > > > Windows > > > > W jaki sposób wykryć, czy program wywołał jakąś funkcję taką > > jak np. CreateWindow, CreateThread, TextOut itd. > > Powiedzmy, że w naszym programie chcielibyśmy 'zainstalować' > > właśnie coś takiego. > > Na pewno prościej było by zrobić jakiś plik dziennika i przed/po > > każdej wywołanej funkcji dokonać wpisu (albo np. skorzystać z > > funkcji: OutputDebugString). > > Mnie właśnie chodzi o ten pierwszy sposób, o wykrycie. > > Chodzą mi po głowie funkcje z "Hook" w nazwie. Nie wiem, czy takie > coś w ogóle istnieje, ale proces przechwytywania wywołań nazywa się > właśnie 'hooking' (tu już może Google cos da). Ale mówię DUŻE 'CHYBA'. > > -- > Pozdrawiam, Bogdan (Linux i FreeDOS) > Kurs assemblera x86 (DOS i Linuks): http://rudy.mif.pg.gda.pl/~bogdro > Grupy dyskusyjne o asm: pl.comp.lang.asm alt.pl.asm alt.pl.asm.win32 > Prawdziwy, bezpieczny komunikator: www.JabberPL.org Tak są np. SetWindowsHookEx, tylko z tego co mi wiadomo nie umożliwia to przechwycenia kiedy i co zostało wywołąne (jako funkcja). Pozdrawiam
Re: Wywołania funkcji...
Author: Bogdan (bogdro)
Date: Sun, 03 Sep 2006 07:51
Date: Sun, 03 Sep 2006 07:51
39 lines
2930 bytes
2930 bytes
Matuzalem napisał(a): > Bogdan (bogdro) napisał(a): >> Matuzalem napisał(a): >>> Witam >>> >>> Windows >>> >>> W jaki sposób wykryć, czy program wywołał jakąś funkcję taką >>> jak np. CreateWindow, CreateThread, TextOut itd. >>> Powiedzmy, że w naszym programie chcielibyśmy 'zainstalować' >>> właśnie coś takiego. >>> Na pewno prościej było by zrobić jakiś plik dziennika i przed/po >>> każdej wywołanej funkcji dokonać wpisu (albo np. skorzystać z >>> funkcji: OutputDebugString). >>> Mnie właśnie chodzi o ten pierwszy sposób, o wykrycie. >> Chodzą mi po głowie funkcje z "Hook" w nazwie. Nie wiem, czy takie >> coś w ogóle istnieje, ale proces przechwytywania wywołań nazywa się >> właśnie 'hooking' (tu już może Google cos da). Ale mówię DUŻE 'CHYBA'. >> >> -- >> Pozdrawiam, Bogdan (Linux i FreeDOS) >> Kurs assemblera x86 (DOS i Linuks): http://rudy.mif.pg.gda.pl/~bogdro >> Grupy dyskusyjne o asm: pl.comp.lang.asm alt.pl.asm alt.pl.asm.win32 >> Prawdziwy, bezpieczny komunikator: www.JabberPL.org > > Tak są np. SetWindowsHookEx, tylko z tego co mi wiadomo nie umożliwia > to przechwycenia kiedy i co zostało wywołąne (jako funkcja). To jeszcze mi przychodzi do głowy napisanie własnych DLLi zastępujących te systemowe (w katalogu z programem, żeby to one były załadowane) i rejestrujące gdzieś informacje o uruchomionych funkcjach (i oczywiście uruchamiających te oryginalne funkcje). Choć nie wiem, czy tak się da. Trochę to naokoło. -- Pozdrawiam, Bogdan (Linux i FreeDOS) Kurs assemblera x86 (DOS i Linuks): http://rudy.mif.pg.gda.pl/~bogdro Grupy dyskusyjne o asm: pl.comp.lang.asm alt.pl.asm alt.pl.asm.win32 Prawdziwy, bezpieczny komunikator: www.JabberPL.org
Re: Wywołania funkcji...
Author: Matuzalem
Date: Sun, 03 Sep 2006 10:55
Date: Sun, 03 Sep 2006 10:55
23 lines
2312 bytes
2312 bytes
Bogdan (bogdro) napisał(a): > To jeszcze mi przychodzi do głowy napisanie własnych DLLi > zastępujących te systemowe (w katalogu z programem, żeby to one były > załadowane) i rejestrujące gdzieś informacje o uruchomionych funkcjach > (i oczywiście uruchamiających te oryginalne funkcje). Choć nie wiem, > czy tak się da. Trochę to naokoło. > > -- > Pozdrawiam, Bogdan (Linux i FreeDOS) > Kurs assemblera x86 (DOS i Linuks): http://rudy.mif.pg.gda.pl/~bogdro > Grupy dyskusyjne o asm: pl.comp.lang.asm alt.pl.asm alt.pl.asm.win32 > Prawdziwy, bezpieczny komunikator: www.JabberPL.org No i właśnie tak robie :) Potem DLL-ka komunikuje się z programem "wszczykującym" przez potoki albo mailsloty. (ale nadal nie wiem jak "wyczulić" dll-ke na wywołanie funkcji... ) Cały proces wszczyknięcia fajnie działa (prawie jak CreateRemoteThread)... Musze poszukać jakiś dbg z kodami, może coś tam znajde... Pozdrawiam
Re: Wywołania funkcji...
Author: Remek
Date: Sun, 03 Sep 2006 16:25
Date: Sun, 03 Sep 2006 16:25
8 lines
1234 bytes
1234 bytes
> jeszcze mi przychodzi do głowy napisanie własnych DLLi Podziwiam Cię za to, że rozumiesz o co chodzi. :) Ja ani w ząb nie kojarzę. Czy o własny program, czy obcy? Jeśli napisany przez siebie, to po co? -- Remek
Re: Wywołania funkcji...
Author: Matuzalem
Date: Sun, 03 Sep 2006 16:53
Date: Sun, 03 Sep 2006 16:53
14 lines
1646 bytes
1646 bytes
Remek napisał(a): > > jeszcze mi przychodzi do głowy napisanie własnych DLLi > > Podziwiam Cię za to, że rozumiesz o co chodzi. :) > Ja ani w ząb nie kojarzę. Czy o własny program, czy obcy? > Jeśli napisany przez siebie, to po co? > > -- > Remek Ne za bardzo rozumiem pytań... :) Pozdrawiam
Re: Wywołania funkcji...
Author: Paweł Pawlak
Date: Sun, 03 Sep 2006 19:21
Date: Sun, 03 Sep 2006 19:21
15 lines
1600 bytes
1600 bytes
Dnia 8/31/2006 12:47 PM, Matuzalem wrote: > > W jaki sposób wykryć, czy program wywołał jakąś funkcję taką > jak np. CreateWindow, CreateThread, TextOut itd. > Powiedzmy, że w naszym programie chcielibyśmy 'zainstalować' > właśnie coś takiego. > Na pewno prościej było by zrobić jakiś plik dziennika i przed/po > każdej wywołanej funkcji dokonać wpisu (albo np. skorzystać z > funkcji: OutputDebugString). > Mnie właśnie chodzi o ten pierwszy sposób, o wykrycie. Może podmiana IAT? Hasło do Google: "iat patching" Pozdrawiam, Morris
Re: Wywołania funkcji...
Author: Matuzalem
Date: Sun, 03 Sep 2006 21:54
Date: Sun, 03 Sep 2006 21:54
23 lines
2015 bytes
2015 bytes
Paweł Pawlak napisał(a): > Dnia 8/31/2006 12:47 PM, Matuzalem wrote: > > > > W jaki sposób wykryć, czy program wywołał jakąś funkcję taką > > jak np. CreateWindow, CreateThread, TextOut itd. > > Powiedzmy, że w naszym programie chcielibyśmy 'zainstalować' > > właśnie coś takiego. > > Na pewno prościej było by zrobić jakiś plik dziennika i przed/po > > każdej wywołanej funkcji dokonać wpisu (albo np. skorzystać z > > funkcji: OutputDebugString). > > Mnie właśnie chodzi o ten pierwszy sposób, o wykrycie. > > Może podmiana IAT? Hasło do Google: "iat patching" > > Pozdrawiam, > Morris Nie miałem jeszcze zbyt wiele czasu na przeglądnięcie zasobów na temat 'iat patching', ale tak pobierznie to o qurczątko :) to chyba to... wielkie dzięki Pozdrawiam
Re: Wywołania funkcji...
Author: Bogdan (bogdro)
Date: Mon, 04 Sep 2006 08:30
Date: Mon, 04 Sep 2006 08:30
25 lines
2388 bytes
2388 bytes
Remek napisał(a): >> jeszcze mi przychodzi do głowy napisanie własnych DLLi > > Podziwiam Cię za to, że rozumiesz o co chodzi. :) > Ja ani w ząb nie kojarzę. Czy o własny program, czy obcy? > Jeśli napisany przez siebie, to po co? Problem polega na rejestracji uruchomień pewnych funkcji uruchamianych przez własny program autora. O to, po co to autorowi, spytaj jego samego :) Moja sugestia polega na tym, żeby w katalogu programu umieścić własne zamienniki: kernel32.dll, user32.dll i innych, które jeszcze będzie trzeba. W czasie uruchamiania programu system (miejmy nadzieję), zamiast ładować prawdziwe biblioteki systemowe, załadowałby te (bo są w katalogu bieżącym). Te podstawione DLLe działały by w taki sposób, że przy uruchomieniu jakiejś funkcji zwiększałyby licznik jej uruchomień (lub robiły co innego - jakieś powiadamianie itp.), po czym przekazywałyby (oczywiście) kontrolę do prawdziwych funkcji z systemowych DLLi. -- Pozdrawiam, Bogdan (Linux i FreeDOS) Kurs assemblera x86 (DOS i Linuks): http://rudy.mif.pg.gda.pl/~bogdro Grupy dyskusyjne o asm: pl.comp.lang.asm alt.pl.asm alt.pl.asm.win32 Prawdziwy, bezpieczny komunikator: www.JabberPL.org
Re: Wywołania funkcji...
Author: Remek
Date: Mon, 04 Sep 2006 16:04
Date: Mon, 04 Sep 2006 16:04
15 lines
1506 bytes
1506 bytes
> Problem polega na rejestracji uruchomień To mam w pilku źródłowym. Chyba jestem niereformowalny. > w katalogu programu umieścić własne zamienniki: kernel32.dll, user32.dll i innych Też myślałem o takim oszustwie, ale nie próbowałem, czy zadziała. System ładuje DLL'a do pamięci i przydziela adresy. Trzeba by chyba pozmieniać nazwy, żeby się nie pogryzły, a z tym już będzie problem. -- Remek
Re: Wywołania funkcji...
Author: Matuzalem
Date: Mon, 04 Sep 2006 18:10
Date: Mon, 04 Sep 2006 18:10
32 lines
2893 bytes
2893 bytes
Bogdan (bogdro) napisał(a): > Remek napisał(a): > >> jeszcze mi przychodzi do głowy napisanie własnych DLLi > > > > Podziwiam Cię za to, że rozumiesz o co chodzi. :) > > Ja ani w ząb nie kojarzę. Czy o własny program, czy obcy? > > Jeśli napisany przez siebie, to po co? > > Problem polega na rejestracji uruchomień pewnych funkcji > uruchamianych przez własny program autora. O to, po co to autorowi, > spytaj jego samego :) > Moja sugestia polega na tym, żeby w katalogu programu umieścić własne > zamienniki: kernel32.dll, user32.dll i innych, które jeszcze będzie > trzeba. W czasie uruchamiania programu system (miejmy nadzieję), > zamiast ładować prawdziwe biblioteki systemowe, załadowałby te (bo są > w katalogu bieżącym). Te podstawione DLLe działały by w taki sposób, > że przy uruchomieniu jakiejś funkcji zwiększałyby licznik jej > uruchomień (lub robiły co innego - jakieś powiadamianie itp.), po czym > przekazywałyby (oczywiście) kontrolę do prawdziwych funkcji z > systemowych DLLi. > > -- > Pozdrawiam, Bogdan (Linux i FreeDOS) > Kurs assemblera x86 (DOS i Linuks): http://rudy.mif.pg.gda.pl/~bogdro > Grupy dyskusyjne o asm: pl.comp.lang.asm alt.pl.asm alt.pl.asm.win32 > Prawdziwy, bezpieczny komunikator: www.JabberPL.org Myśle, że jest to do wykonania, ale jednak polecam to co Paweł zaproponował: "'iat patching" - genialne :) Pozdrawiam
Re: Wywołania funkcji...
Author: Maciej Oszutowski
Date: Tue, 05 Sep 2006 12:37
Date: Tue, 05 Sep 2006 12:37
12 lines
1146 bytes
1146 bytes
Dnia 31 Aug 2006 03:47:43 -0700, Matuzalem napisał(a): > W jaki sposób wykryć, czy program wywołał jakąś funkcję taką > jak np. CreateWindow, CreateThread, TextOut itd. > Powiedzmy, że w naszym programie chcielibyśmy 'zainstalować' > właśnie coś takiego. http://www.codeguru.com/Cpp/W-P/system/misc/article.php/c5667 -- | Maciej Oszutowski | Mowa jest srebrem | | imagiATpsytranceDOTpl | a milczenie owiec. |
Re: Wywołania funkcji...
Author: Franek B
Date: Wed, 06 Sep 2006 09:43
Date: Wed, 06 Sep 2006 09:43
48 lines
2227 bytes
2227 bytes
> W jaki sposób wykryć, czy program wywołał jakąś funkcję ...
Podam przykład w C (Borland C++ 5.5.1). Przetłumacz to sobie na ASM.
1) Utwórz plik definicyjny zawierający funkcje WinAPI,
które chcesz podglądać, np:
; MYIMPORT.DEF
;
LIBRARY kernel32.dll
EXPORTS
MyExitProcess = ExitProcess
MyTerminateProcess = TerminateProcess
2) Utwórz blbliotekę tak przedefiniowanych funkcji:
implib.exe myimport.lib myimport.def
Biblioteka MYIMPORT.LIB zawiera moduły My... udostępniające
publiczne funkcje o takich samych nazwach My...
Moduły zawierają rekordy COMMENT (0x88) Class IMPDEF (0xa0).
Można je utworzyć też innymi metodami, ale wydaje mi się,
że przedstawiony sposób jest najprostszy.
Dołącz bibliotekę jako pierwszą na liście konsolidacji.
3) Podglądaj do woli, np:
#include <windows.h>
// ...
ExitProcess(0);
// ...
WINBASEAPI DECLSPEC_NORETURN VOID WINAPI ExitProcess(IN UINT uExitCode)
{
extern WINBASEAPI DECLSPEC_NORETURN VOID WINAPI
MyExitProcess(IN UINT uExitCode);
MessageBox(NULL, "A kuku !", "", MB_OK);
MyExitProcess(uExitCode);
}
BTW Próba bezpośredniego użycia pliku MYIMPORT.DEF jako parametru
ilink32 okazała się nieskuteczna (może ktoś wie dlaczego ?)
Pozdrawiam
--
Franciszek Bałaban
Re: Wywołania funkcji...
Author: Matuzalem
Date: Wed, 06 Sep 2006 10:34
Date: Wed, 06 Sep 2006 10:34
62 lines
3191 bytes
3191 bytes
Franek B napisał(a):
> > W jaki sposób wykryć, czy program wywołał jakąś funkcję ...
>
> Podam przykład w C (Borland C++ 5.5.1). Przetłumacz to sobie na ASM.
>
> 1) Utwórz plik definicyjny zawierający funkcje WinAPI,
> które chcesz podglądać, np:
>
> ; MYIMPORT.DEF
> ;
> LIBRARY kernel32.dll
> EXPORTS
> MyExitProcess = ExitProcess
> MyTerminateProcess = TerminateProcess
>
> 2) Utwórz blbliotekę tak przedefiniowanych funkcji:
>
> implib.exe myimport.lib myimport.def
>
> Biblioteka MYIMPORT.LIB zawiera moduły My... udostępniające
> publiczne funkcje o takich samych nazwach My...
> Moduły zawierają rekordy COMMENT (0x88) Class IMPDEF (0xa0).
> Można je utworzyć też innymi metodami, ale wydaje mi się,
> że przedstawiony sposób jest najprostszy.
> Dołącz bibliotekę jako pierwszą na liście konsolidacji.
>
> 3) Podglądaj do woli, np:
>
> #include <windows.h>
>
> // ...
> ExitProcess(0);
> // ...
>
> WINBASEAPI DECLSPEC_NORETURN VOID WINAPI ExitProcess(IN UINT uExitCode)
> {
> extern WINBASEAPI DECLSPEC_NORETURN VOID WINAPI
> MyExitProcess(IN UINT uExitCode);
>
> MessageBox(NULL, "A kuku !", "", MB_OK);
> MyExitProcess(uExitCode);
> }
>
> BTW Próba bezpośredniego użycia pliku MYIMPORT.DEF jako parametru
> ilink32 okazała się nieskuteczna (może ktoś wie dlaczego ?)
>
> Pozdrawiam
> --
> Franciszek Bałaban
Tak też można, tylko to ma jedną wade... programów już
skompilowanych (do których nie posiada się źrudeł, ta metoda nie
zadziała)
Tak wiem, napisałem: "w naszym programie", czyli, że posiadam
źrudła, no więc ok.
Jest jeszcze jedna wada (właściwie to dwie): program musiałby
jawnie/niejawnie importować bibliotekę - druga - funkcje pozmieniały
by nazwy np. tak jak podałeś na My... (choć to znowu nie taka wada,
ale...)
Pozdrawiam
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads