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

Вниз

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

 
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 вся ветка

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

Наверх




Память: 0.51 MB
Время: 0.031 c
15-1150295327
AlexanderMS
2006-06-14 18:28
2006.07.16
Пожалуйста, проверьте перевод...


15-1150185237
iamdanil
2006-06-13 11:53
2006.07.16
Версия приложения


15-1150350642
Ega23
2006-06-15 09:50
2006.07.16
С Днём рождения! 15 июня


15-1150266173
Layner
2006-06-14 10:22
2006.07.16
Бесплатные статистические компоненты, есть ли такие?


6-1141986446
Kacnep
2006-03-10 13:27
2006.07.16
Клиент TClientSocket Сервер TIdTCPServer не понимают друг друга