Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.05.24;
Скачать: CL | DM;

Вниз

ID скрытого процесса   Найти похожие ветки 

 
8shar ©   (2009-03-31 06:30) [0]

Доброго дня. Нужно узнать ID скрытого процесса, как это осуществить?


 
Palladin ©   (2009-03-31 07:47) [1]

А ID не скрытого ты уже умеешь?


 
KilkennyCat ©   (2009-03-31 08:16) [2]


> Palladin ©   (31.03.09 07:47) [1]

а че там уметь? ctrl+alt+del и в "вид"-"выбрать столбцы"-"показать PID"


 
8shar ©   (2009-03-31 12:30) [3]

Да. Вот так:

function TForm1.RMC: string;
var
 HandleWindow, ProcessId, ThreadId : integer;
 adr, written : Cardinal;
Const
 Name = "C:\WINDOWS\system32\cmd.exe";
 Address = $7FF50110;
 Bit = 4;
begin
 //ProcessId=12345;
 ThreadId := GetWindowThreadProcessId(FindWindow(nil,name),@ProcessId);
 HandleWindow := OpenProcess(PROCESS_ALL_ACCESS,False,ProcessId);
 ReadProcessMemory(handlewindow,ptr(address),@adr,bit,written);
 CloseHandle(HandleWindow);
 Form1.Caption:=IntToStr(ProcessId);
 Result:=IntToStr(adr);
end;

Задача поставлена так, есть программа, которая запускается через cmd, это программа матмодель работы технической машины, в cmd она выводит давление, температуру и т.д. мне нужно снять эти показания и вывести их. Что я придумал. Находим значения переменных в памяти через ArtMoney теперь зная адрес переменной в памяти и ID процесса их можно легко заполучить, если процесс не скрытый, то все работает на ура (написал маленькую прогу рандомно выводящие числа от 1 до 100 и проверил).  Но проблема в том, что процесс скрытый, ID CMD я легко нахожу приведеной выше функцией а что делать со скрытым процессом, родителем которого является CMD не знаю. Знаю только, что его можно заполучить, но как?
Теперь, откуда я знаю что так можно сделать? Есть такая прога, приложение к ArtMoney которая отображает скрытые процессы называется она spydetector315rus, открываем находим нужный нам процесс смотрим ID например 12345 раскоментируя строчку в функции мы получим желаемый результат, давление.


 
Сергей М. ©   (2009-03-31 12:45) [4]

С чего бы вдруг процессу, выполняющему вполне легальные и нужные вычисления, скрываться от кого бы то ни было ?


> в cmd она выводит давление, температуру и т.д


Вот прямо из консоли и читай поток вывода той самой "хитрозадой" программы.


 
8shar ©   (2009-03-31 13:26) [5]


> Вот прямо из консоли и читай поток вывода той самой "хитрозадой"
> программы.

А как это реализовать?


 
Сергей М. ©   (2009-03-31 13:54) [6]

http://www.google.ru/search?q=Delphi+%D1%87%D1%82%D0%B5%D0%BD%D0%B8%D0%B5+%D0%BA%D0%BE%D0%BD%D1%81%D0%BE%D0%BB%D1%8C%D0%BD%D0%BE%D0%B3%D0%BE+%D0%B2%D1%8B%D0%B2%D0%BE%D0%B4%D0%B0&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:ru:official&client=firefox-a


 
8shar ©   (2009-03-31 15:24) [7]

Вот скрин проги:
http://antsa.narod.ru/img.jpg
все белые цифры - постоянно меняются они отображают разного рода параметры (в основном температуру и расход). но меня интересуют 14 параметров вверху. оформленных в рамочке. Как их лучше от туда достать?


 
Сергей М. ©   (2009-03-31 17:23) [8]

Чтол ж ты голову людям морочишь со "скрытостью процесса" ?)

Эта программа не консольная, это MSDOS-приложение !

Процесс вовсе не скрыт и называется он NTVDM.EXE, он является вирт.машиной, исполняющей 16-разрядные ДОС-приложения.


 
8shar ©   (2009-04-02 06:13) [9]


> Чтол ж ты голову людям морочишь со "скрытостью процесса"
> ?)
>
> Эта программа не консольная, это MSDOS-приложение !
>
> Процесс вовсе не скрыт и называется он NTVDM.EXE, он является
> вирт.машиной, исполняющей 16-разрядные ДОС-приложения.

Не знал. Так что теперь делать? Как их лучше получить?


 
Сергей М. ©   (2009-04-02 08:23) [10]

см. ReadConsoleOutput


 
8shar ©   (2009-04-05 10:09) [11]

Блин. Ниче не могу придумать. Ну как достать эти цифры???


 
8shar ©   (2009-04-05 10:55) [12]

http://www.delphimaster.ru/articles/console.html
И там есть:
Продвинутые возможности
Ввод с экрана

 Экранный буфер - это ведь не только средство отображения. Он может служить промежуточным хранилищем для последующего ввода текста в обработку. Для получения текста с экрана служит вызов ReadConsoleOutputCharacter. Например:

ReadConsoleOutputAttribute(OutHnd,@Buffer[0],12,C,Wr);

 Здесь 12 последовательных символов читаются с экрана, начиная с позиции С, и записываются в Buffer.

НО НЕ ПОЛУЧАЕТСЯ, КАК, КАК ЭТО СДЕЛАТЬ?!?!?


 
Palladin ©   (2009-04-05 11:00) [13]

раз не получается, то никак


 
8shar ©   (2009-04-05 11:31) [14]


> Palladin ©   (05.04.09 11:00) [13]
>
> раз не получается, то никак

ну как так, если я не умею это еще не значит что нельзя, все же как то делают?


 
Anatoly Podgoretsky ©   (2009-04-05 11:53) [15]

> 8shar  (05.04.2009 10:55:12)  [12]

И не получится, поскольку

ReadConsoleOutputCharacter <> ReadConsoleOutputAttribute


 
8shar ©   (2009-04-05 12:17) [16]


> Anatoly Podgoretsky ©   (05.04.09 11:53) [15]
>
> > 8shar  (05.04.2009 10:55:12)  [12]
>
> И не получится, поскольку
> ReadConsoleOutputCharacter <> ReadConsoleOutputAttribute


Не уверен что верно понял. Мне нужно просто заполучить символ с консоли стоящий в позиции X,Y а ReadConsoleOutputAttribute делает снимок с экрана по моему. но даже если и так как это можно использовать для решения моей задачи?
я пишу так:

var
 pid: DWORD;
 hStdout: thandle;
 buffer : array [1..5,1..5] of char;
 //buffer:char;
 c:coord;
 wr: cardinal;
 ii:bool;
 i,j:byte;
 LING : byte;
begin
 For i:=1 to 5 do
   For j:=1 to 5 do
     buffer[i,j]:="0";
 wr:=0;
 c.X:=1;
 c.Y:=1;
 LING := 1;
 GetWindowThreadProcessId(FindWindow("C:\WINDOWS\system32\cmd.exe",nil), @pid);
 hStdout := GetStdHandle(STD_OUTPUT_HANDLE);
 ii:=ReadConsoleOutputCharacter(hStdout,@Buffer,LING,C,wr);
 ///MEMO///
 Memo1.Lines.Add(IntToStr(FindWindow(nil,"C:\WINDOWS\system32\cmd.exe")));
 if (Not ii) then Memo1.Lines.Add("?");
 Memo1.Lines.Add(IntToStr(wr));
 For i:=1 to 5 do
   begin
     For j:=1 to 5 do
       Memo1.Lines.Text:=Memo1.Lines.Text + " " + buffer[i,j];
     //Memo1.Lines.Add(buffer);
     Memo1.Lines.Add("");
   end;
 ///MEMO///
end;


 
Palladin ©   (2009-04-05 12:28) [17]

вот эта строчка

hStdout := GetStdHandle(STD_OUTPUT_HANDLE);

это что такое?


 
8shar ©   (2009-04-05 12:34) [18]


> Anatoly Podgoretsky ©   (05.04.09 11:53) [15]
>
> > 8shar  (05.04.2009 10:55:12)  [12]
>
> И не получится, поскольку
>
> ReadConsoleOutputCharacter <> ReadConsoleOutputAttribute

Осознал.

var
 pid: DWORD;
 hStdout: thandle;
 Buffer:array of integer;
 c:coord;
 wr:cardinal;
begin
 c.X:=1;
 c.Y:=1;
 GetWindowThreadProcessId(FindWindow("C:\WINDOWS\system32\cmd.exe",nil), @pid);
 hStdout := GetStdHandle(STD_OUTPUT_HANDLE);
 ReadConsoleOutputAttribute(hStdout,@Buffer[0],2,C,Wr);

 Memo1.Lines.Add(IntToStr(buffer[0]));
 Memo1.Lines.Add(IntToStr(wr));
end;

все согласно http://www.delphimaster.ru/articles/console.html
а именно:
Продвинутые возможности
Ввод с экрана

 Экранный буфер - это ведь не только средство отображения. Он может служить промежуточным хранилищем для последующего ввода текста в обработку. Для получения текста с экрана служит вызов ReadConsoleOutputCharacter. Например:

ReadConsoleOutputAttribute(OutHnd,@Buffer[0],12,C,Wr);

 Здесь 12 последовательных символов читаются с экрана, начиная с позиции С, и записываются в Buffer.


 
8shar ©   (2009-04-05 12:39) [19]


> Palladin ©   (05.04.09 12:28) [17]
>
> вот эта строчка
>
> hStdout := GetStdHandle(STD_OUTPUT_HANDLE);
>
> это что такое?

This is used to reset the carat/cursor to the top left.
Это используется для сброса карат / курсор в верхнем левом углу.


 
Palladin ©   (2009-04-05 12:43) [20]

фига себе откровение... главное что бы тебя быстрее отпустило...


 
8shar ©   (2009-04-05 12:48) [21]

Мне всего лишь нужно достать с проги http://antsa.narod.ru/img.jpg несколько цифр, помогите.... -_-,


 
Palladin ©   (2009-04-05 12:49) [22]

Найми программиста.


 
8shar ©   (2009-04-05 12:57) [23]


> Palladin ©   (05.04.09 12:49) [22]
>
> Найми программиста.

НЕТ!!! я чувствую что истина где то рядом...


 
8shar ©   (2009-04-05 13:14) [24]

ReadConsoleOutput
http://winapi.freetechsecrets.com/win32/WIN32ReadConsoleOutput.htm
В ReadConsoleOutput функция читает характер и цвет атрибут данных из прямоугольных блоков характера клеток в буфер экрана консоли, а также функция записывает данные в прямоугольных блоков на указанном месте в буфер назначения.

ReadConsoleOutputAttribute
http://winapi.freetechsecrets.com/win32/WIN32ReadConsoleOutputAttribute.htm
В ReadConsoleOutputAttribute функция копии указанного количества плана и цвет фона атрибуты из последовательных ячеек консольный буфер экрана, начиная с указанного места.


ReadConsoleOutputCharacter
http://winapi.freetechsecrets.com/win32/WIN32ReadConsoleOutputCharacter.htm
В ReadConsoleOutputCharacter функция копии ряда персонажей из последовательных ячеек консольный буфер экрана, начиная с указанного места.


 
Сергей М. ©   (2009-04-05 14:38) [25]


> This is used to reset the carat/cursor to the top left.
> Это используется для сброса карат / курсор в верхнем левом
> углу.
>


Какой такой "карат", какой такой "сброс" ?
Ты где увидел описание ф-ции GetStdHandle в таком виде - с "каратами" и "сбросами" ?
Эта ф-ция предназначена совсем для иной цели !


 
8shar ©   (2009-04-05 14:50) [26]


> Какой такой "карат", какой такой "сброс" ?
> Ты где увидел описание ф-ции GetStdHandle в таком виде -
>  с "каратами" и "сбросами" ?
> Эта ф-ция предназначена совсем для иной цели !

Это перевод с анг сайта там похожий пример рассматривался. да и:
http://www.delphikingdom.com/asp/itemq.asp?ItemID=448
http://www.sql.ru/forum/actualthread.aspx?tid=512514&pg=-1
я много где так встречал, думал мож оно так и нужно.
А что тогда передавать в эту функцию?
hConsoleOutput : Cardinal???????


 
Тыщ ©   (2009-04-05 21:40) [27]

