![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Регистрация: 21.11.2006
Сообщений: 7
|
![]()
как поменять IP?
... есть программа, кторая записывает в динамическую(оперативную) память некий машииный код другой программы... такой вопрос как выполнить этот код? //============================ Ответ напрашивается сам собой поменять CS:IP на адрес того участка памяти.. но как это сделать? ![]() |
![]() |
![]() |
![]() |
#2 |
добрый няша
Старожил
Регистрация: 29.10.2006
Сообщений: 4,804
|
![]()
Можно через SetThreadContext но сложновато
но можно проще через CreateRemoteThread HANDLE CreateRemoteThread( HANDLE hProcess, // handle to process to create thread in LPSECURITY_ATTRIBUTES lpThreadAttributes, // pointer to thread security attributes DWORD dwStackSize, // initial thread stack size, in bytes LPTHREAD_START_ROUTINE lpStartAddress, // pointer to thread function LPVOID lpParameter, // pointer to argument for new thread DWORD dwCreationFlags, // creation flags LPDWORD lpThreadId // pointer to returned thread identifier ); Код:
|
![]() |
![]() |
![]() |
#3 |
Регистрация: 21.11.2006
Сообщений: 7
|
![]()
не совсем понял.
как это сделать из ASM. |
![]() |
![]() |
![]() |
#4 |
добрый няша
Старожил
Регистрация: 29.10.2006
Сообщений: 4,804
|
![]()
ты знаешь как вызывать API на асме?
в MASM и FASM через invoke в TASM через call func, param1,......, paramN |
![]() |
![]() |
![]() |
#5 |
Регистрация: 21.11.2006
Сообщений: 7
|
![]()
понял. спс, буду пробовать.
|
![]() |
![]() |
![]() |
#6 |
добрый няша
Старожил
Регистрация: 29.10.2006
Сообщений: 4,804
|
![]()
отпишись потом.
|
![]() |
![]() |
![]() |
#7 | |
Регистрация: 06.01.2007
Сообщений: 9
|
![]() Цитата:
способ второй: ret (push <новое значение CS>/push <новое значение (E)IP>/retf способ третий: iret (pushf/push <новое значение CS>/push <новое значение (E)IP>/iret недостающие (996 способов писать не буду ![]() но в твоём случае ИМХО лучше оформить "некий машииный код другой программы" как процедуру (чтобы стек не корёжила), и в конце написать 0C3h (ret, первый случай) или 0CBh (retf, второй случай) и вызывать (в первом случае, если сегмент совпадает как "call адрес"; либо, если сегмент не совпадает (а это второй случай) то длинный call "call сегмент:адрес". В данном случае управление вернётся к вызывающему кусочку кода как после обычной процедуры, если же этого не надо - jump (короткий или длинный зависит от сегмента)
# (perl -e "while (1) { print "\x90"; }") | dd of=/dev/evil
|
|
![]() |
![]() |
![]() |
#8 |
добрый няша
Старожил
Регистрация: 29.10.2006
Сообщений: 4,804
|
![]()
проблема была в том что как заставить этот код выполнятся!!, а не как записать в чужую память код
|
![]() |
![]() |
![]() |
#9 |
Регистрация: 09.01.2007
Сообщений: 3
|
![]() |
![]() |
![]() |
![]() |
#10 |
добрый няша
Старожил
Регистрация: 29.10.2006
Сообщений: 4,804
|
![]()
но ты же никогда не сможешь прыгнуть командой jmp в чужой процесс
это невозможно!!!!!! |
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Меняем Explorer | Veiron | Свободное общение | 4 | 19.05.2008 12:51 |
Меняем цвет текста в элементе | Sargon | Общие вопросы Delphi | 15 | 13.09.2007 08:06 |
Меняем иконку у программки. | celovec | Общие вопросы Delphi | 4 | 01.07.2007 19:06 |