🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.asm
15 messages
15 total messages Started by Matuzalem Thu, 31 Aug 2006 10:47
Wywołania funkcji...
#588
Author: Matuzalem
Date: Thu, 31 Aug 2006 10:47
14 lines
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...
#589
Author: Bogdan (bogdro)
Date: Sat, 02 Sep 2006 09:00
23 lines
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...
#590
Author: Matuzalem
Date: Sat, 02 Sep 2006 09:26
30 lines
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...
#591
Author: Bogdan (bogdro)
Date: Sun, 03 Sep 2006 07:51
39 lines
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...
#592
Author: Matuzalem
Date: Sun, 03 Sep 2006 10:55
23 lines
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...
#593
Author: Remek
Date: Sun, 03 Sep 2006 16:25
8 lines
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...
#594
Author: Matuzalem
Date: Sun, 03 Sep 2006 16:53
14 lines
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...
#598
Author: Paweł Pawlak
Date: Sun, 03 Sep 2006 19:21
15 lines
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...
#599
Author: Matuzalem
Date: Sun, 03 Sep 2006 21:54
23 lines
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...
#595
Author: Bogdan (bogdro)
Date: Mon, 04 Sep 2006 08:30
25 lines
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...
#597
Author: Remek
Date: Mon, 04 Sep 2006 16:04
15 lines
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...
#596
Author: Matuzalem
Date: Mon, 04 Sep 2006 18:10
32 lines
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...
#600
Author: Maciej Oszutowski
Date: Tue, 05 Sep 2006 12:37
12 lines
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...
#601
Author: Franek B
Date: Wed, 06 Sep 2006 09:43
48 lines
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...
#602
Author: Matuzalem
Date: Wed, 06 Sep 2006 10:34
62 lines
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