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

Вниз

Можно ли защитить командную строку процесса ?   Найти похожие ветки 

 
AlexAlex   (2006-04-04 18:17) [0]

Можно ли как-нибудь защитить командную строку процесса от получения другим процессом или затереть ее?


 
BiN ©   (2006-04-04 19:25) [1]

Командная строка хранится в блоке окружения процесса (PEB), который располагается в адресном пространстве, доступном для чтения/записи (функции ReadProcessMemory/WriteProcessMemory).

Только не удивляйся, если GetCommandLine и Paramstr после таких финтов будут криво работать.


 
begin...end ©   (2006-04-04 19:41) [2]

> BiN ©   (04.04.06 19:25) [1]

GetCommandLineA и ParamStr после изменения PEB будут работать так же, как и работали. Потому что GetCommandLineA берёт указатель на строку не из PEB (в отличие от GetCommandLineW).

Поэтому для реализации сабжа правки PEB недостаточно, и нужно будет сделать ещё что-нибудь вроде PChar(GetCommandLine)^ := #0.


 
интересно   (2006-04-04 21:02) [3]

подскажите как осуществить правку PEB, plz...


 
BiN ©   (2006-04-04 21:25) [4]


> begin...end ©   (04.04.06 19:41) [2]
>
> > BiN ©   (04.04.06 19:25) [1]
>
> GetCommandLineA и ParamStr после изменения PEB будут работать
> так же, как и работали. Потому что GetCommandLineA берёт
> указатель на строку не из PEB (в отличие от GetCommandLineW).
>

Точно, спасибо.
Кстати, GetCommandLineW тоже возвращает адрес не из PEB-а.


 
AlexAlex   (2006-04-04 23:42) [5]

Затирать (заменять на строку той же длины) научился. Спасибо. А можно ли исключить доступ к памяти приложения внешних приложений (кстати, Касперский 5 командную стоку прячет)?


 
n0name   (2006-04-05 06:27) [6]


> GetCommandLineA и ParamStr после изменения PEB будут работать
> так же, как и работали. Потому что GetCommandLineA берёт
> указатель на строку не из PEB (в отличие от GetCommandLineW).
>

Не совсем корректная фраза. GetCommandLineW и PEB.ProParams.CommandLine указывает на одну строку, но GetCommandLineW не берет данные из PEB, так что если обратить в nil указатель в PEB"е, то это никак не повлияет на работу GetCommandLineA/W.

> подскажите как осуществить правку PEB, plz...

Своего, чужого? В общем ничем не отличается от обыного боращения к страктурам данных, получешь адрес PPEB: mov eax, fs: [30h].

> Затирать (заменять на строку той же длины) научился. Спасибо.
>  А можно ли исключить доступ к памяти приложения внешних
> приложений (кстати, Касперский 5 командную стоку прячет)?
>

Перехват NtReadProcessMemory, причём из драйвера.


 
Игорь Шевченко ©   (2006-04-05 10:39) [7]

BiN ©   (04.04.06 21:25) [4]
begin...end ©   (04.04.06 19:41) [2]
n0name   (05.04.06 06:27) [6]

А что, GetCommandLine[A|W] позволяет увидеть командную строку чужого процеса ? Если нет, то к чему вообще ее упоминание ?


 
BiN ©   (2006-04-05 10:59) [8]


> Игорь Шевченко ©   (05.04.06 10:39) [7]
>
> BiN ©   (04.04.06 21:25) [4]
> begin...end ©   (04.04.06 19:41) [2]
> n0name   (05.04.06 06:27) [6]
>
> А что, GetCommandLine[A|W] позволяет увидеть командную строку
> чужого процеса ? Если нет, то к чему вообще ее упоминание
> ?

Автор вроде о своем процессе спрашивает.


 
Игорь Шевченко ©   (2006-04-05 11:06) [9]

BiN ©   (05.04.06 10:59) [8]

Точно ? :) А мне показалось, что "как защитить командную строку от получения другим процессом"...

Совсем старый стал, очки пора покупать...


 
BiN ©   (2006-04-05 11:19) [10]


> Игорь Шевченко ©   (05.04.06 11:06) [9]
>
> BiN ©   (05.04.06 10:59) [8]
>
> Точно ? :) А мне показалось, что "как защитить командную
> строку от получения другим процессом"...
>
> Совсем старый стал, очки пора покупать...

-)

Речь о  GetCommandLine зашла, потому что я предположил, что эта функция берет строку из PEB-а, и что после изменения соответсвующего поля структуры PRTL_USER_PROCESS_PARAMETERS  она может криво работать в процессе-владельце. Предположение оказалось ошибочным.


 
begin...end ©   (2006-04-05 11:36) [11]

> BiN ©   (04.04.06 21:25) [4]
> n0name   (05.04.06 06:27) [6]

Да, я не совсем правильно выразился. Имел в виду, что GetCommandLineW (в отличие от GetCommandLineA) возвращает адрес того же самого юникодного тела строки, указатель на которое можно получить из структуры параметров процесса. Поэтому после получения этого адреса и изменения строки GetCommandLineW будет работать криво, а GetCommandLineA — нет.

> Игорь Шевченко ©   (05.04.06 10:39) [7]

> А что, GetCommandLine[A|W] позволяет увидеть командную строку
> чужого процеса ?

А что, нет? Её можно вызвать в контексте интересующего чужого процесса, и по возвращённому адресу прочитать строку из его памяти. Поэтому я и написал в [2], что одной правкой PEB дело не обойдётся.


 
AlexAlex   (2006-04-05 11:38) [12]

Если кому понадобится: тереть надо не просто по GetCommandLine, а отдельно по GetCommandLineA и по GetCommandLineW (у них разные буферы).


 
Игорь Шевченко ©   (2006-04-05 12:16) [13]

begin...end ©   (05.04.06 11:36) [11]

Насчет вызова в контексте - это сильно, конечно. Снимаю шляпу.
Какой только люди ерундой не страдают (это не к тебе).

Впрочем, если принять во внимание, что обе функции GetCommandLine возвращают адрес в пространстве пользователя, то достаточно поменять содержимое этой памяти и страдать ерундой дальше.

С наилучшими,


 
n0name   (2006-04-05 12:46) [14]


> А что, GetCommandLine[A|W] позволяет увидеть командную строку
> чужого процеса ? Если нет, то к чему вообще ее упоминание
> ?

Ответ не на [1] а на [2], [3].


 
De Mian   (2006-04-07 07:23) [15]

>>>>обе функции GetCommandLine возвращают адрес в пространстве пользователя
Круто - "адрес в пространстве пользователя". а единица изменения у этого пространства ? сантиметры что ли тогда ?


 
Игорь Шевченко ©   (2006-04-07 10:57) [16]


> Круто - "адрес в пространстве пользователя". а единица изменения
> у этого пространства ?


Байты, дружок



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

Форум: "WinAPI";
Текущий архив: 2006.07.16;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.008 c
2-1151385632
xZorg
2006-06-27 09:20
2006.07.16
Socket s


15-1150673609
Волф_555
2006-06-19 03:33
2006.07.16
Зарубежные системы заработка денег в Интернет


2-1151493908
shart
2006-06-28 15:25
2006.07.16
Как послать сообщение клиенту (Indy 9, Tcp)


2-1151395315
312Kbps
2006-06-27 12:01
2006.07.16
Диалог ввода даты !


15-1150294537
JUS
2006-06-14 18:15
2006.07.16
Как закинуть свой готовый сайт в интернет?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский