IAT Hooking для тестирования - PullRequest
       16

IAT Hooking для тестирования

1 голос
/ 01 декабря 2011

Я пытаюсь подключить функцию к процессу cmd.exe, DLL просто впрыскивается, проблема в том, что я не могу заставить cmd.exe вызвать мою функцию, когда я пытаюсь ввести слово "dir" в командеподскажите, что он показывает те же результаты, что и при смене имени на 'dan', что я делаю не так?

HANDLE WINAPI newFindFirstFileA(__in   LPCTSTR lpFileName, __out  LPWIN32_FIND_DATA lpFindFileData) 
{
    WIN32_FIND_DATA FindFileData;
    HANDLE hFind = FindFirstFile(lpFileName, &FindFileData);
    *FindFileData.cFileName = L'Dan';
    lpFindFileData = &FindFileData;
    return hFind;
}


BOOL APIENTRY DllMain (HINSTANCE hInst     /* Library instance handle. */ ,
                       DWORD reason        /* Reason this function is being called. */ ,
                       LPVOID reserved     /* Not used. */ )
{
    switch (reason)
    {
        case DLL_PROCESS_ATTACH:
        MessageBox(NULL,L"DLL Was injected!", L"Message" ,NULL);

        /* Hooking function */
        DWORD* dw = (DWORD*)GetProcAddress( GetModuleHandleA("kernel32.dll"), "FindFirstFileA" );
        *dw = (DWORD)newFindFirstFileA;
        break;
    }  

    /* Returns TRUE on success, FALSE on failure */
    return TRUE;
}

1 Ответ

4 голосов
/ 01 декабря 2011

GetProcAddress не возвращает указатель на запись IAT. Вместо этого он возвращает местоположение фактической функции. Таким образом, *dw = (DWORD) newFindFirstFileA перезапишет пролог функции FindFirstFileA, что будет иметь катастрофические последствия. Обратитесь к этой статье для подробного объяснения перехвата API

...