|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
18.12.2006, 17:11 | #1 |
Регистрация: 21.11.2006
Сообщений: 7
|
меняем CS:IP
как поменять IP?
... есть программа, кторая записывает в динамическую(оперативную) память некий машииный код другой программы... такой вопрос как выполнить этот код? //============================ Ответ напрашивается сам собой поменять CS:IP на адрес того участка памяти.. но как это сделать? |
18.12.2006, 20:20 | #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 ); Код:
|
21.12.2006, 01:01 | #3 |
Регистрация: 21.11.2006
Сообщений: 7
|
не совсем понял.
как это сделать из ASM. |
22.12.2006, 20:09 | #4 |
добрый няша
Старожил
Регистрация: 29.10.2006
Сообщений: 4,804
|
ты знаешь как вызывать API на асме?
в MASM и FASM через invoke в TASM через call func, param1,......, paramN |
23.12.2006, 11:02 | #5 |
Регистрация: 21.11.2006
Сообщений: 7
|
понял. спс, буду пробовать.
|
24.12.2006, 12:54 | #6 |
добрый няша
Старожил
Регистрация: 29.10.2006
Сообщений: 4,804
|
отпишись потом.
|
06.01.2007, 15:34 | #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
|
|
08.01.2007, 13:53 | #8 |
добрый няша
Старожил
Регистрация: 29.10.2006
Сообщений: 4,804
|
проблема была в том что как заставить этот код выполнятся!!, а не как записать в чужую память код
|
10.01.2007, 08:33 | #9 |
Регистрация: 09.01.2007
Сообщений: 3
|
|
10.01.2007, 20:09 | #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 |