Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2013.06.16;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.004 c
15-1360249924
Артём
2013-02-07 19:12
2013.06.16
CSS


15-1359970962
Empleado
2013-02-04 13:42
2013.06.16
compressed http/https


15-1360268057
картман
2013-02-08 00:14
2013.06.16
как сделать?


15-1360232154
Interrupt Directive
2013-02-07 14:15
2013.06.16
Внешний диск - не работает.


15-1359807822
Дмитрий С
2013-02-02 16:23
2013.06.16
Стартовый бит rs232





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский