| Автор
| Сообщение |
 Ordep
Новичок

Возраст: 26
Знак зодиака: 
Зарегистрирован: 18.01.2007
Сообщения: 16
Откуда: Новосибирс
|
|
|
Цитата |
|
Здравствуйте, господа!
Пожалуйста, педагогично распишите, разложите по полочкам, ибо я никак не вкупаю!!!
Вопрос: Мне нужно, что бы мое приложение получило адрес 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
|
|
|
Цитата |
|
1. WriteProcessMemory требует указания хендла процесса, а не его идентификатора.
для получения хендла текущего процесса необходимо использовать GetCurrentProcess.
2. процедура выделения памяти в данном случае не нужна, т.к. модифицируется уже существующая область памяти. _________________ Пойду посплю перед сном. |
|
| В начало |
|
 |
 Ordep
Новичок

Возраст: 26
Знак зодиака: 
Зарегистрирован: 18.01.2007
Сообщения: 16
Откуда: Новосибирс
|
|
|
Цитата |
|
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
|
|
|
Цитата |
|
гы, и зачем занимаешься сплайсингом?
имхо, никто не даст тебе записать в чужую память что-то. нужно сначала права выставить себе дебаггера.... счас поищу у себя лит-ру...
Добавлено спустя 13 минут 10 секунд:
гы, не нашёл)
но там нужно как минимум с токенами процесса возиться, чтобы выставить привилегии себе, иначе путь заказан) _________________ Сила дурака в том, что умный перед ним бессилен. |
|
| В начало |
|
 |
 Ktf
Администратор

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

Возраст: 26
Знак зодиака: 
Зарегистрирован: 18.01.2007
Сообщения: 16
Откуда: Новосибирс
|
|
|
Цитата |
|
Это адресное пр-во моего процесса, поэтому я могу иметь доступ к памяти (по идее)... Кстати, если можно поподробней про токен процесса.
Реально ли записать байты в чужое адресное пространство без использования dll? _________________ Зараннее тащусь |
|
| В начало |
|
 |
 NikotiN
Розовый мамонт

Возраст: 26
Знак зодиака: 
Зарегистрирован: 18.03.2005
Сообщения: 2137
|
|
| В начало |
|
 |
 Ordep
Новичок

Возраст: 26
Знак зодиака: 
Зарегистрирован: 18.01.2007
Сообщения: 16
Откуда: Новосибирс
|
|
|
Цитата |
|
Благодарю за статьи. Уже добирался до них и появилось ещё больше вопросов.
Если я чужом адресном пространстве в начало перехватываемой функции поставлю jmp,а моя процедуры обработки (подставная) находится в моём адресном пространстве, будет ли осуществлён этот переход. Если нет, то как поместить код подставной процедуры в адресное пр-во нужного процесса. _________________ Зараннее тащусь |
|
| В начало |
|
 |
 NikotiN
Розовый мамонт

Возраст: 26
Знак зодиака: 
Зарегистрирован: 18.03.2005
Сообщения: 2137
|
|
|
Цитата |
|
dll ))) _________________ Сила дурака в том, что умный перед ним бессилен. |
|
| В начало |
|
 |
|
|
 |
 Ordep
Новичок

Возраст: 26
Знак зодиака: 
Зарегистрирован: 18.01.2007
Сообщения: 16
Откуда: Новосибирс
|
|
|
Цитата |
|
окак... _________________ Зараннее тащусь |
|
| В начало |
|
 |
DrPass
Знающий :) /Почетный Модератор/

Возраст: 31
Знак зодиака: 
Зарегистрирован: 02.05.2002
Сообщения: 5709
Откуда: Донецк
|
|
|
Цитата |
|
| Цитата: | | Если я чужом адресном пространстве в начало перехватываемой функции поставлю jmp,а моя процедуры обработки (подставная) находится в моём адресном пространстве, будет ли осуществлён этот переход |
Нет, конечно. Будет выполнен переход "в никуда" - по указанному адресу в пространстве того процесса. Ну у тов. Рихтера подробно расписано, как внедрять свои DLL в АП чужих процессов _________________ Да пребудет с вами Сила! |
|
| В начало |
|
 |
 Ordep
Новичок

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

Возраст: 26
Знак зодиака: 
Зарегистрирован: 18.03.2005
Сообщения: 2137
|
|
|
Цитата |
|
быстрый но глупый способ: сплайсинг (причём будешь искать в проессах нотепад, потом изменять его функции, потом снова искать...)
нормальный способ: дизасм. т.к. нотепад без защиты, то делается это легко  _________________ Сила дурака в том, что умный перед ним бессилен. |
|
| В начало |
|
 |
 aka57
Я живу тут....

Возраст: 28
Знак зодиака: 
Зарегистрирован: 03.07.2003
Сообщения: 1287
|
|
|
Цитата |
|
to Ordep
Вирус чтоль написать хочешь?  |
|
| В начало |
|
 |
 Ordep
Новичок

Возраст: 26
Знак зодиака: 
Зарегистрирован: 18.01.2007
Сообщения: 16
Откуда: Новосибирс
|
|
|
Цитата |
|
Вирус чтоль написать хочешь?
to aka57:
Какой же это вирус, когда эта хреновинка будет палиться всеми Антивирусами. Это локальная приколюха над сестрой, типа подарка, но это не так важно....
To все остальные:
ОК, IDA -то у меня есть, ну и что дальше?
Дело в том, что я недавно прогаммирую с системным уклоном, поэтому многово не понимаю... _________________ Зараннее тащусь |
|
| В начало |
|
 |
|