Chertenok.ru - все о программировании
Вход  |  Регистрация  |  Поиск 
Праздник
Завтра :

День славянской письменности и культуры


Помогите записать в память машинные команды
На страницу 1, 2  След.

Новая тема  Ответить  Печать Предыдущая тема  Следующая тема
Автор Сообщение
Пол:Муж Ordep
Новичок


Возраст: 26
Знак зодиака: Водолей
Зарегистрирован: 18.01.2007
Сообщения: 16
Откуда: Новосибирс
СообщениеЧт, 18-Янв-2007 10:13    Заголовок сообщения: Помогите записать в память машинные команды
Цитата

Здравствуйте, господа!
Пожалуйста, педагогично распишите, разложите по полочкам, ибо я никак не вкупаю!!!
Вопрос: Мне нужно, что бы мое приложение получило адрес MessageBoxA, и вместо первых(кпримеру 10) байтов записало что-нибудь(кпримеру Nop). Вот исходник, что не так?(в приведенном примере допущены некоторые синтаксические ошибки в именах переменных, на них забить! Важна логика)

unit KaKoyNibud;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

Alloced_space:pointer;
MessBox_Address:pointer;
my_command:array [1..10] of byte;
written,read:dword;
i:integer; // для инициализации массива команд
implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
for i:=1 to 10 do
my_command[i]:=$90; // ну, типа, NOP
MesBox_Addres:=GetProcAddress(GetModuleHandle('USER32.DLL'),'MessageBoxA');
Alloced_space:=VirtualAllocEx(0,MesBox_Addres,sizeof(my_command),MEM_COMMIT, PAGE_EXECUTE_READWRITE);
//А нужна ли вообще процедура выделения памяти???
WriteProcessMemory(GetCurrentProcessId,MesBox_Addres,@my_command,sizeof(my_command),written);

MessageBox(0,'MessageBoxA','А вот и я',0); //И как не странно она выводится

end;

end.
В начало
Посмотреть профиль Отправить личное сообщение
Пол:Муж Ktf
Администратор


Возраст: 32
Знак зодиака: Рак
Зарегистрирован: 15.05.2005
Сообщения: 1502
Откуда: localhost
СообщениеЧт, 18-Янв-2007 10:39 
Цитата

1. WriteProcessMemory требует указания хендла процесса, а не его идентификатора.
для получения хендла текущего процесса необходимо использовать GetCurrentProcess.

2. процедура выделения памяти в данном случае не нужна, т.к. модифицируется уже существующая область памяти.

_________________
Пойду посплю перед сном.
В начало
Посмотреть профиль Отправить личное сообщение
Пол:Муж Ordep
Новичок


Возраст: 26
Знак зодиака: Водолей
Зарегистрирован: 18.01.2007
Сообщения: 16
Откуда: Новосибирс
СообщениеЧт, 18-Янв-2007 12:15    Заголовок сообщения: AccessViolation!!!
Цитата

1.Записал в память 2 байт, пишу третий - ругается матом AccessViolation!!! Че делать?
2. При попытки инициализировать структуру замещающих байтов:

procedure TForm1.FormCreate(Sender: TObject);
begin
r.s_push:=$68;
r.s_Addr:=MyMesBox;
r.s_ret:=$c3;
end;

прога выолняет этот код, хотя я ей этого не говорил.
В начало
Посмотреть профиль Отправить личное сообщение
Пол:Муж NikotiN
Розовый мамонт


Возраст: 26
Знак зодиака: Овен
Зарегистрирован: 18.03.2005
Сообщения: 2137

СообщениеЧт, 18-Янв-2007 19:23 
Цитата

гы, и зачем занимаешься сплайсингом?

имхо, никто не даст тебе записать в чужую память что-то. нужно сначала права выставить себе дебаггера.... счас поищу у себя лит-ру...

Добавлено спустя 13 минут 10 секунд:

гы, не нашёл)
но там нужно как минимум с токенами процесса возиться, чтобы выставить привилегии себе, иначе путь заказан)

_________________
Сила дурака в том, что умный перед ним бессилен.
В начало
Посмотреть профиль Отправить личное сообщение
Пол:Муж Ktf
Администратор


Возраст: 32
Знак зодиака: Рак
Зарегистрирован: 15.05.2005
Сообщения: 1502
Откуда: localhost
СообщениеПт, 19-Янв-2007 13:51 
Цитата

почему это в чужую память? это память текущего процесса, почему вдруг она будет недоступна? у меня WriteProcessMemory запросто пишет по адресу MessBox_Address
_________________
Пойду посплю перед сном.
В начало
Посмотреть профиль Отправить личное сообщение
Пол:Муж Ordep
Новичок


Возраст: 26
Знак зодиака: Водолей
Зарегистрирован: 18.01.2007
Сообщения: 16
Откуда: Новосибирс
СообщениеПт, 19-Янв-2007 15:15 
Цитата

Это адресное пр-во моего процесса, поэтому я могу иметь доступ к памяти (по идее)... Кстати, если можно поподробней про токен процесса.
Реально ли записать байты в чужое адресное пространство без использования dll?

_________________
Зараннее тащусь
В начало
Посмотреть профиль Отправить личное сообщение
Пол:Муж NikotiN
Розовый мамонт


Возраст: 26
Знак зодиака: Овен
Зарегистрирован: 18.03.2005
Сообщения: 2137

СообщениеПт, 19-Янв-2007 19:00 
Цитата

