CreateRemoteThread постоянное возникновение ошибки
Появилась необходимость инжектировать свой код в другую программу. Базовый адрес и смещение, куда требуется занести свое значение, известно.
Вот код процедуры: Код:
procedure TMainForm.Button1Click(Sender: TObject); Ошибка возникает при CreateRemoteThread. ThreadAddr и ParamAddr <> nil, т.е. память выделена. Пожалуйста, помогите разобраться с данной проблемой. В инете встречалась пара сообщений о подобной ошибке, но решения и адекватного объяснения, я так и не встретил. P.S. Среда delphi 2009 |
Если CREATE_SUSPENDED указать - та же ошибка получается?
|
Сегодня решил эту проблему выделением большего объема памяти под модуль и под параметры, которые передаются ему (+исправил небольшие неточности в самом коде). Хотя все равно остается не понятным, какой же нужно выделить размер, если VirtualAllocEx(hProcess, 0, SizeOf(Injected), MEM_COMMIT or MEM_RESERVE, PAGE_READWRITE); не дает результата. Я просто вписал 512, и все заработало, но это же не есть оптимальный вариант, учитывая, что хранимая функция может быть и большего размера и меньшего.
|
а под стек и под свободную память откуда оперативка выделяется? (неизвестно как реализуют себя борландовские функции, попавшие в чужой процесс, без инициализации своих библиотек)
|
dwar, во-первых,вы пробовали отлаживать?Например,в SoftIce.
Во-вторых,внедряя код подобным образом,вы скорее всего получите ошибку доступа.Дело в том,что в вашей процедуре Injected могут быть относительные смещения,а VirtualAllocEx вернёт вам в данном случае адрес,заданный системой.Поэтому смещения будут указывать не туда,куда надо,что и вызовет ошибку. И почему вы выделяете место для процедуры размером четыре байта? Более грамотный способ - это внедрение своей библиотеки.Ищите статьи. |
Время: 10:48. |
Время: 10:48.
© OSzone.net 2001-