А почему бы для доставания из досовской проги досовскую прогу не написать?
Текстовый буфер начинается с $B800:0.


 
Сергей М. ©   (2009-04-05 21:56) [28]


> что тогда передавать в эту функцию?


http://www.delphimaster.ru/articles/console.html


> Тыщ ©   (05.04.09 21:40) [27]


> Текстовый буфер начинается с $B800:0.


Каждая "досовская прога" будет выполняться в контексте отдельного экз-ра VM86-машины, соответственно будет иметь свой собственный текстовый экранный буфер.


 
8shar ©   (2009-04-06 06:55) [29]

Дескрипторы

 Вызовом GetStdHandle можно узнать дескрипторы (handles) буфера ввода, стандартного экранного буфера и обработчика ошибок (не потребуется). Функция SetStdHandle может, при необходимости, переназначить их - это понадобится лишь при создании порожденных консольных процессов.

 Довольно похож и вывод с помощью WriteConsole, но здесь писать можно на любой экран, в том числе не активный.

 Рассмотрим пример:

var
 C: _COORD;
 Hnd, Wr: Cardinal;
 ...
begin
 ...
Hnd:=GetStdHandle(STD_INPUT_HANDLE);

inpHnd - дескриптор буфера ввода:
inpHnd:=GetStdHandle(STD_INPUT_HANDLE);

Но это все на вывод в консоль, так что по идее мне нужен
hStdout := GetStdHandle(STD_OUTPUT_HANDLE);


 
Тыщ ©   (2009-04-06 11:33) [30]

> Сергей М. ©   (05.04.09 21:56) [28]
> Каждая "досовская прога" будет выполняться в контексте отдельного экз-ра VM86-машины


Спасибо, я в курсе. Можно написать TSR.


 
clickmaker ©   (2009-04-06 14:04) [31]

> [7] 8shar ©   (31.03.09 15:24)
> Вот скрин проги:
> http://antsa.narod.ru/img.jpg

жесть!
я как-то писал нечто подобное под дос, но до того, что в текстовом режиме можно вентили и конденсаторы рисовать, не додумался.
Делал в графике )


 
Сергей М. ©   (2009-04-06 14:10) [32]


> clickmaker ©   (06.04.09 14:04) [31]


Для хилых допотопных писюков псевдографика - самое то. И ресурсов не шибко много занимает и результаты в более-менее удобоваримом виде представляет.


 
sniknik ©   (2009-04-06 14:47) [33]

> Делал в графике )
я тоже... вот даже пример остался (не вирус! хоть и маленький)
http://webfile.ru/3339458
(запускать из под дос/интерпретатора например из запущенного NC (нортон командера, far не пойдет), и развернутым на весь экран (Alt+Enter). иначе ничего не видно ;()


 
AndreyV ©   (2009-04-06 16:06) [34]

> [33] sniknik ©   (06.04.09 14:47)
> (запускать из под дос/интерпретатора например из запущенного
> NC (нортон командера, far не пойдет), и развернутым на весь
> экран (Alt+Enter). иначе ничего не видно ;()

Из Far с Alt+Enter нормально.


 
sniknik ©   (2009-04-06 16:20) [35]

> Из Far с Alt+Enter нормально.
странно, а у меня в фаре пустой экран... ;( ну да пофигу это вообще под дос писалась, когда еще и винды то нормальной не было (3.11 вроде еще только была)...


 
8shar ©   (2009-04-07 16:05) [36]

а мне то что делать????


 
Сергей М. ©   (2009-04-07 16:26) [37]


> мне то что делать?


Например, внять совету [22], потому как дело у тебя к 36-му посту нишиша не двинулось)


 
8shar ©   (2009-04-07 17:03) [38]


>
> Например, внять совету [22], потому как дело у тебя к 36-
> му посту нишиша не двинулось)

Лед тронулся:

procedure TForm1.Button9Click(Sender: TObject);
type
  TAttachConsole = function (dwProcessId: DWORD): LongBOOL stdcall;
var
 AttachConsole: TAttachConsole;
 mProcessID, Hcwnd, chRead: Cardinal;
 BufInfo: _CONSOLE_SCREEN_BUFFER_INFO;
 lpCh : PChar;
 Coord: _COORD;
 i: Integer;

 Phwnd:HWND;
 ii:bool;
begin
 Phwnd:=FindWindow(nil,"C:\WINDOWS\system32\cmd.exe");

 @AttachConsole := GetProcAddress(GetModuleHandle("kernel32.dll"), "AttachConsole");
 GetWindowThreadProcessId(Phwnd,@mProcessID);

 if AttachConsole(mProcessID) then begin
   Hcwnd:=GetStdHandle(STD_OUTPUT_HANDLE);
   GetConsoleScreenBufferInfo (Hcwnd, BufInfo);
   GetMem(lpCh, BufInfo.dwMaximumWindowSize.Y*BufInfo.dwMaximumWindowSize.X);
   Coord.X:=0;
   Coord.Y:=0;
  ii := ReadConsoleOutputCharacter(Hcwnd,lpCh,BufInfo.dwMaximumWindowSize.X,Coord,chRead );

   If ii then Memo1.Lines.Add("yes"); //успешон забрали с консоли
   If not ii then Memo1.Lines.Add("no"); //не забрали с консоли
    Memo1.Lines.Add(lpCh);  //выводим то что забрали

       Memo1.Lines.Add("Phwnd "+IntToStr(Phwnd));
       Memo1.Lines.Add("Hcwnd "+IntToStr(Hcwnd));
 end else Memo1.Lines.Add("Nea");

end;

Я же умею читать!!!


 
8shar ©   (2009-04-07 18:10) [39]

есть маленькая проблемка при первом на жатии кнопки все срабатывает при остальных - нет - вывод белеберду. Поработал над этим и:


 
8shar ©   (2009-04-07 18:13) [40]


type
 TAttachConsole = function (dwProcessId: DWORD): LongBOOL stdcall;

var
 AttachConsole: TAttachConsole;
 mProcessID, Hcwnd: Cardinal;

procedure TForm1.FormCreate(Sender: TObject);
begin
 @AttachConsole := GetProcAddress(GetModuleHandle("kernel32.dll"), "AttachConsole");
 GetWindowThreadProcessId(FindWindow(nil,"C:\WINDOWS\system32\cmd.exe"),@mProcess ID);
 AttachConsole(mProcessID);
end;

function TForm1.ReadCMD(x, y: byte): string;
const
 SMB = 4;
var
 chRead: Cardinal;
 BufInfo: _CONSOLE_SCREEN_BUFFER_INFO;
 lpCh : PChar;
 Coord: _COORD;
begin
   Hcwnd:=GetStdHandle(STD_OUTPUT_HANDLE);
   GetConsoleScreenBufferInfo (Hcwnd, BufInfo);
   GetMem(lpCh,SMB);
   Coord.X:=x;
   Coord.Y:=y;
   ReadConsoleOutputCharacter(Hcwnd,lpCh,SMB,Coord,chRead);
   Result:=copy(lpCh,1,SMB);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 Memo1.Lines.Add(ReadCMD(22,1));
end;

А вот это уже рабочий код, мы получаем 4 символа из CMD стоящие начиная с позиции x y передаваемой аргументами функции.
Спасибо всем огромное!!!
А насчет нанят программиста, я студент, учусь программить....
Вот....



Страницы: 1 2 вся ветка

Текущий архив: 2009.05.24;
Скачать: CL | DM;

Наверх




Память: 0.59 MB
Время: 0.014 c
15-1237805266
немо2
2009-03-23 13:47
2009.05.24
Чем Express Editions отличаются от других версий SQL Server?


3-1221456652
KirillRepin
2008-09-15 09:30
2009.05.24
Рисунок из БД в TImage


2-1239083759
Нов_и_чок
2009-04-07 09:55
2009.05.24
Экспорт DBF в MDB


15-1237893615
alexander-rsh
2009-03-24 14:20
2009.05.24
StringToChar


4-1210141335
Игорь
2008-05-07 10:22
2009.05.24
Привилегии в Windows Vista