Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
|
получение переменной окружения другого процесса. 05.04.02 01:03 Число просмотров: 917
Автор: + <Mikhail> Статус: Elderman
|
> День добрый, у Вас тут была дискуссия по поводу внедрения > длл в другой процесс. Не подскажете , возможно ли данным > методом получить сабж, и как? или каким нибудь другим , но > чтобы работало и на 98 и на НТ. > точно знаю что это возможно, но как это сделать.... > спасибо. Dlia NT (vse chto vnutri GetEnvironmentStringsW()):
77F1A427 64 A1 18 00 00 00 mov eax,fs:[00000018]
77F1A42D 8B 40 30 mov eax,dword ptr [eax+30h]
77F1A430 8B 48 10 mov ecx,dword ptr [eax+10h]
77F1A433 8B 41 48 mov eax,dword ptr [ecx+48h]
---
resultat v eax
DLia 98 posmotri assembler etoi function GetEnvironmentStringsW()
|
<programming>
|
получение переменной окружения другого процесса. 05.04.02 00:00
Автор: snark Статус: Незарегистрированный пользователь
|
День добрый, у Вас тут была дискуссия по поводу внедрения длл в другой процесс. Не подскажете , возможно ли данным методом получить сабж, и как? или каким нибудь другим , но чтобы работало и на 98 и на НТ.
точно знаю что это возможно, но как это сделать....
спасибо.
|
|
получение переменной окружения другого процесса. 05.04.02 01:03
Автор: + <Mikhail> Статус: Elderman
|
> День добрый, у Вас тут была дискуссия по поводу внедрения > длл в другой процесс. Не подскажете , возможно ли данным > методом получить сабж, и как? или каким нибудь другим , но > чтобы работало и на 98 и на НТ. > точно знаю что это возможно, но как это сделать.... > спасибо. Dlia NT (vse chto vnutri GetEnvironmentStringsW()):
77F1A427 64 A1 18 00 00 00 mov eax,fs:[00000018]
77F1A42D 8B 40 30 mov eax,dword ptr [eax+30h]
77F1A430 8B 48 10 mov ecx,dword ptr [eax+10h]
77F1A433 8B 41 48 mov eax,dword ptr [ecx+48h]
---
resultat v eax
DLia 98 posmotri assembler etoi function GetEnvironmentStringsW()
|
| |
получение переменной окружения другого процесса. 05.04.02 11:44
Автор: snark Статус: Незарегистрированный пользователь
|
а разве GetEnvironmentStringsW не возвращает окружение текущего процесса? или тут есть что то , чего я не понимаю ? ( уверен что есть, врочем :) ) мне же нужно значение переменной для процесса с конкретным айди. впрочем, если есть возможность перебрать эти блоки для всех процессов, это тоже подошло бы.
> Dlia NT (vse chto vnutri GetEnvironmentStringsW()): > > 77F1A427 64 A1 18 00 00 00 mov eax,fs:[00000018]
> 77F1A42D 8B 40 30 mov eax,dword ptr
> [eax+30h]
> 77F1A430 8B 48 10 mov ecx,dword ptr
> [eax+10h]
> 77F1A433 8B 41 48 mov eax,dword ptr
> [ecx+48h]
> ---
> resultat v eax > > DLia 98 posmotri assembler etoi function > GetEnvironmentStringsW()
|
| | |
получение переменной окружения другого процесса. 05.04.02 20:30
Автор: snark Статус: Незарегистрированный пользователь
|
Извените, почти никто не отвечает :) , так что я попробую еще раз описать задачу:
требуется, получить значение переменной окружения ( одной , но это не важно ) для каждого окна ( приложения, процесса ) в системе ( под 9х и НТ-2000) .
Пока я нашел только два способа - установкой дебуг привелегий и запуска удаленного среда ( но тот пример работает только под НТ, и, боюсь. что у меня не хватит ума пересобачить его под 95 ). И внедрение ДЛЛ путем установки системного хука. Но опять, я всего лишь отлавливаю ( ну фильтрую ) определенные сообщения, а как быть, если мне хочется получить эту переменную в произвольный момент времени ? ( устанавливать хук только на этот момент? и на этот процесс ? и потом снимать? )
спасибо.
P.S. если кто нибудь понял предыдущий ответ, поясните пожалуйста... ну получил я ассемблерный код, там где то присутвсует ID процесса? или оно все равно вернет environment для текущего?
|
| | | |
получение переменной окружения другого процесса. 05.04.02 20:39
Автор: ggg <ggg> Статус: Elderman
|
> P.S. если кто нибудь понял предыдущий ответ, поясните > пожалуйста... ну получил я ассемблерный код, там где то > присутвсует ID процесса? или оно все равно вернет > environment для текущего?
предыдущий ответ говорит, что ты можешь использовать ReadProcessMemory(), которая есть во всех виндах
|
| | | | |
получение переменной окружения другого процесса. 06.04.02 00:33
Автор: snark Статус: Незарегистрированный пользователь Отредактировано 06.04.02 00:38 Количество правок: 1
|
> > P.S. если кто нибудь понял предыдущий ответ, поясните > > пожалуйста... ну получил я ассемблерный код, там где > то > > присутвсует ID процесса? или оно все равно вернет > > environment для текущего? > > предыдущий ответ говорит, что ты можешь использовать > ReadProcessMemory(), которая есть во всех виндах ага, вобщем осталась только одна проблема: получить ассемблерный листинг этой функции для 95.98 виндов ( GetEnvironmentStringsW ).
не посоветуете как это легче сделать?
у меня не стоит ничего экзотического на машине, Визуал Стутия и все...
что то скачать, или как то возможно этот листинг в дебугере получить?
спасибо.
|
| | | | | |
получение переменной окружения другого процесса. 06.04.02 06:15
Автор: ggg <ggg> Статус: Elderman
|
IDA kernel32.dll win98:
.text:BFF8ABBC GetEnvironmentStringsA proc near
.text:BFF8ABBC mov eax, dword_0_BFFC9CE4
.text:BFF8ABC1 mov ecx, [eax]
.text:BFF8ABC3 mov edx, [ecx+40h]
.text:BFF8ABC6 mov eax, [edx]
.text:BFF8ABC8 retn
.text:BFF8ABC8 GetEnvironmentStringsA endp
|
| | | | |
получение переменной окружения другого процесса. 05.04.02 22:45
Автор: snark Статус: Незарегистрированный пользователь Отредактировано 05.04.02 23:28 Количество правок: 1
|
77F1A427 64 A1 18 00 00 00 mov eax,fs:[00000018]
77F1A42D 8B 40 30 mov eax,dword ptr [eax+30h]
77F1A430 8B 48 10 mov ecx,dword ptr [eax+10h]
77F1A433 8B 41 48 mov eax,dword ptr [ecx+48h]
> предыдущий ответ говорит, что ты можешь использовать > ReadProcessMemory(), которая есть во всех виндах
спасибо.
можно я повторю, чтобы не биться об стенку головой :)
я получаю хандл процесса с правами на чтение.
hProcess = OpenProcess(PROCESS_VM_READ, false, ProcessID);
where ProcessID - id процесса, у которого я пытаюсь прочитать эту переменную.
нда, до этого момента все понятно. а дальше не очень... :(.
во первых как я буду читать регистр используя ReadProcessMemory?
или из этого когда следует, что можно самому вычислить адрес этого блока для процесса? а как это сделать в сишной длл?
нда. заколебал наверное уже всех.
в общем в любом случае еще раз спасибо. Глупая ситуация, вообще то я не идиот ( надеюсь ) , но тут с простейшей функцией залез в такие вещи в которых я ничего не понимаю. а делать надо :(.
вроде сообразил что к чему. блин вечер, поздно уже :), щас пытаюсь сделать.
|
| | | | | |
получение переменной окружения другого процесса. 06.04.02 06:07
Автор: ggg <ggg> Статус: Elderman
|
> во первых как я буду читать регистр используя > ReadProcessMemory? > или из этого когда следует, что можно самому вычислить > адрес этого блока для процесса? а как это сделать в сишной > длл?
регистры можно посмотреть GetThreadContext()
но скорее всего для конкретной версии виндов
> mov eax,fs:[00000018] можно заменить чтением по фиксированному адресу
пробовать нужно
|
| | | | | | |
получение переменной окружения другого процесса. 06.04.02 21:17
Автор: snark Статус: Незарегистрированный пользователь
|
> регистры можно посмотреть GetThreadContext() > > но скорее всего для конкретной версии виндов > > mov eax,fs:[00000018] > можно заменить чтением по фиксированному адресу > пробовать нужно спасибо большое.
|
|
|