Текущий архив: 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.48 MB
Время: 0.009 c