В аттаче исходник, позволяющий получать имя исполняемого файла по его PID (через PEB).. За основу взят код Ms-Rem-а из его статьи.. ) Я перевел функцию на С, немного её изменив.. Может здесь какая-нибудь глупая ошибка, которой я не вижу, но почему всегда возвращается имя текущей программы?.. Мы же читаем память из удаленного процесса.. _516753981___pid2name.zip
Во-первых, ты обращаешься к RTL_USER_PROCESS_PARAMETERS в своём процессе, во-вторых читаешь путь опять же в своём процессе ЗЫ: Определения структур очень "левые". 1032628043__pid2name.rar
Господа! ВОЙНЫ!!! Огромное Вам спасибо! Третий день ищу как можно добыть commandline чужого процесса, но видимо во всем интернете небыло ничего путного, до сегодня 11:50:49 Скажите, а откуда Вы нарыли описания структур, в MSDN'е описание PEB такое Код (Text): typedef struct _PEB { BYTE Reserved1[2]; BYTE BeingDebugged; BYTE Reserved2[229]; PVOID Reserved3[59]; ULONG SessionId; } PEB, *PPEB; а в DDK я тоже не нашел... P.S. Я бы рад RTFM, но не знаю какой З.Ы. Спасибо, Удачи!
Kalyan00 Третий день ищу как можно добыть commandline чужого процесса А чего там искать? Внедрение в чужой процесс+GetCommandLine.
_CC если код юзермодный, то я думаю, весьма глупо использовать для этого дела недокументированные структуры, имя файла у тебя всегда будет одно, потому как пеб всегда по одному адресу, или почти всегда. Делай проще,заюзай NtQuerySystemInformation с 5м информационным класом, и оттуда уже вытягивай то, что тебе надо, а имея PiD можем заполучить EPROCESS, только в любом EPROCESS в поле *PEB будет стоять 0xffdf000 ))). Но, если у тебя есть PEPROCESS, то, выполнив к примеру KeStackAttachProcess(PEPROCESS), оказываешься в нужном процессе, а затем, заюзав пеб вытягиваешь оттудова имя и путь своего ехешника )). Это один способ, а второй сам догадайся, он намного прощще, но менее надежен
2Four-F: Спасибо за код.. 2Ms-Rem: >> Самый плохой способ, какой только можно для этого придумать Почему?.. 2CARDINAL: К чему такой гимор?.. >> Хы, а вообще , ToolHelp что заюзать, слабо Процесс может быть скрытым.. Если бы можно было юзать ToolHelp, никаких проблем бы вообще не возникло..
2CARDINAL: >> ну тогда пиши дравину Пока как можно дольше пытаюсь держаться в юзермоде.. =)) Но в ядро все равно придется лезть.. А там темно и страшно.. ))
Ms Rem „Внедрение в чужой процесс+GetCommandLine.“ Самый плохой способ, какой только можно для этого придумать. Все остальные, известные мне, еще хуже. Как говорил мой бывший бриадир, "..ета нестандартная".
Интересно, чем же хуже метод чтения PEB процесса? Неужели он хуже тем, что на него не будут ругаться фаерволлы? Или тем, что при неправильной реализации нет риска уронить чужой процесс? Или тем, что не нужно синхронизировать работу внедряемого кода со своим потоком? Или он хуже простотой реализации? Чем хуже?
Ms Rem 1. Это _очень_ ОС-зависимая вещь. 2. Она не документирована, и потому относится к разряду "грязных хаков"и годится только для тех программ, которые не собираются дожить до следующей версии Windows, где структуру PEB могут и поменять. 3. Есть более прямой и стандартный путь решения этой задачи средствами, предусмотренными разработчиком ОС. А что, антивири на него еще не ругаются? Я как-то слышал обратное и вполне доверяю этим слухам. На хуки антивирусы ругаются намного реже, поскольку это вещь стандартная и общеупотребительная, в отличие от. Я исхожу из того, что программы работают правильно. Если они работают неправильно - возможно, аффтару нужно заняться работой над ошибками. Или хотя бы описать эти ошибки как особенности алгоритма в прилагаемой документации Не гарантированной работоспособностью, которая явным образом следует из не документированности производителем ОС. Я уже поимел столько геморроя из-за использования всяких "хаков", что пришел к выводу о необходимости отказаться от использования этой практики в ПО, выставляемом на сколь-нибудь публичное обозрение.
Работает на всех версиях Windows NT, от NT4 до висты. Могут. Но тогда не трудно будет учесть эти изменения. Есть тулхелп, но к сожалению с его помощью нельзя узнать командную строку процесса, а вроже бы об этом и шла речь. ЛОЛ, неужели антивири ругаються на чтение памяти чужоко процесса, но при этом не ругаються на запись? На запись например будет ругаться Outpost Firewall (и многие другие фаерволлы), а что ругается на чтение? Я о таких программах пока еще не слышал. А гарантировать нельзя даже работоспособность обычных, не использующих ничего недокументированого программ. Применительно к этому случаю, работоспособность во всех существующих ОС NT линейки можно гарантировать. Давай рассмотрим конкретный случай: Есть две программы (типа диспетчера задач), которые могут получать командную строку запущеных процессов. Первая делает это чтением PEB, а вторая - инжектом кода вызывающего GetCommandLine. Вопрос: какую из них юзер выкинет на помойку при условии что работоспособность первой в следующих версиях ос не гарантирована, а запуск второй вызывает бурную реакцию фаерволла с отрубанием всех процессов от сети?
Ms Rem Осмелюсь напомнить, что Vista еще не вышла. А Лонгхорн - не выйдет уже никогда Так что заявление насчет Vista преждевременно. А линейку 9х, кстати, тоже никто не отменял. Для этого нужно решить одну очень важную проблему - убедиться в том, что таковая возможность будет. Люди, как известно, смертны, причем внезапно смертны. Кроме того, есть много не менее важных причин, которые могут помешать эти изменения внести - начиная от стихийных бедствий и кончая банальной ленью. Да на что они только не ругаются. Но на хуки ругаются редко. Реально редко. А если будут ругаться - ф газенваген такие антивири, а их аффтарам выдать призовую бочку йаду с приказом немедленно употребить по назначению. Можно. Доказательство соответствия программного кода техническому заданию - вещь вполне реальная, хотя и нечасто используемая. Правильный ответ: ф топку отправляется фаер, поскольку он сделает неработоспособным такое количество приложений, что после этого он просто нахрен не нужен по причине невозможности пользоваться инетом вообще.
Да, возможно преждевременно. Я говорю только, что это справедливо для бета версии висты, которая уже вышла. Ну только не на чтение памяти Иначе такие антивири точно быстро выкинут. Ну, может кто-нибудь выкинет и фаер, а я бы выкинул программу которая лезет куда ей лучше не соваться.