Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2009.05.24;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.56 MB
Время: 0.006 c
2-1239286238
Ivan8511
2009-04-09 18:10
2009.05.24
Просмотр отчета QuickReport


2-1239360310
Sanya_878
2009-04-10 14:45
2009.05.24
Помогите с поиском в ComboBox


2-1238311676
Анфиса
2009-03-29 11:27
2009.05.24
Математические формулы в Delphi


2-1239098097
Анфиса
2009-04-07 13:54
2009.05.24
Модуль MathLabel


3-1221466747
pushkin42
2008-09-15 12:19
2009.05.24
Обратный запрос





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский