Re: Добавление ДЛЛ и перехват API функций
От: urban1981  
Дата: 25.02.15 17:52
Оценка:
Здравствуйте.Сейчас вижу ещё один способ инжекта ДЛЛ-это отредактировать ЕХЕ файл вручную через редактор WinHex или подобный — вписать длл и ее вызов при старте ехе.Инжект получился вышеуказанным способом (PETools->PeEditor).Версию проги только надо брать нормальную. Длл внедрили в DrFish.exe. Этот модуль в устройстве отвечает за считывании данных ЖПС с портов и дальнейшей раздачи их остальным модулям или что то вроде этого...Задача ДЛЛ перехватить вышесказанные АПИ функции с подсунуть мои...делать это она будет при помощи редактирования таблиц импорта...Вот нарыл функцию которая это делает.Подскажите где берётся структура HDATA? Заранее всем спасибо!
DWORD XXX ( HANDLE hProc, DWORD dFind, DWORD dReplace )
{
    DWORD ret = 0;
    //GODMODE ON
    BOOL  bOldKMode = SetKMode ( TRUE );
    DWORD dOldPerms = SetProcPermissions ( 0xFFFFFFFF );
    //get process ptr prom handle     
    //Process pr;
    HDATA * hProcHD = ( HDATA * ) ( 0x80000000 | ( ( DWORD ) hProc & HANDLE_ADDRESS_MASK ) );
    PROCESS * prc = ( PROCESS * ) hProcHD->pvObj;
    //get imports sections
    struct ImpHdr * blockptr, * blockstart;

    blockstart = ( struct ImpHdr * ) MapPtrProc ( prc->e32.e32_vbase + prc->e32.e32_unit[IMP].rva, prc );
    //iterate thru imports sections
    for ( blockptr = blockstart; blockptr->imp_lookup; ++blockptr )
    {
        DWORD dOldProtect, tmp;
        //get vectors ptr
        DWORD * vectors = ( DWORD * ) MapPtrProc ( prc->e32.e32_vbase + blockptr->imp_address, prc );
        //count vectors
        DWORD * vptr = vectors;
        while ( * vptr ) ++vptr;
        DWORD vcnt = ( vptr - vectors );
        //try to unlock imports section memory
        if ( VirtualProtect ( vectors, vcnt * sizeof ( DWORD ), PAGE_EXECUTE_READWRITE, &dOldProtect ) )
        {
            //find&replace
            for ( UINT i = 0; i < vcnt; ++i )
            {
                if ( vectors[i] == dFind )
                {
                    vectors[i] = dReplace;
                    ++ret;
                }
            }
            //lock back
            VirtualProtect ( vectors, vcnt * sizeof ( DWORD ), dOldProtect, &tmp );
        }
    }
    //GODMODE OFF
    SetProcPermissions ( dOldPerms );
    SetKMode ( bOldKMode );
    return ret;
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.