Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2013.06.16;
Скачать: CL | DM;

Вниз

Перехват АПИ   Найти похожие ветки 

 
Rouse_ ©   (2013-01-27 02:04) [0]

Ффух, добил таки статейку которую на новогодние хотел выложить, можно, так сказать попинать :)
http://alexander-bagel.blogspot.ru/2013/01/intercept.html

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

ЗЫ: Керк, я свое закончил - ты там про вызов библиотек из приложений другой разрядности обещал обзорку сделать, когда будет, то? :)


 
Германн ©   (2013-01-27 02:25) [1]

Удалено модератором


 
Rouse_ ©   (2013-01-27 02:29) [2]

Удалено модератором


 
Германн ©   (2013-01-27 02:42) [3]

Удалено модератором


 
Rouse_ ©   (2013-01-27 02:56) [4]

Готово.
Кстати по статье - это практически полная выжимка моих знаний по перехвату в третьем кольце, из не рассмотренного если честно там только трюкачество осталось, которое обычно не применяется в нормальных программах :) А вот народу, думаю будет интересно (ну по крайней мере я лет эдак 14 назад точно бы заинтересовался :)


 
Дмитрий С ©   (2013-01-27 03:54) [5]

"Не" с прилагательными пишется слитно, если нет противопоставления:)

P.S. про HotPatch было полезно узнать, спасибо.
У меня была как-то идея:
1. Запоминаем начало функции, которую перехватываем (от 6 до N байт).
 N определяется границей инструкций.
2. Заменяем первые 6 байт на PUSH xxx; RET.
3. Выделяем запускаемую память, копируем туда N байт и дополняем еще одним PUSH yyy; RET, где yyy - адрес начала перехваченной функции + N.

При таком подходе пропадает проблема вызова оригинальной функции при работе в многопоточном приложении. Но задача определения границы инструкции показалась для меня "нестоящей свеч".


 
Дмитрий С ©   (2013-01-27 04:19) [6]

Еще посмотрел
function InjectLib(ProcessID: Integer): Boolean;

// Выделяем в нем память под строку
   DllPath := AnsiString(ExtractFilePath(ParamStr(0)) + DLLName);
   RemoteDll := VirtualAllocEx(Process, nil, Length(DllPath),
     MEM_COMMIT or MEM_TOP_DOWN, PAGE_READWRITE);
   if RemoteDll = nil then Exit;
   try
     // Пишем путь к длл в его адресное пространство
     if not WriteProcessMemory(Process, RemoteDll, PChar(DllPath),
       Length(DllPath), BytesWriten) then Exit;
     if BytesWriten <> DWORD(Length(DllPath)) then Exit;

Не совсем по теме, но кажется, что для RemoteDll нужен еще 1 байт для #0.


 
Rouse_ ©   (2013-01-28 11:38) [7]


> Дмитрий С ©   (27.01.13 04:19) [6]

Угу, прошляпил при правке кода под семерку, спасибо, обновил.


 
Kerk ©   (2013-01-29 13:44) [8]


> ЗЫ: Керк, я свое закончил - ты там про вызов библиотек из
> приложений другой разрядности обещал обзорку сделать, когда
> будет, то? :)

Да я все еще не уверен надо ли. Я ж народ поспрашивал, 64бита вообще никого не интересуют.


 
O'ShinW ©   (2013-02-12 13:49) [9]

Спасибо, Розыч!


 
Rouse_ ©   (2013-02-12 15:33) [10]

Та незачто, главное чтоб на пользу пошло :)


 
Rouse_ ©   (2013-02-12 16:24) [11]


> Kerk ©   (29.01.13 13:44) [8]
> Да я все еще не уверен надо ли. Я ж народ поспрашивал, 64бита
> вообще никого не интересуют.

ЗЫ: Ром, обещал - делай. Пусть через хостпроцесс, но все равно идея-то рабочая. Тем более, если мне (или кому еще) потребуется на скорую руку что сварганить, я тупо твой код в виде рыбы возьму и с минимальными переделками прикручу, всяко полезно будет :)



Страницы: 1 вся ветка

Текущий архив: 2013.06.16;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.009 c
15-1360233740
Pit
2013-02-07 14:42
2013.06.16
MemTest 86 на флешку


15-1360134224
Pit
2013-02-06 11:03
2013.06.16
Отладка VCL удаленно


15-1359670971
картман
2013-02-01 02:22
2013.06.16
игра


15-1360300655
alexdn
2013-02-08 09:17
2013.06.16
Косм телескоп Джеймс Вебб


15-1360433643
antonn
2013-02-09 22:14
2013.06.16
Залогинить пользователя