![]() |
eXeL@B —› Вопросы новичков —› Как программно сбросить состояние регистров и памяти опр. процесса в опр. месте? |
Посл.ответ | Сообщение |
|
Создано: 21 марта 2007 15:03 · Поправил: Sasha73 · Личное сообщение · #1 Уважаемые мастера дэКодинга ! Помогите, плиз, или поскажите можно ли сбросить состаение памяти (стека) опр. процесса в опр. месте этого процесса (т.е. вставить Jmp на нашу прогу и выгрузить в файл 256 байт начиная с ebp-12, будем ли мы видеть эту область памяти под 2к_ХР из своей проги) ? Занимаюсь Ccalc6.80 (версия 6.98.56). Она уже здесь обсуждалась, но так и не доделали до конца, может буду первым. --> Здесь было обсуждение. <-- Если можно, набросайте, пожалуйста, примерчик (желательно на Delphi - ближе всего, можно со вставками Asm). Найти процесс в памяти смогу, нужное смещение тоже, замену нужного кода на Jmp тоже, а вот как подобрать адрес для Jmp не догадаюсь (как вычислить @Metka, т.е. как будет выглядеть на Delphi вставка длинного Jpm на нужное место?) (искать некогда, экспериментировать тоже - время сильно жмет - вот обратился к Вам). И так, как написать? (как вычислить "Metka" ("назад"-это просто смещение, по кот. мы вставляли Jmp?) : begin
P.S.: Извините, если не внятно что-то пояснил - голова не соображает уже, несколько дней подряд трассирую процедуру превращения ответного кода в нужный вид (сложные преобразования). Зараннее благодарен. ![]() |
|
Создано: 21 марта 2007 16:18 · Личное сообщение · #2 Sasha73 пишет: вставка длинного Jpm на нужное место? Ты плохо себе представляешь механизм управления памятью в WinNT (и даже в Win9x так нельзя). Кроме того, плохо знаешь Асм. Существуют безусловные переходы: - короткие (смещение кодируется в знаковый байт), - длинные (смещение знаковое целое (WORD/DOWRD)) - и дальние (сегмент : смещение знаковое целое). Так вот винда каждому процессу выделяет виртуальные смещения от 0 до максимального значения DWORD (разумеется, большая часть этих смещений процессу недоступна). Выходит, что любые короткие и длинные переходы укажут на виртуальное пространство текущего процесса. Дальние переходы под форточками тоже ничего не дадут (процессы разделяются не по сегментам, а через страничную адресацию). Так что сама идея бредовая. Можно делать инжект, можно патч, можно использовать API, но никак не прямыми jmp. Для понимания вопроса рекомендую прочесть: Джеффри РИХТЕР "Создание эффективных WIN32-приложений с учетом специфики 64-разрядной версии Windows" (ссылка есть в топе про электронные книги). ----- Всем привет, я вернулся ![]() |
|
Создано: 22 марта 2007 16:00 · Личное сообщение · #3 Спасибо за разяснение. Bitfry пишет: Кроме того, плохо знаешь Асм. Да, уже забыл. В ДОСе все гораздо проще было. ![]() Bitfry пишет: процессы разделяются не по сегментам, а через страничную адресацию Так я и подозревал, потому и спросил можно ли. Bitfry пишет: Можно делать инжект, можно патч, можно использовать API Какой из методов проще будет? Можно, если не тяжело, примерчик, хотя бы кратко-блоксхемно? Не осталось времени литературу изучить! ![]() ![]() |
![]() |
eXeL@B —› Вопросы новичков —› Как программно сбросить состояние регистров и памяти опр. процесса в опр. месте? |