Проблема с перехватом CreateFile
От: Аноним  
Дата: 29.07.02 08:03
Оценка:
Пытаюсь выполнить перехват API функции CreateFileA, методом изменения адреса в разделе импорта. Все нормально перехватывается, однако после любого вызова CreateFileA, вызывающее приложение падает. Причем, с некоторыми другими функциями все ok. Под отладчиком во внедренной DLL видно, что вызов стандартной функции проходит нормально, завершение переопределенной функции тоже, креш происходит где-то дальше, а в ассемблере я не силен. :(
В чем тут может быть проблема, или хотя бы в каком направлении копать?

P.S. Попробовал класс Рихтера для перехвата API функций, результат тот же самый.
Re: Проблема с перехватом CreateFile
От: Аноним  
Дата: 29.07.02 08:22
Оценка:
Все-таки креш происходит при вызове стандартной CreateFileA. Сейчас проверил: адрес правильный, типы и последовательность параметров совпадают (выдрано из winbase.h)...
Re: Проблема с перехватом CreateFile
От: vasketsov Россия http://ntprog.by.ru
Дата: 29.07.02 08:53
Оценка:
Здравствуйте Аноним, Вы писали:

А>Пытаюсь выполнить перехват API функции CreateFileA, методом изменения адреса в разделе импорта. Все нормально перехватывается, однако после любого вызова CreateFileA, вызывающее приложение падает. Причем, с некоторыми другими функциями все ok. Под отладчиком во внедренной DLL видно, что вызов стандартной функции проходит нормально, завершение переопределенной функции тоже, креш происходит где-то дальше, а в ассемблере я не силен.

А>В чем тут может быть проблема, или хотя бы в каком направлении копать?

А>P.S. Попробовал класс Рихтера для перехвата API функций, результат тот же самый.


Код покажи, хукать по разному можно.
Васкецов Сергей
http://registry.km.ru
Re[2]: Проблема с перехватом CreateFile
От: Аноним  
Дата: 29.07.02 09:33
Оценка:
V>Код покажи, хукать по разному можно.

typedef HANDLE(*PFNCREATEFILE)(LPCSTR, DWORD, DWORD,
            LPSECURITY_ATTRIBUTES, DWORD, DWORD, HANDLE);
//..................
// Подменная функция:
HANDLE WINAPI CreateFileMyA(LPCSTR lpFileName, DWORD dwDesiredAccess,
    DWORD dwShareMode, LPSECURITY_ATTRIBUTES lpSecurityAttributes,
    DWORD dwCreationDisposition, DWORD dwFlagsAndAttributes,
    HANDLE hTemplateFile) {
    PFNCREATEFILE pfn = ((PFNCREATEFILE)(PROC)g_createFileHook); // вынесено для проверки, чтобы убедиться, что  
                                                                     // адрес тот
        // g_createFileHook - глобальный объект внедряемой DLL, класса, занимающегося поиском и заменой адресов функций в IAT.
        // для простоты, можно представить, что это класс CAPIHook Рихтера. Его пробовал тоже, хотя и мой класс
        // работает с аналогичным результатом.
    HANDLE hHandle = pfn(lpFileName, dwDesiredAccess,
                                dwShareMode, lpSecurityAttributes,
                                dwCreationDisposition, dwFlagsAndAttributes,
                                hTemplateFile); // вот на этом вызове ругается, что
                                                                // вроде как параметры функции не очень...

    return hHandle;
}


Собственно, замена адреса в IAT происходит нормально, адрес исходной функции сохраняется верный, я все тщательно проверил.
Re[3]: Проблема с перехватом CreateFile
От: reg  
Дата: 29.07.02 10:00
Оценка:
Все, проблема снята. Родную-то функцию надо вызывать как __stdcall. Все невнимательность...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.