установить переменную в cmd.exe - PullRequest
2 голосов
/ 10 июля 2010

Приветствие землян,

Вот мой вопрос:

Как мне создать программу, которая устанавливает переменную в текущий сеанс cmd.exe, например

c:\> set myvar
Environment variable myvar not defined
c:\>myexe.exe
c:>set myvar
myvar=myvalue

Единственная похожая тема, которую я нашел, это -

Как изменить переменные среды оболочки Windows (cmd.exe) из C ++?

Но я не получил ни одного слова из этого:

Есть способ ... Просто введите свой код в родительский процесс и вызов SetEnvironmentVariableA внутри cmd's память процесса. После инъекции просто освободить выделенную память.

Хотя C / C ++ не является моим «родным» языком, я чувствовал себя совершенно потерянным, когда я искал в Google «c ++ inject code» и т. Д. ... Есть ли статья, где я могу получить больше информации об этом .

Кстати, сейчас я использую один немного глупый обходной путь. В качестве установки переменной

HKEY_CURRENT_USER \ Environment

и

HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ Диспетчер сеансов \ Среда

сравнительно легко. Я просто записываю переменную, похожую на реестр:

load.temp.vars=set myvar1=myval1&set myvar2=myval2& ....

, а затем просто вызовите% load.temp.vars%, и он будет выполнен как команда:

c:/>%load.temp.vars%
c:/>set myvar1
myvar1=myval1

Работает нормально, но для меня этого недостаточно:)

Живи долго и процветай, \\ // _

Ответы [ 2 ]

2 голосов
/ 10 июля 2010

Есть очень простой способ сделать это без каких-либо уловок .

Вы должны написать небольшую программу myexe.exe, которая выдает простой вывод (вывод на консоль), например:

SET myvar=Some value

затем вы запускаете программу, выполнив следующие шаги:

myexe.exe >%TEMP%\t.cmd
call %TEMP%\t.cmd
del %TEMP%\t.cmd

Теперь в текущем cmd.exe, который запустил myexe.exe, существует переменная среды myvar, которая имеет значение Some value. Разве это не то, что вы хотите?

Способ предельно прост и работает на всех версиях Windows (и не только на Windows). Так что это моя рекомендация для вас.

2 голосов
/ 10 июля 2010

Ознакомьтесь с этой статьей: Три способа внедрения кода в другой процесс .

Также вам, вероятно, понадобится дескриптор вашего родительского процесса (чтобы определить целевой процесс, среду которого нужноменять).Способ его получения описан здесь .

Просто имейте в виду, что инъекция может не работать, в зависимости от привилегий учетной записи пользователя, а также что некоторые особенно параноидальные антивирусные решения могут быть недовольны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...