имхо вполне реально, но опять же нужны привилегии debug, а вместо первых байтов функции пишешь jmp на то что нужно, dll же нужна только для подключения к процессу "того, что нужно", хотя можно и просто записать весь код функции, но тогда есть шанс потереть что-то важное)

я нашёл статьи хорошие:
http://www.wasm.ru/article.php?article=apihook_1
http://www.wasm.ru/article.php?article=apihook_2
http://www.wasm.ru/article.php?article=apihook_3

_________________
Сила дурака в том, что умный перед ним бессилен.
В начало
Посмотреть профиль Отправить личное сообщение
Пол:Муж Ordep
Новичок


Возраст: 26
Знак зодиака: Водолей
Зарегистрирован: 18.01.2007
Сообщения: 16
Откуда: Новосибирс
СообщениеПт, 19-Янв-2007 19:27 
Цитата

Благодарю за статьи. Уже добирался до них и появилось ещё больше вопросов.
Если я чужом адресном пространстве в начало перехватываемой функции поставлю jmp,а моя процедуры обработки (подставная) находится в моём адресном пространстве, будет ли осуществлён этот переход. Если нет, то как поместить код подставной процедуры в адресное пр-во нужного процесса.

_________________
Зараннее тащусь
В начало
Посмотреть профиль Отправить личное сообщение
Пол:Муж NikotiN
Розовый мамонт


Возраст: 26
Знак зодиака: Овен
Зарегистрирован: 18.03.2005
Сообщения: 2137

СообщениеПт, 19-Янв-2007 19:38 
Цитата

dll )))
_________________
Сила дурака в том, что умный перед ним бессилен.
В начало
Посмотреть профиль Отправить личное сообщение
Пол:Муж Ordep
Новичок


Возраст: 26
Знак зодиака: Водолей
Зарегистрирован: 18.01.2007
Сообщения: 16
Откуда: Новосибирс
СообщениеСб, 20-Янв-2007 14:35 
Цитата

окак...
_________________
Зараннее тащусь
В начало
Посмотреть профиль Отправить личное сообщение
DrPass
Знающий :)
/Почетный Модератор/


Возраст: 31
Знак зодиака: Лев
Зарегистрирован: 02.05.2002
Сообщения: 5709
Откуда: Донецк
СообщениеСб, 20-Янв-2007 15:11 
Цитата

Цитата:
Если я чужом адресном пространстве в начало перехватываемой функции поставлю jmp,а моя процедуры обработки (подставная) находится в моём адресном пространстве, будет ли осуществлён этот переход

Нет, конечно. Будет выполнен переход "в никуда" - по указанному адресу в пространстве того процесса. Ну у тов. Рихтера подробно расписано, как внедрять свои DLL в АП чужих процессов

_________________
Да пребудет с вами Сила!
В начало
Посмотреть профиль Отправить личное сообщение
Пол:Муж Ordep
Новичок


Возраст: 26
Знак зодиака: Водолей
Зарегистрирован: 18.01.2007
Сообщения: 16
Откуда: Новосибирс
СообщениеСб, 20-Янв-2007 15:29 
Цитата

ИТОГО!
Мне нужно, чтобы моя прога делала следующее:
Ну преставим себе такую ситуацию, я работаю(к примеру) в notepad пытаюсь его закрыть, а он вместо сообщения "Сохранить изменения?" делает мне угодные действия(Веводит MessageBox, перезагружает комп, просто закрывает блокнот, что угодно......). Что мне нужно? (можно просто в теории, кратеньк, по пунктам)
Зараннее тащщузь...

_________________
Зараннее тащусь
В начало
Посмотреть профиль Отправить личное сообщение
Пол:Муж NikotiN
Розовый мамонт


Возраст: 26
Знак зодиака: Овен
Зарегистрирован: 18.03.2005
Сообщения: 2137

СообщениеСб, 20-Янв-2007 18:54 
Цитата

быстрый но глупый способ: сплайсинг (причём будешь искать в проессах нотепад, потом изменять его функции, потом снова искать...)
нормальный способ: дизасм. т.к. нотепад без защиты, то делается это легко ;)

_________________
Сила дурака в том, что умный перед ним бессилен.
В начало
Посмотреть профиль Отправить личное сообщение
Пол:Муж aka57
Я живу тут....


Возраст: 28
Знак зодиака: Стрелец
Зарегистрирован: 03.07.2003
Сообщения: 1287

СообщениеСб, 20-Янв-2007 19:06 
Цитата

to Ordep

Вирус чтоль написать хочешь? А-я-яй
В начало
Посмотреть профиль Отправить личное сообщение
Пол:Муж Ordep
Новичок


Возраст: 26
Знак зодиака: Водолей
Зарегистрирован: 18.01.2007
Сообщения: 16
Откуда: Новосибирс
СообщениеСб, 20-Янв-2007 19:30    Заголовок сообщения: Я же не хакер!
Цитата

Вирус чтоль написать хочешь?
to aka57:
Какой же это вирус, когда эта хреновинка будет палиться всеми Антивирусами. Это локальная приколюха над сестрой, типа подарка, но это не так важно....

To все остальные:
ОК, IDA -то у меня есть, ну и что дальше?
Дело в том, что я недавно прогаммирую с системным уклоном, поэтому многово не понимаю...

_________________
Зараннее тащусь
В начало
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Страница 1 из 2 На страницу 1, 2  След.
Перейти:  
Новая тема  Ответить  Печать

Вы можете начинать темы
Вы можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете присоединять файлы в этом форуме
Вы можете скачивать файлы в этом форуме
хостинг от .masterhost 
Rambler's Top100