Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.12.2006, 17:11   #1
Shacal
 
Аватар для Shacal
 
Регистрация: 21.11.2006
Сообщений: 7
Восклицание меняем CS:IP

как поменять IP?
... есть программа, кторая записывает в динамическую(оперативную) память некий машииный код другой программы...
такой вопрос как выполнить этот код?
//============================
Ответ напрашивается сам собой поменять CS:IP на адрес того участка памяти..
но как это сделать?
Shacal вне форума Ответить с цитированием
Старый 18.12.2006, 20:20   #2
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 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
);
Код:
var 
 threadid:dword;

 createremotethread(хендл процесса,0,0,<адрес по которому ты записал код>,0,0,threadid);
rpy3uH вне форума Ответить с цитированием
Старый 21.12.2006, 01:01   #3
Shacal
 
Аватар для Shacal
 
Регистрация: 21.11.2006
Сообщений: 7
По умолчанию

не совсем понял.
как это сделать из ASM.
Shacal вне форума Ответить с цитированием
Старый 22.12.2006, 20:09   #4
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,804
По умолчанию

ты знаешь как вызывать API на асме?
в MASM и FASM через invoke
в TASM через call func, param1,......, paramN
rpy3uH вне форума Ответить с цитированием
Старый 23.12.2006, 11:02   #5
Shacal
 
Аватар для Shacal
 
Регистрация: 21.11.2006
Сообщений: 7
По умолчанию

понял. спс, буду пробовать.
Shacal вне форума Ответить с цитированием
Старый 24.12.2006, 12:54   #6
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,804
По умолчанию

отпишись потом.
rpy3uH вне форума Ответить с цитированием
Старый 06.01.2007, 15:34   #7
liss
 
Аватар для liss
 
Регистрация: 06.01.2007
Сообщений: 9
По умолчанию Элементарно :)

Цитата:
Сообщение от Shacal Посмотреть сообщение
как поменять IP?
... есть программа, кторая записывает в динамическую(оперативную) память некий машииный код другой программы...
такой вопрос как выполнить этот код?
//============================
Ответ напрашивается сам собой поменять CS:IP на адрес того участка памяти..
но как это сделать?
способ первый: длинный jump (IA32: jmp 1234:12345678; IA16: jmp 1234:1234)
способ второй: 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
liss вне форума Ответить с цитированием
Старый 08.01.2007, 13:53   #8
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,804
По умолчанию

проблема была в том что как заставить этот код выполнятся!!, а не как записать в чужую память код
rpy3uH вне форума Ответить с цитированием
Старый 10.01.2007, 08:33   #9
VladimirKa86
 
Регистрация: 09.01.2007
Сообщений: 3
По умолчанию

Цитата:
Сообщение от rpy3uH Посмотреть сообщение
проблема была в том что как заставить этот код выполнятся!!, а не как записать в чужую память код
Liss правильно говорит. Эти способы не записывают в чужую память код, а как раз передают управление.
VladimirKa86 вне форума Ответить с цитированием
Старый 10.01.2007, 20:09   #10
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,804
По умолчанию

но ты же никогда не сможешь прыгнуть командой jmp в чужой процесс
это невозможно!!!!!!
rpy3uH вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Меняем Explorer Veiron Свободное общение 4 19.05.2008 12:51
Меняем цвет текста в элементе Sargon Общие вопросы Delphi 15 13.09.2007 08:06
Меняем иконку у программки. celovec Общие вопросы Delphi 4 01.07.2007 19:06